今までMonoのコード生成エンジンは、コードのツリーIntermediate Representation (IR)に基づいていた。バージョン2.2は、リニアIRに基づいた新たなエンジン(リンク)を搭載しており、スピードとコードサイズの大幅な改善が実現した。
Miguel de Icaza氏によると、以前のツリーベースのIRは「コード生成の改善が困難で、意味ある方法でJITエンジンの拡張が難しい。新しいリニアIRは「レジ スタアロケーターに対するレジスタ使用率の可視性を改善するのに役立つため、コード生成時により良い選択をすることができる」。
リニアIRへの取り組みは、2005年の後半(リンク)に始まった。作業自体は進んだが、Monoチームが、それに関わる膨大な量の作業のため、新たなエンジンを2.0に組み込むことを望まなかった。2.2バージョンがリリースされた今(リンク)、Monoは新たなエンジンがある。
その変化によるもっとも重要な結果が、ベンチマーク結果(リンク)によって示されている。
スピード:エンジンは大抵、コンピュータで集約されたコードのためになる。通常10%から30%のパフォーマンスの向上が見られ、場合によっては50%も改善するケースもある。
コードサイズ:新たなエンジンが通常12%から20%スリム化されたコードを生成する。
新たなエンジンに関する詳細(リンク)に関心があれば、MonoのWebサイトを参照するとよい。2.2のリリースノート(リンク)は、パフォーマンスの伸び、コンパイル前サポート、PerformanceCountersを通じたモニタリングサポート、コードライブの添付、SIMDサポート(参考記事)など、主要な改善について述べている。
原文はこちらです:http://www.infoq.com/news/2009/01/Mono-2.2-Linear-IR