ObjFW  Artifact [86b6af3df5]

Artifact 86b6af3df53f622d25caa711759eaa97b9ee8e68a5b432a2f2080be05c45ef4a:

Wiki page [API Review for 1.0] by js on 2022-09-12 17:41:19.
D 2022-09-12T17:41:19.385
L API\sReview\sfor\s1.0
N text/x-markdown
P 4dc7ddff2018b228960f6afe00c0b2624263fda8fba28e777a21a61883da7d0b
U js
W 12731
# API Review for 1.0

For the 1.0 release, all APIs should be reviewed, as starting with 1.0, they are supposed to be stable. All documented methods, functions, classes, types and structs that are part of the installed headers are considered part of the API.

Right now, we have fhe following installed headers:

* ✅ `ObjFW/macros.h`
* ✅ `ObjFW/objfw-defs.h`
* ✅ `ObjFW/ObjFW.h`
* ✅ `ObjFW/OFAcceptFailedException.h`
* ✅ `ObjFW/OFAllocFailedException.h`
* ✅ `ObjFW/OFAlreadyConnectedException.h`
* ✅ `ObjFW/OFApplication.h`
* ✅ `ObjFW/OFArchiveEntry.h`
* ✅ `ObjFW/OFArray.h`
* ✅ `ObjFW/OFAtomic.h`
* ✅ `ObjFW/OFBindFailedException.h`
* ✅ `ObjFW/OFBlock.h`
* ✅ `ObjFW/OFChangeCurrentDirectoryPathFailedException.h`
* ✅ `ObjFW/OFCharacterSet.h`
* ✅ `ObjFW/OFChecksumMismatchException.h`
* ✅ `ObjFW/OFCollection.h`
* ✅ `ObjFW/OFColor.h`
* ✅ `ObjFW/OFConditionBroadcastFailedException.h`
* ✅ `ObjFW/OFCondition.h`
* ✅ `ObjFW/OFConditionSignalFailedException.h`
* ✅ `ObjFW/OFConditionStillWaitingException.h`
* ✅ `ObjFW/OFConditionWaitFailedException.h`
* ✅ `ObjFW/OFConnectionFailedException.h`
* ✅ `ObjFW/OFConstantString.h`
* ✅ `ObjFW/OFCopyItemFailedException.h`
* ✅ `ObjFW/OFCountedSet.h`
* ✅ `ObjFW/OFCreateDirectoryFailedException.h`
* ✅ `ObjFW/OFCreateSymbolicLinkFailedException.h`
* ✅ `ObjFW/OFCreateWindowsRegistryKeyFailedException.h`
* ✅ `ObjFW/OFCryptographicHash.h`
* ✅ `ObjFW/OFData+CryptographicHashing.h`
* ✅ `ObjFW/OFDatagramSocket.h`
* ✅ `ObjFW/OFData.h`
* ✅ `ObjFW/OFData+MessagePackParsing.h`
* ✅ `ObjFW/OFDate.h`
* ✅ `ObjFW/OFDeleteWindowsRegistryKeyFailedException.h`
* ✅ `ObjFW/OFDeleteWindowsRegistryValueFailedException.h`
* ✅ `ObjFW/OFDictionary.h`
* ✅ `ObjFW/OFDNSQueryFailedException.h`
* ✅ `ObjFW/OFDNSQuery.h`
* ✅ `ObjFW/OFDNSResolver.h`
* ✅ `ObjFW/OFDNSResourceRecord.h`
* ✅ `ObjFW/OFDNSResponse.h`
* ✅ `ObjFW/OFEnumerationMutationException.h`
* ✅ `ObjFW/OFEnumerator.h`
* ✅ `ObjFW/OFException.h`
* ✅ `ObjFW/OFFile.h`
* ✅ `ObjFW/OFFileManager.h`
* ✅ `ObjFW/OFGetCurrentDirectoryPathFailedException.h`
* ✅ `ObjFW/OFGetOptionFailedException.h`
* ✅ `ObjFW/OFGetWindowsRegistryValueFailedException.h`
* ✅ `ObjFW/OFGZIPStream.h`
* ✅ `ObjFW/OFHashAlreadyCalculatedException.h`
* ✅ `ObjFW/OFHashNotCalculatedException.h`
* ✅ `ObjFW/OFHMAC.h`
* ✅ `ObjFW/OFHTTPClient.h`
* ✅ `ObjFW/OFHTTPCookie.h`
* ✅ `ObjFW/OFHTTPCookieManager.h`
* ✅ `ObjFW/OFHTTPRequestFailedException.h`
* ✅ `ObjFW/OFHTTPRequest.h`
* ✅ `ObjFW/OFHTTPResponse.h`
* ✅ `ObjFW/OFHTTPServer.h`
* ✅ `ObjFW/OFInflate64Stream.h`
* ✅ `ObjFW/OFInflateStream.h`
* ✅ `ObjFW/OFINICategory.h`
* ✅ `ObjFW/OFINIFile.h`
* ✅ `ObjFW/OFInitializationFailedException.h`
* ✅ `ObjFW/OFInvalidArgumentException.h`
* ✅ `ObjFW/OFInvalidEncodingException.h`
* ✅ `ObjFW/OFInvalidFormatException.h`
* ✅ `ObjFW/OFInvalidJSONException.h`
* ✅ `ObjFW/OFInvalidServerReplyException.h`
* ✅ `ObjFW/OFInvocation.h`
* ✅ `ObjFW/OFIPXSocket.h`
* ✅ `ObjFW/OFJSONRepresentation.h`
* ✅ `ObjFW/OFKernelEventObserver.h`
* ✅ `ObjFW/OFKeyValueCoding.h`
* ✅ `ObjFW/OFLHAArchiveEntry.h`
* ✅ `ObjFW/OFLHAArchive.h`
* ✅ `ObjFW/OFLinkFailedException.h`
* ✅ `ObjFW/OFListenFailedException.h`
* ✅ `ObjFW/OFList.h`
* ✅ `ObjFW/OFLoadPluginFailedException.h`
* ✅ `ObjFW/OFLocale.h`
* ✅ `ObjFW/OFLockFailedException.h`
* ✅ `ObjFW/OFLocking.h`
* ✅ `ObjFW/OFMalformedXMLException.h`
* ✅ `ObjFW/OFMapTable.h`
* ✅ `ObjFW/OFMD5Hash.h`
* ✅ `ObjFW/OFMemoryStream.h`
* ✅ `ObjFW/OFMessagePackExtension.h`
* ✅ `ObjFW/OFMessagePackRepresentation.h`
* ✅ `ObjFW/OFMethodSignature.h`
* ✅ `ObjFW/OFMoveItemFailedException.h`
* ✅ `ObjFW/OFMutableArchiveEntry.h`
* ✅ `ObjFW/OFMutableArray.h`
* ✅ `ObjFW/OFMutableData.h`
* ✅ `ObjFW/OFMutableDictionary.h`
* ✅ `ObjFW/OFMutableLHAArchiveEntry.h`
* ✅ `ObjFW/OFMutablePair.h`
* ✅ `ObjFW/OFMutableSet.h`
* ✅ `ObjFW/OFMutableString.h`
* ✅ `ObjFW/OFMutableTarArchiveEntry.h`
* ✅ `ObjFW/OFMutableTriple.h`
* ✅ `ObjFW/OFMutableURL.h`
* ✅ `ObjFW/OFMutableZIPArchiveEntry.h`
* ✅ `ObjFW/OFMutex.h`
* ✅ `ObjFW/OFNotificationCenter.h`
* ✅ `ObjFW/OFNotification.h`
* ✅ `ObjFW/OFNotImplementedException.h`
* ✅ `ObjFW/OFNotOpenException.h`
* ✅ `ObjFW/OFNull.h`
* ✅ `ObjFW/OFNumber.h`
* ✅ `ObjFW/OFObject.h`
* ✅ `ObjFW/OFObject+KeyValueCoding.h`
* ✅ `ObjFW/OFObject+Serialization.h`
* ✅ `ObjFW/OFObserveFailedException.h`
* ✅ `ObjFW/OFOnce.h`
* ✅ `ObjFW/OFOpenItemFailedException.h`
* ✅ `ObjFW/OFOpenWindowsRegistryKeyFailedException.h`
* ✅ `ObjFW/OFOptionsParser.h`
* ✅ `ObjFW/OFOutOfMemoryException.h`
* ✅ `ObjFW/OFOutOfRangeException.h`
* ✅ `ObjFW/OFPair.h`
* ✅ `ObjFW/OFPBKDF2.h`
* ✅ `ObjFW/OFPlainCondition.h`
* ✅ `ObjFW/OFPlainMutex.h`
* ✅ `ObjFW/OFPlainThread.h`
* ✅ `ObjFW/OFPlugin.h`
* ✅ `ObjFW/OFReadFailedException.h`
* ✅ `ObjFW/OFReadOrWriteFailedException.h`
* ✅ `ObjFW/OFRecursiveMutex.h`
* ✅ `ObjFW/OFRemoveItemFailedException.h`
* ✅ `ObjFW/OFResolveHostFailedException.h`
* ✅ `ObjFW/OFRetrieveItemAttributesFailedException.h`
* ✅ `ObjFW/OFRIPEMD160Hash.h`
* ✅ `ObjFW/OFRunLoop.h`
* ✅ `ObjFW/OFScrypt.h`
* ✅ `ObjFW/OFSecureData.h`
* ✅ `ObjFW/OFSeekableStream.h`
* ✅ `ObjFW/OFSeekFailedException.h`
* ✅ `ObjFW/OFSequencedPacketSocket.h`
* ✅ `ObjFW/OFSerialization.h`
* ✅ `ObjFW/OFSet.h`
* ✅ `ObjFW/OFSetItemAttributesFailedException.h`
* ✅ `ObjFW/OFSetOptionFailedException.h`
* ✅ `ObjFW/OFSetWindowsRegistryValueFailedException.h`
* ✅ `ObjFW/OFSettings.h`
* ✅ `ObjFW/OFSHA1Hash.h`
* ✅ `ObjFW/OFSHA224Hash.h`
* ✅ `ObjFW/OFSHA224Or256Hash.h`
* ✅ `ObjFW/OFSHA256Hash.h`
* ✅ `ObjFW/OFSHA384Hash.h`
* ✅ `ObjFW/OFSHA384Or512Hash.h`
* ✅ `ObjFW/OFSHA512Hash.h`
* ✅ `ObjFW/OFSocket.h`
* ✅ `ObjFW/OFSortedList.h`
* ✅ `ObjFW/OFSPXSocket.h`
* ✅ `ObjFW/OFSPXStreamSocket.h`
* ✅ `ObjFW/OFStdIOStream.h`
* ✅ `ObjFW/OFStillLockedException.h`
* ✅ `ObjFW/OFStream.h`
* ✅ `ObjFW/OFStreamSocket.h`
* ✅ `ObjFW/OFString+CryptographicHashing.h`
* ✅ `ObjFW/OFString.h`
* ✅ `ObjFW/OFString+JSONParsing.h`
* ✅ `ObjFW/OFString+PathAdditions.h`
* ✅ `ObjFW/OFString+PropertyListParsing.h`
* ✅ `ObjFW/OFString+Serialization.h`
* ✅ `ObjFW/OFString+URLEncoding.h`
* ✅ `ObjFW/OFString+XMLEscaping.h`
* ✅ `ObjFW/OFString+XMLUnescaping.h`
* ✅ `ObjFW/OFSubprocess.h`
* ✅ `ObjFW/OFSystemInfo.h`
* ✅ `ObjFW/OFTarArchiveEntry.h`
* ✅ `ObjFW/OFTarArchive.h`
* ✅ `ObjFW/OFTCPSocket.h`
* ✅ `ObjFW/OFThread.h`
* ✅ `ObjFW/OFThreadJoinFailedException.h`
* ✅ `ObjFW/OFThreadStartFailedException.h`
* ✅ `ObjFW/OFThreadStillRunningException.h`
* ✅ `ObjFW/OFTimer.h`
* ✅ `ObjFW/OFTLSHandshakeFailedException.h`
* ✅ `ObjFW/OFTLSKey.h`
* ✅ `ObjFW/OFTLSStream.h`
* ✅ `ObjFW/OFTriple.h`
* ✅ `ObjFW/OFTruncatedDataException.h`
* ✅ `ObjFW/OFUDPSocket.h`
* ✅ `ObjFW/OFUnboundNamespaceException.h`
* ✅ `ObjFW/OFUnboundPrefixException.h`
* ✅ `ObjFW/OFUndefinedKeyException.h`
* ✅ `ObjFW/OFUNIXDatagramSocket.h`
* ✅ `ObjFW/OFUNIXStreamSocket.h`
* ✅ `ObjFW/OFUnknownXMLEntityException.h`
* ✅ `ObjFW/OFUnlockFailedException.h`
* ✅ `ObjFW/OFUnsupportedProtocolException.h`
* ✅ `ObjFW/OFUnsupportedVersionException.h`
* ✅ `ObjFW/OFURL.h`
* ✅ `ObjFW/OFURLHandler.h`
* ✅ `ObjFW/OFUUID.h`
* ✅ `ObjFW/OFValue.h`
* ✅ `ObjFW/OFWindowsRegistryKey.h`
* ✅ `ObjFW/OFWriteFailedException.h`
* ✅ `ObjFW/OFXMLAttribute.h`
* ✅ `ObjFW/OFXMLCDATA.h`
* ✅ `ObjFW/OFXMLCharacters.h`
* ✅ `ObjFW/OFXMLComment.h`
* ✅ `ObjFW/OFXMLElementBuilder.h`
* ✅ `ObjFW/OFXMLElement.h`
* ✅ `ObjFW/OFXMLElement+Serialization.h`
* ✅ `ObjFW/OFXMLNode.h`
* ✅ `ObjFW/OFXMLParser.h`
* ✅ `ObjFW/OFXMLProcessingInstruction.h`
* ✅ `ObjFW/OFZIPArchiveEntry.h`
* ✅ `ObjFW/OFZIPArchive.h`
* ✅ `ObjFW/platform/GCC4.7/OFAtomic.h`
* ✅ `ObjFW/platform/GCC4/OFAtomic.h`
* ✅ `ObjFW/platform.h`
* ✅ `ObjFW/platform/macOS/OFAtomic.h`
* ✅ `ObjFW/platform/PowerPC/OFAtomic.h`
* ✅ `ObjFW/platform/x86/OFAtomic.h`
* ✅ `ObjFWRT/ObjFWRT.h`
* ✅ `ObjFWTLS/ObjFWTLS.h`

Some things still need to be checked on a global level:

* ✅ Classes that already reserve ivars need to be considered to be changed to restricted subclassing
* ✅ All classes either restrict subclassing or reserve ivars
* ❌ All exception throws need to be audited (they're part of the API, too!)
  * ❌ OFASPrintF.m
  * ❌ OFAdjacentArray.m
  * ❌ OFApplication.m
  * ❌ OFArray.m
  * ❌ OFBitSetCharacterSet.m
  * ❌ OFBlock.m
  * ❌ OFBytesValue.m
  * ❌ OFColor.m
  * ❌ OFCondition.m
  * ❌ OFConstantString.m
  * ❌ OFCountedMapTableSet.m
  * ❌ OFDNSResolver.m
  * ❌ OFDNSResolverSettings.m
  * ❌ OFDNSResourceRecord.m
  * ❌ OFData+MessagePackParsing.m
  * ❌ OFData.m
  * ❌ OFDatagramSocket.m
  * ❌ OFDate.m
  * ❌ OFDictionary.m
  * ❌ OFEmbeddedFileURLHandler.m
  * ❌ OFEpollKernelEventObserver.m
  * ❌ OFFile.m
  * ❌ OFFileManager.m
  * ❌ OFFileURLHandler.m
  * ❌ OFGZIPStream.m
  * ❌ OFHMAC.m
  * ❌ OFHTTPClient.m
  * ❌ OFHTTPCookie.m
  * ❌ OFHTTPRequest.m
  * ❌ OFHTTPResponse.m
  * ❌ OFHTTPServer.m
  * ❌ OFHostAddressResolver.m
  * ❌ OFHuffmanTree.h
  * ❌ OFINICategory.m
  * ❌ OFINIFile.m
  * ❌ OFIPXSocket.m
  * ❌ OFInflateStream.m
  * ❌ OFKernelEventObserver.m
  * ❌ OFKqueueKernelEventObserver.m
  * ❌ OFLHAArchive.m
  * ❌ OFLHAArchiveEntry.m
  * ❌ OFLHADecompressingStream.m
  * ❌ OFList.m
  * ❌ OFLocale.m
  * ❌ OFMD5Hash.m
  * ❌ OFMapTable.m
  * ❌ OFMapTableDictionary.m
  * ❌ OFMapTableSet.m
  * ❌ OFMemoryStream.m
  * ❌ OFMessagePackExtension.m
  * ❌ OFMethodSignature.m
  * ❌ OFMutableAdjacentArray.m
  * ❌ OFMutableArray.m
  * ❌ OFMutableData.m
  * ❌ OFMutableMapTableDictionary.m
  * ❌ OFMutableString.m
  * ❌ OFMutableURL.m
  * ❌ OFMutableUTF8String.m
  * ❌ OFMutableZIPArchiveEntry.m
  * ❌ OFMutex.m
  * ❌ OFNonretainedObjectValue.m
  * ❌ OFNotificationCenter.m
  * ❌ OFNull.m
  * ❌ OFNumber.m
  * ❌ OFObject+KeyValueCoding.m
  * ❌ OFObject.m
  * ❌ OFOptionsParser.m
  * ❌ OFPBKDF2.m
  * ❌ OFPlugin.m
  * ❌ OFPointValue.m
  * ❌ OFPointerValue.m
  * ❌ OFPollKernelEventObserver.m
  * ❌ OFRIPEMD160Hash.m
  * ❌ OFRangeCharacterSet.m
  * ❌ OFRangeValue.m
  * ❌ OFRectValue.m
  * ❌ OFRecursiveMutex.m
  * ❌ OFSHA1Hash.m
  * ❌ OFSHA224Or256Hash.m
  * ❌ OFSHA384Or512Hash.m
  * ❌ OFSPXSocket.m
  * ❌ OFSPXStreamSocket.m
  * ❌ OFScrypt.m
  * ❌ OFSecureData.m
  * ❌ OFSelectKernelEventObserver.m
  * ❌ OFSequencedPacketSocket.m
  * ❌ OFSizeValue.m
  * ❌ OFSocket.m
  * ❌ OFStdIOStream.m
  * ❌ OFStream.m
  * ❌ OFStreamSocket.m
  * ❌ OFString+JSONParsing.m
  * ❌ OFString+PropertyListParsing.m
  * ❌ OFString+Serialization.m
  * ❌ OFString+URLEncoding.m
  * ❌ OFString+XMLUnescaping.m
  * ❌ OFString.m
  * ❌ OFSubarray.m
  * ❌ OFTCPSocket.m
  * ❌ OFTLSStream.m
  * ❌ OFTarArchive.m
  * ❌ OFTarArchiveEntry.m
  * ❌ OFThread.m
  * ❌ OFTimer.m
  * ❌ OFUDPSocket.m
  * ❌ OFUNIXDatagramSocket.m
  * ❌ OFUNIXStreamSocket.m
  * ❌ OFURL.m
  * ❌ OFURLHandler.m
  * ❌ OFUTF8String.m
  * ❌ OFUUID.m
  * ❌ OFWin32ConsoleStdIOStream.m
  * ❌ OFWindowsRegistryKey.m
  * ❌ OFXMLAttribute.m
  * ❌ OFXMLCDATA.m
  * ❌ OFXMLCharacters.m
  * ❌ OFXMLComment.m
  * ❌ OFXMLElement+Serialization.m
  * ❌ OFXMLElement.m
  * ❌ OFXMLElementBuilder.m
  * ❌ OFXMLParser.m
  * ❌ OFXMLProcessingInstruction.m
  * ❌ OFZIPArchive.m
  * ❌ OFZIPArchiveEntry.m
  * ❌ bridge/NSNumber+OFObject.m
  * ❌ bridge/NSOFArray.m
  * ❌ bridge/NSOFDictionary.m
  * ❌ bridge/NSOFSet.m
  * ❌ bridge/OFException+Swift.m
  * ❌ bridge/OFNSArray.m
  * ❌ bridge/OFNSDictionary.m
  * ❌ bridge/OFNSEnumerator.m
  * ❌ bridge/OFNSSet.m
  * ❌ bridge/OFNumber+NSObject.m
  * ❌ bridge/OFString+NSObject.m
  * ❌ exceptions/OFException.m
  * ❌ libbases.m
  * ❌ platform/POSIX/OFString+PathAdditions.m
  * ❌ platform/POSIX/OFSubprocess.m
  * ❌ platform/Windows/OFString+PathAdditions.m
  * ❌ platform/Windows/OFSubprocess.m
  * ❌ platform/libfat/OFString+PathAdditions.m
  * ❌ tls/OFGnuTLSTLSStream.m
  * ❌ tls/OFOpenSSLTLSStream.m
  * ❌ tls/OFSecureTransportTLSStream.m
Z da1d558458d1eb7d5829151dc3aa780e