iPhone で Ruby/RubyCocoa のやつにコメントいただいてたのでレスしてみる

iPhone で Ruby/RubyCocoa を動かしてみた - @takuma104 log

たくさんのブクマありがとうございます。いくつか気になるコメントというかつぶやきいただいてたので、勝手にレスしてみます。

b:id:from_kyushuさんより

今Cydiaにlibffiあるけど、動かないのかな。

http://b.hatena.ne.jp/from_kyushu/20090226#bookmark-12291979

OS1.0.xのころはいわゆるjailbreakをしたことがあったんですが、2.xになってからはやってないので、その辺疎いのですが、聞いた話によるとどうもそのようですね。あとPython用ObjC BridgeのPyObjC(これもおそらくlibffiを使ってるようです)はCydiaとかで配布されてて、PyObjCのアプリもあるとかないとか。

それから、どうもnu programming languageの人およびJSCocoaの中の人はiPhoneSDKでlibffiを動かそうとしているようです。ただ、libffiのclosureの実現に使っている部分で、mmapをPROT_EXEC指定している箇所があるのですが、これをJailbreakしてない実機でやると、うまく動かないのが一番のネックなようです。(逆に言うと、もしかするとこの辺の制約がJailbreakすると外れるのかもしれません)

以前、Google V8をiPhone SDKに移植してみようと試行錯誤していたのですが、これがあってたとえばJIT的な動的にARMの実行コードを生成するようなことが、そもそもできないようになっているようです。ちなみに、動的なコード生成は、iPhone SDKの規約というか事実上AppStoreへの審査を通すための規約で、明確に禁止されているようですので、動いたとしても審査は通らないかもしれません。

現状のRubyCocoa0.4.2をベースにしたversionでは、動的なARMコード生成はしてないので、その点はとりあえず問題ないかと。

b:id:y-kawazさんより

多分Appleの審査を通ることは無いと思う。Appleスクリプトエンジン、というかAppleのあずかり知らないユーザコードを実行できるようにすることを認めていないから。iPhoneFlashが無いのもそれが一番の理由だったと思う。

http://b.hatena.ne.jp/y-kawaz/20090227#bookmark-12291979

そう、僕も一番知りたいところなのですが、まだやってみてないのでなんとも言えません:(

というのは、規約の解釈がどうもよく分ってないのですが、よく読むと「(その場で)ダウンロードしたスクリプト」にはそこが適用されるけど、例えば「アプリに同梱してあるスクリプト」ならスクリプトエンジン内蔵でもOKとも読めると思います。

が、irbアプリ(自分でその場でRuby Scriptを書いて実行できる)を作って審査してもらってみたところ、却下。どうもそういう話でもなさそう??なのかよく分ってません。まだ同梱した形では提出してみてないので、この辺これからでしょうか。いずれにしろ、スクリプト大歓迎って感じではないのは確かそうですね。

ダメとなった場合でもC#の例のように、AppStoreに提出時は、RubyのコードをARMにAOTでコンパイルしてしまうという可能性もあると思っています(それはそれで道程が遠そうですが)。それから実は、提出用でない用途が、このiphone-rubycocoaプロジェクトの主目的の1つというか、僕がやりたかったことの1つだったりします。

紙面も尽きたので、それは次回書きます ;)