てすと

たかろぐ

自分のログを刻みます。

Nimに浮気しました

こんばんは、昨日に引き続き、オセロアプリの開発に関する調査をしています。

Rustで生成した実行ファイルをiOSで読み込む

JavaScriptでいいじゃんという声もあるかもしれませんが、より高速で強いAIを実現するためには、 より効率的で速い実行環境を求めるべきですよね。

そういう意図があったので、実行速度の速いRustで作ったライブラリをiOSで実行できないかどうか調べていました。

すると、以下の記事が見つかりました。(僕が調べた所、日本語資料は見つかりませんでした。)

medium.com

まさしく、React Native + Rustの構成で、Rustの関数を使って"Hello World"の文字列を画面に表示してみようという内容です。

僕はまだHello Worldを出力しただけでキチンと理解している訳ではないので、詳細を知りたい方は参考サイトを見ていただきたいのですが、 僕の感じ取った事をざっくり述べると、以下のようになります。(iOSの場合のみ)

  • 手順
    1. iOSAndroidの物理アーキテクチャ(CPU、命令セットなど)を再現できるようにインストール
    2. Rustから実行ファイルを生成するためのMakefileを書き、makeコマンドで実行ファイルを生成
    3. Rustのビルドシステム兼パッケージマネージャーのCargoの設定ファイルを書く
    4. 参考サイトでは共通の型としてCのプリミティブ型を使うので、その変換ヘルパーを書く(多分)
    5. Xcodeを開いて、依存ライブラリにRust実行ファイルを指定して、静的ライブラリとして読み込ませる
    6. ネイティブモジュール用の「React NativeとRustライブラリの橋渡し」の役割を持つモジュールを定義(これよく分からない)
    7. React Nativeから、NativeModuleを介してRustライブラリにアクセス

ざっくり書いてみましたが、ちゃんと理解していません、難しいです。(分かる方いましたら、すごく教えて欲しいです...。)

これについては、ちゃんと理解したら記事とか書きたいですね。

Nim言語

iOS上でRustライブラリがちゃんと使えそうなことが分かったので、さて開発に取り掛かるかと思ったその時、次の記事を見つけてしまいました。

h-miyako.hatenablog.com

この記事は、各言語でフィボナッチ計算を行い、実行速度を比較した記事になります。 この記事の結果を載せておきます。

f:id:g-knk-9410:20180324214532p:plain

これを見ると分かると思いますが、最適化したNim言語が速過ぎます。 (実際には、C言語を-O3最適化した時よりほんの少し遅い程度らしいですが。)

これで興味を持って、公式サイトで少し調べました。 特徴としては、

公式ドキュメント見た感じ、結構良さそうだったです。 でも、すごくマイナー言語らしく、日本語の記事は少ないです。

前半のiOSに静的ライブラリを読み込ませる話は、Nimにも応用できるはずなので、今回はより実行速度が速く、 ファイルサイズも小さく、読みやすいNim言語を使って開発していこうかなと思いました。 正直、Rustの所有権周りが嫌いだったです。

最後に

今日、何年か振りに絵書きました。ポリゴンです!

f:id:g-knk-9410:20180324220037p:plain:w300

と、ミミッキュです!

f:id:g-knk-9410:20180324221240j:plain:w300

以上です。