Nimに浮気しました
こんばんは、昨日に引き続き、オセロアプリの開発に関する調査をしています。
Rustで生成した実行ファイルをiOSで読み込む
JavaScriptでいいじゃんという声もあるかもしれませんが、より高速で強いAIを実現するためには、 より効率的で速い実行環境を求めるべきですよね。
そういう意図があったので、実行速度の速いRustで作ったライブラリをiOSで実行できないかどうか調べていました。
すると、以下の記事が見つかりました。(僕が調べた所、日本語資料は見つかりませんでした。)
まさしく、React Native + Rustの構成で、Rustの関数を使って"Hello World"の文字列を画面に表示してみようという内容です。
僕はまだHello Worldを出力しただけでキチンと理解している訳ではないので、詳細を知りたい方は参考サイトを見ていただきたいのですが、 僕の感じ取った事をざっくり述べると、以下のようになります。(iOSの場合のみ)
- 手順
- iOS、Androidの物理アーキテクチャ(CPU、命令セットなど)を再現できるようにインストール
- Rustから実行ファイルを生成するためのMakefileを書き、makeコマンドで実行ファイルを生成
- Rustのビルドシステム兼パッケージマネージャーのCargoの設定ファイルを書く
- 参考サイトでは共通の型としてCのプリミティブ型を使うので、その変換ヘルパーを書く(多分)
- Xcodeを開いて、依存ライブラリにRust実行ファイルを指定して、静的ライブラリとして読み込ませる
- ネイティブモジュール用の「React NativeとRustライブラリの橋渡し」の役割を持つモジュールを定義(これよく分からない)
- React Nativeから、NativeModuleを介してRustライブラリにアクセス
ざっくり書いてみましたが、ちゃんと理解していません、難しいです。(分かる方いましたら、すごく教えて欲しいです...。)
これについては、ちゃんと理解したら記事とか書きたいですね。
Nim言語
iOS上でRustライブラリがちゃんと使えそうなことが分かったので、さて開発に取り掛かるかと思ったその時、次の記事を見つけてしまいました。
この記事は、各言語でフィボナッチ計算を行い、実行速度を比較した記事になります。 この記事の結果を載せておきます。
これを見ると分かると思いますが、最適化したNim言語が速過ぎます。 (実際には、C言語を-O3最適化した時よりほんの少し遅い程度らしいですが。)
これで興味を持って、公式サイトで少し調べました。 特徴としては、
- ガーベジコレクションが高速
- 実行バイナリサイズが小さい(state-of-the-art)
- 読みやすい
- NimからC/JavaScriptにも変換できる
公式ドキュメント見た感じ、結構良さそうだったです。 でも、すごくマイナー言語らしく、日本語の記事は少ないです。
前半のiOSに静的ライブラリを読み込ませる話は、Nimにも応用できるはずなので、今回はより実行速度が速く、
ファイルサイズも小さく、読みやすいNim言語を使って開発していこうかなと思いました。
正直、Rustの所有権周りが嫌いだったです。
最後に
今日、何年か振りに絵書きました。ポリゴンです!
と、ミミッキュです!
以上です。