BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Rust - Mozilla の開発したシステムプログラミング言語 - に関するインタビュー

Rust - Mozilla の開発したシステムプログラミング言語 - に関するインタビュー

原文(投稿日:2012/08/03)へのリンク

 

Rust はハイパフォーマンスアプリケーションを対象として Mozilla が開発したシステムプログラム言語である。今回の記事では,開発者である Graydon Hoare 氏とのインタビューを紹介する。

"本業は言語エンジニア" と自称する Graydon Hoare 氏が,Rust という新しいプログラム言語の開発を始めたのは 2006 年のことだ。この新たな言語に Mozila が関心を示し,開発継続のためにチームを編成するとともに,試験的プロジェクトである Servo Parallel Browser Project の開発言語に採用した。

Rust は,通常ならば C や C++ を使用するような,ハイパフォーマンスアプリケーションを記述するためのシステム言語だが,セグメンテーション違反を起こすような不正メモリアクセスに関する問題を,ある程度回避できるように設計されている。構文は C に非常によく似ているが,大きく違う部分もある。特に興味深い 機能 は次のものだ。

  • パターンマッチングと代数的データ型 (列挙型)
  • タスクを基本とする並行性。メモリを共有しない並列実行を実現するライトウェイト・タスク
  • 高階関数 (クロージャ)
  • Java 風のインターフェースと Haskell 風の型クラスを組み合わせたポリモーフィズム
  • ジェネリクス
  • バッファオーバーフローの抑止
  • イミュータブル (immutable) がデフォルト設定
  • 非ブロッキング・ガベージコレクタ

Mozilla は先頃,Rust の 新しいアルファバージョン を公開した。近々実装される予定の機能に関する ロードマップ もある。InfoQ では関係者から Rust について詳しく聞くために,Hoare 氏にインタビューした。

InfoQ: あなたが Rust の開発を始めたのは 2006 年のことですね。そのきっかけと,現在に至る道程について少し話を聞かせてください。

GH: 私の本業は言語エンジニアです。通常これは,自分が設計に関わっていない言語のコンパイラやツールの開発に従事している,という意味になります。そのような境遇では,自分自身の趣味的なプロジェクトを思い描くようになるのは,ごく当然のことです。私も長い間,そのような事を続けていました。そして最終的に,空き時間を使って開発を続けてきたプロトタイプのひとつを,当時のマネージャに見せてみようと思ったのです。Mozilla がそれに興味を示してくれて,ブラウザスタックをより安全で並行性の高いものに再構築する長期的プロジェクトのコンポーネントとして,C++ よりも使い易いテクノロジである Rust の開発チームを立ち上げることになったのです。ここで言う大規模プロジェクトとは "servo" と呼ばれているものです。Mozilla は servo のために Rust 開発に資金提供しているのです。

現在の状況としては,ブートストラップコンパイラをリリースしたのが 2010 年,それを脱してセルフホストコンパイラになったのが昨年。そして先頃,第2コンパイラの3番目の(0.3) アルファリリースを終えたところです。当面はアルファとベータリリースを継続します。その後で安定版をブランチオフしたら,できる限り長く,少なくとも私たちが開発に使用している間はサポートを続けたいと思っています。その一方では,私たちがコンパイラを開発するのと同じような方法で,servo プロジェクトでも私たちの成果を自己利用 (ドッグフィーディング) しています。

InfoQ: 新言語の開発に至った理由は何ですか。

GH: 認知度や利用度が高く,明らかによいと言えるアイデアは他の言語にもたくさんあります。しかしそれらの多くは,広く利用されているシステム言語ではサポートされていなかったり,あるいは非常に粗末な (安全性が低く,並行性の低い) メモリモデルの言語であったり,というのが現状です。70年代後半から80年代前半にかけては,この分野にも優れた競合相手が多数存在していました。私はこのようなアイデアをいくつか復活させて,当時とは違う状況下で新たなチャンスを与えたいと思ったのです。インターネットが高度な同時性と安全性を手に入れた今,C あるいは C++ (例えば) がいつでも妥当な選択肢であった設計上のトレードオフも,以前と同じではないはずです。

InfoQ: Java など他の言語ではなく,なぜ C を対象としたのでしょう。

GH: 考えてみてください,システムスタックのあるレイヤ以下のコードは,ほとんどが C あるいは C++ で記述されています。それをターゲットにしたのです。

InfoQ: どのような部分が C より優れているのでしょう。

GH: 第1には安全で,クラッシュの少ないことですね。メモリセーフでない処理をするコードにとって,これは本当に重要なことです。しかも完全なガベージコレクトシステムに比べれば,メモリの安全性のためのオーバーヘッドもそれほど大きくはありません。注目に値するメリットは他にもたくさんあります。メモリモデルが同時並行モデルに変換される点もそうですし,クロージャやトレイト,ネームスペース,デストラクタ,ユニコード,型推論,イミュータブルメモリ,非交和 (disjoint unions) など,最近の便利な機能のサポートも良好です。

InfoQ: Google Go と比較した場合はどうでしょう。

GH: Go はよい言語ですね。Rust ほど複雑ではない反面,野心的でもないのですが,選択肢としては悪くないでしょう。例えば Go のメモリモデルには,コルーチンやスレッド間の分離,あるいは可変性 (mutability) の管理といった概念がありません。すべてはひとつのグローバルな可変ヒープ上で,絶えず競い合うことになります。同じように Go には,ポインタも一種類しかありません。いつでも null を設定できますし,すべてのコルーチンのすべてのポインタが,単一でグローバルなガベージコレクタの対象になっているのです。Rust はこれらのケースを静的に区別していて,異なるタイプのメモリ領域とポインタを使い分けています。これによって,安全性とパフォーマンスをより詳細に管理できるのですが,一方でプログラマの考慮すべきことは多くなります。さらに Rust には,Go にはない "現代的な機能" がいくつかあります。ジェネリック型やデストラクタ,非交和といったものです。それでも Google の知名度も相まって,Go には機能以上の価値があります。Go が進化を続けているのは,私にとってうれしいことです。

InfoQ: Rust の主な機能を教えてください。

GH: 多くについては,すでに説明したとおりです。私は言語に "メイン" となる機能が必要だとは思っていません。親和性がよくて使い慣れた機を堅牢かつ広範に組み合わせることによって,安全で効率的な優れたコードを容易に記述,維持,デバッグできることこそ,本当に必要なことだと思うのです。それが私たちの目標です。この目標は非常に多元的なものです。言語がひとつの点だけで優れていても,それは失敗でしょう。

InfoQ: 開発者が Rust を選択する理由は何でしょう。

GH: 私たちがターゲットにしているのは,"欲求不満な C++ 開発者たち" です。要するに私たち自身なのです。私たちと同じような立場にあるのなら,システムレベルの作業に C++ を選択する必要があるのは,そのパフォーマンスと配布時の特性によるものだと,何度も実感しているはずです。それでも,もっと安全で苦労の少ないものがあればよいはずで,私たちはそれを提供できればと思っているのです。

InfoQ: 1.0 リリース予定はいつでしょう。

GH: wiki にロードマップを掲載しています。それが完了したら (新たな機能がそれほど多くはないという前提ですが),1.0 にしようと思っています。来年のどこかになるのではないかと思いますが,現在の私はチームの1メンバに過ぎませんし,それにソフトウェアのスケジュールを予測するのは,単純なことをやっている場合であっても非常に難しいことです。ましてこのプロジェクトは,まったく単純とは呼べないものなのです。

このプロジェクトが MIT ライセンスであることも特筆すべき点でしょう。誰でもフォーク,移植,修正,追加など,およそ何でも自由にできるのです。開発状況はすべて github やメーリングリスト,IRC サーバ,wiki やアーカイブなどで公開されていますから,リアルタイムで確認することも可能です。ていねいで建設的なものならば,開発に対するフィードバックも歓迎します。

 

この記事に星をつける

おすすめ度
スタイル

BT