LLVMベース、Snow LeopardのGCDサポート
Rubyのコンパイルや並列処理対応、MacRuby最新ベータ登場
2009/10/08
アップルでMacRubyを開発するLaurent Sansonetti氏は同プロジェクトのブログ上で、「MacRuby 0.5 beta 1」をリリースしたと発表した。インテルアーキテクチャで稼働するMac OS X v10.6以上で利用できる。現在はまだテスト用で今後数度の細かなリリースを経て最終版のバージョン0.5をリリースするという。
MacRubyの開発は2007年末にスタートし、これまで何度かバージョンアップを重ねてきた。今回バージョン0.4から0.5となるに当たってグラウンドデザインレベルで大きな変更が加えられている。最大の変更はVMとして本家Ruby 1.9系が採用するYARVを、LLVM(Low Level Virtual Machine)に変更したこと。LLVMはJavaVMのように特定の言語に依存しない独自の命令セットを持つVMで、実行時の最適化も可能なコンパイラ向けインフラ。C/C++、Objective-C、Fortranなどのフロントエンドコンパイラを使ってLLVM上で実行可能なコードを生成できる。
MacRubyがYARVに代えてLLVMに移行した理由として、Sansonetti氏は、ネイティブコードへのコンパイル機能がないことと、GIL(Global Interpreter Lock)の存在によって、マルチコアを生かすような真の並列処理が難しいことを挙げている。MRIとも略される本家のRubyでは処理系内部でネイティブスレッドを利用しているものの、ユーザーが生成できるスレッドでは処理系全体のロックに使われるGILの存在のために並列実行はサポートされていない。これはPythonでも同様だ。JRubyやIronRubyにはGILは存在しない。
Snow LeopardのGCDで並列処理
MacRuby 0.5以降では、ThreadクラスはネイティブのPOSIXスレッドに対応し、各スレッドは個別のVMインスタンスを持つという。また、MacRubyはSnow LeopardからMac OS Xに導入された並列処理API「Grand Central Dispatch」(GCD)にも対応する(参考記事)。GCDは多量のタスクをキューに入れ、それを1つずつ取り出してスレッドプールで処理するという処理モデルを抽象化したAPIを提供する。C/C++/Objective-C向けには、ブロックと呼ぶクロージャ風の独自文法を導入してタスクのキューイングを行う形だったが、MacRubyではRubyのブロックが使える。つまり、低レベルのスレッド処理のことを意識せず、ブロックを書くだけで並列プログラミングによるマルチコアの恩恵を受けやすいというわけだ。
パフォーマンス重視で開発を進めているMacRubyでは、並列処理だけでなく、ネイティブコードへのコンパイルも可能としたという。実行時最適化のJIT(Just-in-Time)と、事前コンパイルのAOT(Ahead-of-Time)の双方をサポートする。
macrubycコマンドでRubyのソースコードをMac OS X向けのオブジェクトファイルにコンパイルできるという。複数のオブジェクトファイルをアセンブルすることで、MacRubyを用いてCocoaアプリケーションも書ける。コンパイル済みのMacRubyアプリケーションは、起動が大幅に高速化する。また、ソースコードを開示せずに利用者にアプリケーションを提供できるようになる。
このほかMacRubyでは、大規模なMacRubyアプリケーションをプロファイリングした結果に基づいて、多くの細かな最適化も行っているという。高速なメソッドディスパッチャ、低コストなローカル変数や高速なインスタンス変数アクセス、浮動小数点の即値などを導入しているという。またコアクラスでは、生データを正しく扱うためにByteStringクラスを導入したほか、Rubyの即値を扱うのに最適化したArray実装も行っているという。
気になるのは互換性だが、Ruby処理系の互換性確保のために使われる“実行可能な仕様書”ともいうべきRubySpecを使ったテストでは、現在、MacRubyはRubyの言語仕様で91%、コア仕様で80%、ライブラリ仕様で72%のテストにパスする状態という。すでにirb、rake、rubygemなどのRubyプログラムは動作していて、今後もできる限り互換性を上げていく方針という。
関連リンク
関連記事
情報をお寄せください:
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|
キャリアアップ
- - PR -
転職/派遣情報を探す
「ITmedia マーケティング」新着記事
トランプ氏勝利で追い風 ところでTwitter買収時のマスク氏の計画はどこへ?――2025年のSNS大予測(X編)
2024年の米大統領選挙は共和党のドナルド・トランプ氏の勝利に終わった。トランプ氏を支...
AI導入の効果は効率化だけじゃない もう一つの大事な視点とは?
生成AIの導入で期待できる効果は効率化だけではありません。マーケティング革新を実現す...
ハロウィーンの口コミ数はエイプリルフールやバレンタインを超える マーケ視点で押さえておくべきことは?
ホットリンクは、SNSの投稿データから、ハロウィーンに関する口コミを調査した。