... | @@ -3,24 +3,23 @@ |
... | @@ -3,24 +3,23 @@ |
|
## Goals
|
|
## Goals
|
|
|
|
|
|
|
|
|
|
We aim for an extensions of the Standard Haskell Foreign Function Interface to include bindings to Objective-C. We like to make it easy to embed Haskell code in Objective-C programs as well as the other way around. Moreover, we like to be able to use object hierarchies stored in NIB files directly in Haskell code.
|
|
We aim for an extension of the Standard Haskell Foreign Function Interface to include bindings to Objective-C. We like to make it easy to embed Haskell code in Objective-C programs as well as the other way around. Moreover, we like to be able to use object hierarchies stored in NIB files directly in Haskell code.
|
|
|
|
|
|
### Consequences of the goals
|
|
### Consequences of the goals
|
|
|
|
|
|
|
|
|
|
We need to be able to subclass Objective-C classes (and in that process overwrite methods, add new class and instance methods, and add properties). We
|
|
We need to be able to subclass Objective-C classes (and in that process overwrite methods, add new class and instance methods, and add properties). We only directly support properties with setter and getter methods and not direct access to ivars; although, the latter can be gained by using the standard C FFI.
|
|
might be able to get away with only supporting properties (and not ivars that are directly read and written).
|
|
|
|
|
|
|
|
### Pragmatics
|
|
### Pragmatics
|
|
|
|
|
|
|
|
|
|
As far as the use of Haskell code from Objective-C goes, we can imagine two kinds of implementations: (1) We can make everything fully dynamic through the ObjC runtime at app runtime or (2) we can generate `.h` files and .m stubs statically during app compile time (from within GHC).
|
|
As far as the use of Haskell code from Objective-C goes, we can imagine three kinds of implementations: (1) We can make everything fully dynamic through the ObjC runtime at application runtime or (2) we can generate `.m` stubs statically during application compile time (from within GHC), and (3) we can directly generate object files that adhere to the conventions for ObjC object files.
|
|
|
|
|
|
|
|
|
|
I am guessing that (1) is easier to implement and (2) more efficient. We should try to develop a spec that allows both implementations (in that both types of implementations can be fully compliant). Then, we can start with (1) and later move to (2) if we feel it is worthwhile – get's us a running system more quickly.
|
|
Option (1) has the disadvantage that all class initialisation code needs to be executed after the program has loaded and before any other code runs. We need to arrange that for dynamically loaded objects, too. Option (2) and (3) lead to a similar outcomes (in terms of object files), but Option (2) seems easier to implement and has some precedent in the C stubs generated for Haskell functions dynamically exported to C.
|
|
|
|
|
|
|
|
|
|
Even with Option (1), where the actual class definition is dynamic, we can still provide (manually written) Objective-C header files that give class interfaces. This enables the Objective-C compiler to do type checking and should enable the use of classes implemented in Haskell in Interface Builder. (With Option (2), these header files should be generated by GHC.)
|
|
We require the programmer to supply headers for all Objective-C classes implemented in Haskell. This enables the Objective-C compiler to do type checking and enables Interface Builder to recognises properties used as outlets.
|
|
|
|
|
|
## Subtopics
|
|
## Subtopics
|
|
|
|
|
... | @@ -37,3 +36,8 @@ We discuss the following subtopics on separate pages: |
... | @@ -37,3 +36,8 @@ We discuss the following subtopics on separate pages: |
|
|
|
|
|
|
|
|
|
Chicken scheme objc egg: [ http://chicken.wiki.br/objc](http://chicken.wiki.br/objc)
|
|
Chicken scheme objc egg: [ http://chicken.wiki.br/objc](http://chicken.wiki.br/objc)
|
|
|
|
|
|
|
|
## Development team
|
|
|
|
|
|
|
|
- [ Manuel M. T. Chakravarty](http://www.cse.unsw.edu.au/~chak/)
|
|
|
|
- [ André Pang](http://algorithm.com.au/) |
|
|
|
\ No newline at end of file |