Microsoft の Lisa Feigenbaum は、ここで「サービスとしてのコンパイラ」について語っています。これにより、リファクタリングツールの構築が容易になると読みました。どのように?Mono の CAASは優れていますが、Microsoft のバージョンが似ている場合、この特定のユース ケースがどのように行われるかわかりません。
3 に答える
「サービスとしてのコンパイラ」とは、コンパイラを個々の部分に分割することを意味します。
ソース コードが一方の端に入り、コンパイルされたアセンブリがもう一方の端から出てくる 1 つの大きなモノリシック ブラック ボックスを用意する代わりに、型付き出力を含む小さな (黒い) ボックスがたくさん得られます。
たとえば、ソース コードを 1 つのボックスにフィードし、別のボックスから抽象構文木 (AST) を取得できます。このツリーは、オプティマイザーに供給される前に操作できます。オプティマイザーからコードの別の表現が生成され、コンパイラーに供給されて実行可能コードが出力されます。
将来の.NETの「サービスとしてのコンパイラ」部分の正確な計画についてはあまり知らないので、上記は単なる推測ですが、それが可能性を私が見ている方法です.
その後、リファクタリングは AST で動作し、マッピングと変換の両方を通じて、AST から元のソース コードに戻る方法があったと思います (マッピングとは、AST のノードを取得して、「どの部分がソース コードはこのノードに対応していますか」、変換は「この AST を変更した後、現在表されているソース コードを教えてください」という意味になります。)
たとえば、JetBrains と DevExpress の両方が Microsoft 向けのリファクタリング ツールを作成しており、リファクタリングのためにコードを読み取って分解するコードを作成するための独自の努力と、CAAS によって提供されるものを使用することを評価する必要があります。
Roslyn CTP には、 「コード アクション」を構築するためのウォークスルーが含まれています。これは、コードの問題にリンクしている場合は「クイック フィックス」、コンテキストに応じて提供されている場合はリファクタリングのいずれかを表す用語です。
Roslyn CTP をインストールすると Visual Studio に表示される CodeRefactoring プロジェクト テンプレートも参照してください。
私の会社 (Semantic Designs) は、"サービスとしてのコンパイラ" を提供しています: DMS Software Reengineering Toolkitです。
DMS は、コンピューター (任意の正式な) 言語に関して一般的です。言語記述 (DMS には、C++、C#、Java、PHP、COBOL、および他の多くの言語用のこれらの堅牢なバージョンがあります) が与えられると、DMS はソースを AST に解析し、それらの AST から元のコメントを含む有効なソースを再生成できます。
DMS は、構成可能な属性評価、フロー分析、反復ソルバー、use-def 分析、ローカルおよびグローバル コール グラフ構築、およびグローバル ポイント ツー分析の両方のさまざまなアナライザー エンジンを提供します。AST は、手続き型コード (古典的なコンパイラ ツリーのハッキング) またはソースからソースへの変換によって変更される場合があります。変換は、ある言語の AST をその同じ言語 (「最適化」) または他の言語 (「改良/翻訳」) にマップする場合があります。これは非常に成熟したインフラストラクチャであり、その背後には 15 年以上の継続的なエンジニアリングがあります。
必要な入力/出力言語のセットを選択/定義し、コンパイラ指向の DSL で記述されたカスタム コードを作成して (目的のツールを作成するために DMS によってコンパイルされます)、DMS を使用して、目的を達成する DMS 機構のさまざまなビットを呼び出します。 .
DMS は、言語移行ツール ( B-2 ステルス ボンバー ミッション ソフトウェア移行を参照)、大規模な C++再構築ツール、自動車工場の組み立てセルを実行するためのコード生成ツール、および多くの従来のソフトウェア エンジニアリング ツール (テスト カバレッジ、プロファイラー、クローン検出、スマート差分)。これはリファクタリング ツールの自然な基盤です。私たちはこれらに取り組んでいます:-}