2009年11月19日
DWARF 3 の対応言語
まつもとゆきひろさんによって開発が開始されたオブジェクト指向スクリプト言語Rubyを初めとして、趣味/仕事を問わず、新しいプログラミング言語を設計/開発したいという需要は昔から一定数存在するようです。
言語処理系に関する本は昔から多数出版されてきていて、去年と今年、日本語の本だけでも10冊以上は出ているのではないかと思います。今年出版された日本語のものだけでも、5冊以上あります。
コンパイラ - 原理・技法・ツール (第二版)
プログラミング言語を作る
ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み
※ 以下の3冊は、私は未読です。amazonの検索でヒットしたもの。
MLによる最新コンパイラ構成技法
やさしいインタープリタの作り方入門―オリジナルなインタープリタを作成する
やさしいコンパイラの作り方入門―オリジナルなコンパイラを作成する
さらに、11/20 に、コンパイラの構成と最適化の第二版も出ます。
インタプリタやほとんど最適化しないレベルの言語処理系ならば問題にはならないのかもしれませんが、プログラムを高速に実行しようと思うと、途中に変換や最適化が必ず入ってくるので、元のソースコードと生成物の乖離が進みます。効率的に最適化されたプログラムをデバッグするためには、デバッグ情報が不可欠です。
しかし、ソースコードの解釈方法や、機械語の生成方法については多数の文献が存在するわりには、デバッグ情報の生成について触れている本はあまり (私が知る限り、一冊も) 聞きません。デバッガベンダーとしては少し悲しいところです。
翻ってデバッグ情報 (DWARF3) の仕様を見てみると、以下のような言語への対応が仕様に入っているようです。ほとんどが伝統的な言語とその後継ですが、D 言語が入っているというのが個人的には意外でした。(D は 2007 年にDigital Mars 社からバージョン 1.0 のコンパイラが出たばかりの、かなり若い言語です。あと Unified Parallel C という言語は初耳です。)
言語処理系に関する本は昔から多数出版されてきていて、去年と今年、日本語の本だけでも10冊以上は出ているのではないかと思います。今年出版された日本語のものだけでも、5冊以上あります。
コンパイラ - 原理・技法・ツール (第二版)
プログラミング言語を作る
ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み
※ 以下の3冊は、私は未読です。amazonの検索でヒットしたもの。
MLによる最新コンパイラ構成技法
やさしいインタープリタの作り方入門―オリジナルなインタープリタを作成する
やさしいコンパイラの作り方入門―オリジナルなコンパイラを作成する
さらに、11/20 に、コンパイラの構成と最適化の第二版も出ます。
インタプリタやほとんど最適化しないレベルの言語処理系ならば問題にはならないのかもしれませんが、プログラムを高速に実行しようと思うと、途中に変換や最適化が必ず入ってくるので、元のソースコードと生成物の乖離が進みます。効率的に最適化されたプログラムをデバッグするためには、デバッグ情報が不可欠です。
しかし、ソースコードの解釈方法や、機械語の生成方法については多数の文献が存在するわりには、デバッグ情報の生成について触れている本はあまり (私が知る限り、一冊も) 聞きません。デバッガベンダーとしては少し悲しいところです。
翻ってデバッグ情報 (DWARF3) の仕様を見てみると、以下のような言語への対応が仕様に入っているようです。ほとんどが伝統的な言語とその後継ですが、D 言語が入っているというのが個人的には意外でした。(D は 2007 年にDigital Mars 社からバージョン 1.0 のコンパイラが出たばかりの、かなり若い言語です。あと Unified Parallel C という言語は初耳です。)
以下のタグは、コンパイル単位エントリの一項目に使用されます。
- DW_LANG_C89 (ISO C:1989)
- 0x0001
- DW_LANG_C (Non-standardized C, such as K&R)
- 0x0002
- DW_LANG_Ada83 (ISO Ada:1983) ※ 限定的サポート
- 0x0003
- DW_LANG_C_plus_plus (ISO C++:1998)
- 0x0004
- DW_LANG_Cobol74 (ISO Cobol:1974) ※ 限定的サポート
- 0x0005
- DW_LANG_Cobol85 (ISO Cobol:1985) ※ 限定的サポート
- 0x0006
- DW_LANG_Fortran77 (ISO FORTRAN 77)
- 0x0007
- DW_LANG_Fortran90 (ISO Fortran 90)
- 0x0008
- DW_LANG_Pascal83 (ISO Pascal:1983)
- 0x0009
- DW_LANG_Modula2 (ISO Modula-2:1996)
- 0x000a
- DW_LANG_Java (Java)
- 0x000b
- DW_LANG_C99 (ISO C:1999)
- 0x000c
- DW_LANG_Ada95 (ISO Ada:1995) ※ 限定的サポート
- 0x000d
- DW_LANG_Fortran95 (ISO Fortran 95)
- 0x000e
- DW_LANG_PLI (ANSI PL/I:1976) ※限定的サポート
- 0x000f
- DW_LANG_ObjC (Objective-C)
- 0x0010
- DW_LANG_ObjC_plus_plus (Objective-C++)
- 0x0011
- DW_LANG_UPC (Unified Parallel C)
- 0x0012
- DW_LANG_D (D) ※ 限定的サポート
- 0x0013
- DW_LANG_lo_user
- 0x8000
- DW_LANG_hi_user
- 0xffff