MS、「Common Compiler Infrastructure」をオープンソースで公開 28
ストーリー by hylom
開発ツール開発ツール 部門より
開発ツール開発ツール 部門より
あるAnonymous Coward 曰く、
Microsoftが4月17日、コンパイラおよび関連するプログラミングツールに共通する機能を提供するコンポーネントライブラリ「Common Compiler Infrastructure(CCI)」をMicrosoft Public License(Ms-PL)で公開した(SourceForge.JP Magazineの記事)。
CCIは.NET Frameworkの実行エンジン(仮想マシン)であるCommon Language Runtime(CLR)で動作するコードやデバッグファイルの読み込みや作成、操作を行うコンポーネントで、これを利用することで.NETアプリケーションを作成するコンパイラなどを作成しやすくなるようだ。Microsoftも、このコンポーネントを利用して開発ツールを作成しているという。
タレコミ子としては利用するケースがあまり思いつかないのですが、コンパイラを作ろう、という人は触ってみると面白いかもしれません。
コンパイラ・インフラストラクチャときいて (スコア:2, 興味深い)
SUIF(http://suif.stanford.edu/ [stanford.edu])やTrimalan(http://www.trimaran.org/ [trimaran.org]…なぜか繋がらない)やCOINS(http://coins-project.is.titech.ac.jp/ [titech.ac.jp])みたいなのを想像したがかなり違うのね。
元ソースじゃなくて紹介記事読んだだけの印象だと
普通のプログラミングにおけるアセンブラの出力部分やリンカの仕事に当たる部分を作る際のCLR向け共通インターフェースに近いのかな?CodeDOMとの関係はない?のかな?
Re:コンパイラ・インフラストラクチャときいて (スコア:3, 参考になる)
その後、一応、リンク先http://ccimetadata.codeplex.com/ [codeplex.com]も覗いてきた感想:
PEファイル(ポータブル実行可能ファイル)の読み書き
PDBファイル(プログラム・データベース・ファイル)の読み書き
がAPIの中心みたいですね。確かに実行可能ファイルの生成や加工、デバッグ用情報(プロファイルとかにもつかえる)ファイルの生成や加工というのはコンパイラのインフラには違いないですか…。特にPEは普通の実行可能ファイルではないわけなので専用APIを整備する必要もあるんでしょう。
私も実際コンパイラ・フレームワーク/インフラストラクチャとしてCOINSを使っていますが、そういうものはパーサ→最適化→出力といったコンパイラ自身のフレームワークであって、その辺はない(外部プログラムとしてasやldを呼んでいる)ですからね。
AST風なCodeDOMといいMSはコンパイラ用に使えるデータ構造やAPIを徐々に整備して.Netコンパイラ・フレームワーク的なものを構成していくつもりなのかしらん?
Re:コンパイラ・インフラストラクチャときいて (スコア:3, 興味深い)
バイナリファイルをダウンロードすると、いくつかのDLLとそれに対応する
XMLファイルが添付されており、XMLファイルを確認するとどのような
インタフェースがあるのか確認することができます。
インタフェースとしては、PE(COFFの亜種)の読み書きや、このシンボル情報
(gcc -g で生成されstripで除去するアレですね)の操作・参照を行うための
ものが中心ですが、中にはMicrosoft.Cci.ILGeneratorというファイルもあり
このファイルには以下のようなコード生成に関するものも含まれていますので、
もう少しいろいろなことができそうです。
ドキュメントがもう少し整備されるとよいですね。
Re: (スコア:0)
つーと、monoのCecil [mono-project.com]みたいなもの?
#あれ?逆?
Re: (スコア:0)
PEファイル(ポータブル実行可能ファイル)のPって、ポータブルって意味だったんだ。
俺はてっきりプロテクトモードのPだと思ってたよ。
# と、どうでもいい知識を修正した
FireBird (スコア:1, 参考になる)
MicroSoft の目標は .PDB デバッグ情報をヒントにした、Native <-> Managed 相互コンバーターの作成です。
Managed コードは、それ自体が中間言語ですから十分な情報がついていますが
一般 Native コードにはそれがない。力業で逆アセンブルしても完全には内容が把握できない。
だが .PDB に十分な情報が入っていれば何とかなる。
ここで .PDB 付き Native バイナリを生成した元言語は必要ないことに注意。
アセンブラだろうが C++ だろうが、.PDB 付き .EXE/.DLL から C# ソースを作成してしまうことができるわけ。
いったん Managed コードに変換してしまえば、異種 CPU に最適化することが可能になります。
FireBird の存在を前提にしたアセンブラは、おそらく元ソースコードの情報をリッチに PDB に押し込みます。
そして実行環境下で実行時 CPU に適したアセンブラコードに落として実行されるでしょう。C# のコードが実行時最適化されるのと同様に。
元ソースコードの CPU アーキテクチャと実行時 CPU アーキテクチャが異なっていても良いわけです。
C# も、これら10年越しの研究の成果の一部分なのですね。
statical analyzer for all platform(Re:FireBird) (スコア:2)
CLRで統合する利点としては以下のような感じになるでしょうか。
言語毎にstatical analyzer(バッファオーバーフロー
が発生しないかどうか解析するツールね, 例えばllvm-GCC)
を作らなくてもCLR managed codeに対するanalyzer
だけ作れば済む。
managed codeのある命令に該当する元のソースコードの
行数なんかもわかる。
JavaバイトコードだとJavaの世界から外に出れないという難点がありま
す。CLRならOSのほとんどの部分(もしかするとドライバも)
を記述できる。
相互コンバーターということで逆もあってもいいと思いますが、
実際一度高級言語からバイトコードまで落としてしまうと
逆コンパイルして可読性のあるコードを保つのは難しいでしょうね。
Re: (スコア:0)
可読性は必要ないのでしょう。
Re: (スコア:0)
ftp://ftp.research.microsoft.com/pub/tr/TR-2006-43.pdf [microsoft.com]
CPUのみならずOSやManaged-Nativeの壁すら旧来の資産を保ったまま往来する、というかスムーズに移行できる、というのがMSが描いているゴールなのかもしれません。
Re: (スコア:0)
MSの本業は言語屋って事なんですかね
この目論見が成功するとx86もろともWindowsの独占力も吹き飛ばしてしまいかねないのでは
Re: (スコア:0)
FireBird のすべてが公開されるとは限らない。でしょ?
恐らく、変換エンジンそのものは Windows という名の OS から外には出てこないでしょう。
もしすべてが成就したら....
MS の売る「Windows」と言う名前の OS は、x32/x64/i64 だけではなく PowerPC / ARM / SPARC からメインフレーム CPU まで一つのバイナリで
サポートします。小さな .NET Framework カーネルと FireBird エンジンだけが真の Native コードとして提供される。
(デバイスドライバとかは、とりあえず忘れてください)
その「Windows」上では、過去のある特定の「Windows」OS で動く/動いていたアプリケーションは、そのまま無変更で動作可能。
古い MS Office や Windows CE アプリが、そのまま起動する。
ということになります。うまくいけばね!
Artane.さん、コンパイラインフラストラクチャとは何かを勉強してから書いてね (スコア:0)
コンパイラインフラストラクチャとは何か、はLLVMのストーリーで解説しておきました。
Re:Artane.さん、コンパイラインフラストラクチャとは何かを勉強してから書いてね (スコア:1)
Re:Artane.さん、コンパイラインフラストラクチャとは何かを勉強してから書いてね (スコア:1, 参考になる)
コンパイラインフラストラクチャはコンパイラを実装するためのツール群で、特にバックエンドを細かく再利用できるようになっており、そこがありがたみの源泉になっています。
つまり既存の最適化ルーチンを変更したり独自のものを追加したりといったことが容易にできるようになっています。
gccはバックエンドは一枚板になっていますので、インフラストラクチャ度は相対的に低いと言えますね。
Javaのクラスファイルは伝統的な意味でのターゲットコードですので、これもインフラストラクチャ度は低いですね。
一連のコメントを読んで思った (スコア:0)
コンピューター言語について語る前に普通のコミュニケーション能力を身につけて欲しいものだ
Re: (スコア:0)
コンピューター言語について語る前に普通のコミュニケーション能力を身につけて欲しいものだ
あーあ、どっちもできない自称エンジニア達を一斉に敵に回してしまいましたね。
Re: (スコア:0)
相手にする価値も無いから、別にいいよ。
Re: (スコア:0)
Re: (スコア:0)
>ACで書き込まれたらどれが解説なのかわからない
それ以前に、今回の記事に対するArtaneのコメントがどこにあるのかわからない。
#一体(#1552996)は、今回の記事に対するArtaneのコメントをどこで見つけたんだろうか。
#「またLLVMの時のような大嘘を書き散らさないで下さい。」 なんて言ってるんだから、どこかにあるんだろうけど。
Re:Artane.さん、コンパイラインフラストラクチャとは何かを勉強してから書いてね (スコア:1, 参考になる)
saitohさんのコメントから辿ってみたけどこれ [srad.jp]のことかな?
#頻繁に見ているわけじゃないので「毎度毎度大嘘つくんじゃねえ」については判断の材料なしですが。
Re: (スコア:0)
でたらめを書き込まれる前に釘を刺してるんじゃないの。
LLVMのストーリーにはそれらしきArtaneのコメントがありましたよ
N88-BASIT.NET (スコア:0)
を所望する。
Re:N88-BASIT.NET (スコア:2)
---- ばくさん!@一応IT土方
Re:N88-BASIT.NET (スコア:1)
Hu-Basic.NETも是非お願いします。
#他力本願かよ
Re:N88-BASIT.NET (スコア:1, おもしろおかしい)
Re: (スコア:0)
Re: (スコア:0)
しかし誰も喰い付かない。
参照するなら (スコア:0)