D 2021-04-07T20:53:20.346 L API\sReview\sfor\s1.0 N text/x-markdown P 034fcab6e5eeda162bd0f5d006d3a3e97d9f0918ffa946cde4a3b029ead189a6 U js W 9234 # API Review for 1.0 For the 1.0 release, all APIs should be reviewed, as starting 1.0, they are supposed to be stable. Right now, we have fhe following: ## Protocols * ❌ OFApplicationDelegate * ✅ OFCollection * ✅ OFComparing * ✅ OFCopying * ❌ OFCryptoHash * Should be renamed to OFCryptographicHash * ❌ OFDatagramSocketDelegate * ❌ OFDNSResolverHostDelegate * ❌ OFDNSResolverQueryDelegate * ✅ OFEnumeration * ✅ OFFastEnumeration * API given by the compiler * ❌ OFHTTPClientDelegate * ❌ OFHTTPServerDelegate * ✅ OFIPSocketAsyncConnecting * Private * ❌ OFIPXSocketDelegate * ❌ OFJSONRepresentation * ❌ OFKernelEventObserverDelegate * ❌ OFKeyValueCoding * ✅ OFLocking * ❌ OFMessagePackRepresentation * ✅ OFMutableCopying * ❌ OFObject * ❌ OFReadyForReadingObserving * ❌ OFReadyForWritingObserving * ❌ OFSequencedPacketSocketDelegate * ❌ OFSerialization * ❌ OFSPXSocketDelegate * ❌ OFSPXStreamSocketDelegate * ❌ OFStreamDelegate * ❌ OFStreamSocketDelegate * ❌ OFStringXMLUnescapingDelegate * ❌ OFTCPSocketDelegate * ❌ OFTLSSocket * ❌ OFTLSSocketDelegate * ❌ OFUDPSocketDelegate * ❌ OFUNIXDatagramSocketDelegate * ❌ OFXMLElementBuilderDelegate * ❌ OFXMLParserDelegate ## Classes * ✅ NSString * Fake class has no API and is only used to make string boxing via `@(cString)` work. * ❌ OFAAAADNSResourceRecord * ❌ OFAcceptFailedException * ✅ OFAdjacentArray * Private * ✅ OFAdjacentSubarray * Private * ❌ OFADNSResourceRecord * ❌ OFAllocFailedException * ❌ OFAlreadyConnectedException * ❌ OFApplication * ❌ OFArray * ❌ OFBindFailedException * ✅ OFBitSetCharacterSet * Private * ✅ OFBlock * Has no API * ✅ OFBytesValue * Private * ❌ OFChangeCurrentDirectoryPathFailedException * ❌ OFCharacterSet * ❌ OFCharacterSet (URLCharacterSets) * ❌ OFChecksumMismatchException * ❌ OFCNAMEDNSResourceRecord * ❌ OFColor * ❌ OFCondition * ❌ OFConditionBroadcastFailedException * ❌ OFConditionSignalFailedException * ❌ OFConditionStillWaitingException * ❌ OFConditionWaitFailedException * ❌ OFConnectionFailedException * ❌ OFConstantString * ❌ OFCopyItemFailedException * ✅ OFCountedMapTableSet * Private * ❌ OFCountedSet * ❌ OFCreateDirectoryFailedException * ❌ OFCreateSymbolicLinkFailedException * ❌ OFCreateWindowsRegistryKeyFailedException * ❌ OFData * ✅ OFData (CryptoHashing) * ❌ OFDatagramSocket * ❌ OFData (MessagePackParsing) * ❌ OFDate * ❌ OFDeleteWindowsRegistryKeyFailedException * ❌ OFDeleteWindowsRegistryValueFailedException * ❌ OFDictionary * ❌ OFDictionary (FileAttributes) * ✅ OFDimensionValue * Private * ❌ OFDNSQuery * ❌ OFDNSQueryFailedException * ❌ OFDNSResolver * ✅ OFDNSResolverSettings * Private * ❌ OFDNSResourceRecord * ❌ OFDNSResponse * ❌ OFEnumerationMutationException * ❌ OFEnumerator * ✅ OFEpollKernelEventObserver * Private * ❌ OFException * ❌ OFFile * ❌ OFFileManager * ✅ OFFileURLHandler * Private * ❌ OFGetCurrentDirectoryPathFailedException * ❌ OFGetOptionFailedException * ❌ OFGetWindowsRegistryValueFailedException * ✅ OFGlobalBlock * Doesn't have an API * ❌ OFGZIPStream * ❌ OFHashAlreadyCalculatedException * ❌ OFHINFODNSResourceRecord * ❌ OFHMAC * ✅ OFHostAddressResolver * Private * ❌ OFHTTPClient * ❌ OFHTTPCookie * ❌ OFHTTPCookieManager * ❌ OFHTTPRequest * ❌ OFHTTPRequestFailedException * ❌ OFHTTPResponse * ❌ OFHTTPServer * ✅ OFHTTPURLHandler * Private * ❌ OFInflate64Stream * ❌ OFInflateStream * ❌ OFINICategory * ❌ OFINIFile * ✅ OFINIFileSettings * Private * ❌ OFInitializationFailedException * ❌ OFInvalidArgumentException * ❌ OFInvalidEncodingException * ❌ OFInvalidFormatException * ❌ OFInvalidJSONException * ❌ OFInvalidServerReplyException * ✅ OFInvertedCharacterSet * Private * ❌ OFInvocation * ✅ OFIPSocketAsyncConnector * Private * ❌ OFIPXSocket * ❌ OFKernelEventObserver * ✅ OFKqueueKernelEventObserver * Private * ❌ OFLHAArchive * ❌ OFLHAArchiveEntry * ✅ OFLHADecompressingStream * Private * ❌ OFLinkFailedException * ❌ OFList * ❌ OFListenFailedException * ❌ OFLoadPluginFailedException * ❌ OFLocale * ❌ OFLockFailedException * ❌ OFMalformedXMLException * ✅ OFMallocBlock * Doesn't have an API * ❌ OFMapTable * ✅ OFMapTableDictionary * Private * ❌ OFMapTableEnumerator * ✅ OFMapTableSet * Private * ❌ OFMD5Hash * ❌ OFMemoryNotPartOfObjectException * ❌ OFMessagePackExtension * ❌ OFMethodSignature * ❌ OFMoveItemFailedException * ✅ OFMutableAdjacentArray * Private * ❌ OFMutableArray * ❌ OFMutableData * ❌ OFMutableDictionary * ❌ OFMutableLHAArchiveEntry * ✅ OFMutableMapTableDictionary * Private * ✅ OFMutableMapTableSet * Private * ❌ OFMutablePair * ❌ OFMutableSet * ❌ OFMutableString * ❌ OFMutableTarArchiveEntry * ❌ OFMutableTriple * ❌ OFMutableURL * ✅ OFMutableUTF8String * Private * ❌ OFMutableZIPArchiveEntry * ❌ OFMutex * ❌ OFMXDNSResourceRecord * ✅ OFNonretainedObjectValue * Private * ❌ OFNotImplementedException * ❌ OFNotOpenException * ❌ OFNSDNSResourceRecord * ❌ OFNull * ❌ OFNumber * ❌ OFObject (KeyValueCoding) <OFKeyValueCoding> * ❌ OFObject <OFObject> * ❌ OFObject (OFSerialization) * ❌ OFObserveFailedException * ❌ OFOpenItemFailedException * ❌ OFOpenWindowsRegistryKeyFailedException * ❌ OFOptionsParser * ❌ OFOutOfMemoryException * ❌ OFOutOfRangeException * ❌ OFPair * ❌ OFPlugin * ✅ OFPointerValue * Private * ✅ OFPointValue * Private * ✅ OFPollKernelEventObserver * Private * ❌ OFPTRDNSResourceRecord * ✅ OFRangeCharacterSet * Private * ✅ OFRangeValue * Private * ❌ OFReadFailedException * ❌ OFReadOrWriteFailedException * ✅ OFRectangleValue * Private * ❌ OFRecursiveMutex * ❌ OFRemoveItemFailedException * ❌ OFResolveHostFailedException * ❌ OFRetrieveItemAttributesFailedException * ❌ OFRIPEMD160Hash * ❌ OFRPDNSResourceRecord * ❌ OFRunLoop * ✅ OFSandbox * Private in 1.0 (but public in trunk) * ✅ OFSandboxActivationFailedException * Private in 1.0 (but public in trunk) * ❌ OFSecureData * ❌ OFSeekableStream * ❌ OFSeekFailedException * ✅ OFSelectKernelEventObserver * Private * ❌ OFSequencedPacketSocket * ❌ OFSet * ❌ OFSetItemAttributesFailedException * ❌ OFSetOptionFailedException * ❌ OFSettings * ❌ OFSetWindowsRegistryValueFailedException * ❌ OFSHA1Hash * ❌ OFSHA224Hash * ❌ OFSHA224Or256Hash * ❌ OFSHA256Hash * ❌ OFSHA384Hash * ❌ OFSHA384Or512Hash * ❌ OFSHA512Hash * ❌ OFSOADNSResourceRecord * ❌ OFSortedList * ❌ OFSPXSocket * ❌ OFSPXStreamSocket * ❌ OFSRVDNSResourceRecord * ✅ OFStackBlock * Doesn't have an API * ❌ OFStdIOStream * ❌ OFStillLockedException * ❌ OFStream * ❌ OFStreamSocket * ❌ OFString * ✅ OFString (CryptoHashing) * ❌ OFString (JSONParsing) * ❌ OFString (PathAdditions) * ❌ OFString (PropertyListParsing) * ❌ OFString (Serialization) * ❌ OFString (URLEncoding) * ❌ OFString (XMLEscaping) * ❌ OFString (XMLUnescaping) * ✅ OFSubarray * Private * ❌ OFSubprocess * ❌ OFSystemInfo * ❌ OFTarArchive * ❌ OFTarArchiveEntry * ❌ OFTCPSocket * ✅ OFTCPSocketSOCKS5Connector * Private * ❌ OFThread * ❌ OFThreadJoinFailedException * ❌ OFThreadStartFailedException * ❌ OFThreadStillRunningException * ❌ OFTimer * ❌ OFTriple * ❌ OFTruncatedDataException * ❌ OFTXTDNSResourceRecord * ❌ OFUDPSocket * ❌ OFUnboundNamespaceException * ❌ OFUnboundPrefixException * ❌ OFUndefinedKeyException * ❌ OFUnknownXMLEntityException * ❌ OFUnlockFailedException * ❌ OFUnsupportedProtocolException * ❌ OFUnsupportedVersionException * ❌ OFURL * ❌ OFURLHandler * ✅ OFUTF8String * Private * ❌ OFValue * ✅ OFWin32ConsoleStdIOStream * Private * ❌ OFWindowsRegistryKey * ❌ OFWriteFailedException * ❌ OFXMLAttribute * ❌ OFXMLCDATA * ❌ OFXMLCharacters * ❌ OFXMLComment * ❌ OFXMLElement * ❌ OFXMLElementBuilder * ❌ OFXMLElement (OFSerialization) * ❌ OFXMLNode * ❌ OFXMLParser * ❌ OFXMLProcessingInstructions * ❌ OFZIPArchive * ❌ OFZIPArchiveEntry ## Commands **Get all protocols** ```sh find src -name '*.h' -and -not -name '*+Private.h' -and -not -wholename 'src/bridge/*' -and -not -wholename 'src/runtime/*' -exec grep '^@protocol ' {} \; | grep -v '^@protocol.*;' | sed 's/^@protocol /* ❌ /' | sed 's/:.*//' | sed 's/<.*>//' | sort ``` **Get all classes** ```sh find src -name '*.h' -and -not -name '*+Private.h' -and -not -wholename 'src/bridge/*' -and -not -wholename 'src/runtime/*' -exec grep '^@interface ' {} \; | sed 's/^@interface /* ❌ /' | sed 's/:.*//' | sed 's/OF_GENERIC(.*)//' | sed 's//\>/' | sort ``` Z 88c082b5ab34a5e7e010186979005fa7