the Rust tests. Objective-C Essentially two forms of method exist in Objective-C, the class ("static") method, and the instance method. A method declaration in Objective-C is of the following form: + (return-type) name0:parameter0 name1:parameter1 ... – (return-type) name0:parameter0 name1:parameter1 ... Class methods are signified by +, instance methods use -. A typical class method declaration may then look like: + (id) initWithX: (int) number andY: (int) number; + (id) new; With instance methods looking like this: - (id) value; - (id) setValue: (id) new_value; Each of these method declarations have a specific internal representation. When compiled, each method is named according to the following scheme for class methods: _c_Class_name0_name1_ ... and this for instance methods: _i_Class_name0_name1_ ... The colons in the Objective-C syntax are translated to underscores. So, the Objective-C class method , if belonging to the class would translate as , and the instance method (belonging to the same class) would translate to . Each of the methods of a class are labeled in this way. However, in order to look up a method that a class may respond to would be tedious if all methods are represented in this fashion. Each of the methods is assigned a unique symbol (such as an integer). Such a symbol is known as a selector. In Objective-C, one can manage selectors directly — they have a specific type in Objective-C — . During compilation, a table is built that maps the textual representation, such as , to selectors (which are given a type ). Managing selectors is more efficient than manipulating the textual representation of a method. Note that a selector only matches a method's name, not the class it belongs to — different classes can have different implementations of a method with the same name. Because of this, implementations of a method are given a specific identifier too, these are known as implementation pointers, and are also given a type, . Message sends are encoded by the compiler as calls to the function, or one of its cousins, where is the receiver of the message, and determines the method to call. Each class has its own table that maps selectors to their implementations — the implementation pointer specifies where in memory the actual implementation of the method resides. There are separate tables for class and instance methods. Apart from being stored in the to lookup tables, the functions are essentially anonymous.