BT

Anders Hejlsberg氏、現代のコンパイラ構築について語る

| 作者: Pierre-Luc Maheu フォローする 4 人のフォロワー , 翻訳者 笹井 崇司 フォローする 0 人のフォロワー 投稿日 2016年5月24日. 推定読書時間: 2 分 |

原文(投稿日:2016/05/18)へのリンク

コンパイラ作成の一番の参考書、ドラゴンブックとしても知られる『Compiler: Principles, Techniques, and Tools』(邦訳『コンパイラ―原理・技法・ツール』)が出版されたのは、1986年のことだ。Channel 9のインタビューで、Turbo Pascal、Delphi、C#、TypeScriptで有名なAnders Hejlsberg氏は、現在のコンパイラ作成が30年前のやり方とどう違うのか説明した。

古典的なコンパイラの大きな特徴は、入力をシーケンシャルに処理することだ。それは主要なコンポーネントのパイプラインのように見える。

Lexer -> Parser -> Type Checker -> Code Generator -> Emitter

この10年で、IDEとツールは、自動コンパイル、リファクタリング、コードナビゲーション、静的解析といった機能を提供することが期待されるようになった。Microsoftのユーザー調査によると、これらの機能は、入力に対して100ms以下の遅延で応答することが求められるという。さもないと、遅すぎると感じるようだ。これは、中規模サイズで1分以上かかることのあるプロジェクト全体のコンパイル時間とは大違いだ。

IDEの高速なフィードバックを実現するためには、コンパイラがリアルタイムで実行できるよう、処理をできるだけ限定する必要がある。したがって、キーを押すたびにプログラム全体をコンパイルする、というのは選択肢にならない。代わりに、コンパイラはユーザーに答えを提供するのに必要十分な情報を用意する。

高速な応答は、処理を限定するとともに、古いデータ構造をできるだけ再利用することで実現される。ユーザーが文字をタイプするたびに、メモリにあるデータ構造は消去されると考えるが、応答性を高めるために、変更されていないものを全て再利用するのだ。例えば、AST(Abstract syntax trees、抽象構文木)では、それが表現するソースファイルが変更されていなければ、再利用することができる。

データ構造が変更されても、再利用は可能だ。イミュータブルな永続的データ構造では、変更されていない部分を保持したまま、新しいインスタンスを生成して返すことにより、変更を取扱うことができる。ASTにとって、これは現在のノードとルートまでの上位ノードを変更することを意味する。残りの構文木は同じまま、新しいインスタンスの構築に再利用できる。

数年前より、IDEがリアルタイムに提供する機能のため、C#コンパイラとIDE機能実装との間でコードが重複するようになった。このことはRoslynを作った大きな理由のひとつだった。Roslynは最初から、コマンドラインだけでなくIDEからも使えるよう設計されている。

最後にAnders氏とSeth氏は、現代のコンパイラ作成について学ぶためのリソースについて話した。彼らは例としてRoslynTypeScriptプロジェクトを挙げた。どちらもオープンソースで、GitHubから入手できる。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT