この記事は iOS Jailbreaking Advent Calendar 2015 の8日目の記事です。
Objective-CSとは
@e_swickさんが作成しているObjective-C++のスーパーセット言語です。
LogosはperlによるpreprocessによりObjC, ObjC++のコードを生成する手法をとっています。
翻ってObjective-CSはClangに手を入れた(Objective-CS言語としてObjective-Cの特定の記述に対するパーサーの追加とLLVM IR(AST)の生成)clang-objcsがその実体です。
手を加えた部分以外はClangのAST生成をそのまま使用する事でObjective-C, Objective-C++をそのまま利用出来、バックエンドはそのままLLVMを利用する形です。
Specの中ではAdding Properties at RuntimeとDirect Instance Variable AccessについてLogosにない機能であると便利なこと間違いないです。
が、まだclang-objcsの実装はまだそこまで進んでいません。
で、どうなの
コンパイラフロントエンドなのでLogos(perl)とくらべると敷居が高いのは間違いないでしょう。コントリビュートは受けにくいと思います。
Clangをforkしている以上ClangはLLVMの(大きな)サブプロジェクトなのでこれからも進化しXcodeと共に配布されていく時に、その進化についていけるのかが問題になってきます。基本はrebaseしていくだけだとは思いますが。
メンテナンスが滞った場合Clangの進化を享受出来なくなっていくリスクと天秤にかけると大分Logosに傾くかと思ってます。
普及させるにはclangのバイナリ配布も必要になると思いますがいまのところない(完成してないからだとは思います)点も現時点では不確定要素です。流石にclangのビルドはめんどそう。
とはいえ、面白い試みではあるので果たして自身に課したSpecを実装しきれるのか、バイナリ配布はあるのかのあたりを見守りたいですね!
明日からはwa_kinchanですね!楽しみです!