ということで、
Objective-C + (Nim+Spry)
という組み合わせで、
クロスプラットフォーム開発やIoT開発にチャレンジしたいと思っている。
iOS開発を仕事で行っているわけではないため、
ゆっくりなメモとはなってしまうが、Cで実装されているCoreFoundationを意識すべきとの方向性は定まったため随時追記のメモ書きをさらしはじめる。
#CとObjective-cの関係
Objective-cの入門書を読むと、
C++と違って、Objective-cはC言語そのものだよ、
と書いてある。
それ自体は間違っていないのだが、OSを書いているだけあって、
Objective-C クラスの依存関係はかなり複雑。
出典 http://d.hatena.ne.jp/shu223/20140309/1394388414
Nimは、Objective-cにコンパイル可能だが、この世界に直接入り込むのは手間が大きくメリットが感じられなかった。ということで、NimをC言語にコンパイルし、
Objective-cと相互インターフェースすることとしたい。
ちょうど、
https://teratail.com/questions/14278
のQAで良い図式を書いてくださっていたので引用しておく。
C言語とObjective-Cとの呼び出し関係
C言語 | Objective-C
関数<--+ー--メンバ関数 ○
関数ーーー+ーー>メンバ関数 ×
関数ーーー+ーー>関数 ○
|
C言語とObjective-Cとの組み合わせ方
C言語 | Objective-C
関数<--+--メンバ関数
| | ↑
+ーーー+ー> 関数
すなわち、相互呼び出しは、
Objective-Cのコード内にC言語のラッパーを用意すれば良い。
#CoreFoundationをお手本に
Mac OS もiOSも低レベルのところはC言語で実装されている。
その中でも中心的なライブラリのひとつが、CoreFoundation。
実用ライブラリであるCoreFoundationの使われ方を学べば、
CにコンパイルされたNim/SpryとObjective-Cとの実用的な組み合わせ方が見えてくるものと考える。
---------(ここまで2016.12.23)-------------