なぜマイクロソフト「Roslyn」に時間を費やすのでしょうか?


37

Microsoft "Roslyn"のホワイトペーパーと例のいくつかを読んでいるところですが、このコンセプトは非常に興味深いようです。私が知ることができることから、コンパイラであるブラックボックスを開き、Visual Studioで記述されたコードに関する情報とメトリックを取得するために使用できるインターフェイスを提供します。

Roslynには、コードを「スクリプト化」してオンザフライでコンパイル/実行する機能もあるようです(CodeDomに似ています)が、私の経験では、そのタイプの機能の使用は限られています。

コード分​​析とメトリック要素は興味深いスペースですが、それは非常に長い間存在しており、コード分析とリファクタリングツール(ReSharper、CodeRushなど)にすでに多くのお金を投資している多くのプロバイダーがあります、nCoverなど)、彼らはそれをかなりうまくやっています!

既存のツールのいずれかのライセンスを購入することで、わずかなコストで提供できるものを実装するために、なぜ会社が邪魔にならないのでしょうか?

おそらく、言及されたツールのドメイン外に配置するRoslynプロジェクトの重要な機能をいくつか見落としていました...


4
Roslynの主なポイントは、より多くのMicrosoftインターンです。簡単に拡張可能なマネージC#コンパイラを作成します。これにより、チームは新しい言語機能を簡単に実装して試用できます。また、新しい最適化アルゴリズムの実装が容易になります。
-JustAnotherUserYouMayKnowOrNot

1
はい、ペンフォールド-あなたはいくつかのことを見逃しているかもしれません。Channel9でDustin Campbellsのインタビューを見ましたか? channel9.msdn.com/Events/Ch9Live/...
ジェームズスネル

3
これは、Microsoft製品の成功/収益性の高いアドオンを開発するリスクであり、次のバージョンに追加する可能性があります。
ジェフ

10
また、ReSharperの背後にいる人たちは、プラグインできる追加の機能について考えていることを確信できます。はい、彼らはC#パーサー/アナライザーを作成しましたが、実際のMS C#エンジン。
バイナリウォーリアー

2
Roslynの興味深い使用法については、scriptcsをご覧ください。github.com/scriptcs/scriptcs
アシュリーデイビス

回答:


53

Roslynには、コードを「スクリプト化」してオンザフライでコンパイル/実行する機能もあるようです(CodeDomに似ています)が、私の経験では、そのタイプの機能の使用は限られています。

オンザフライのコンパイルと実行は、Roslynの重要な利点です。この機能の利点を過小評価しているのは、実際の使用例で実際に使用されているケースに出会ったことがないためです。そして、これは理にかなっています。動的コンパイルの必要性はおそらくニッチな機能ですが、それを持たないと、それがはるかに難しいいくつかの強力なアプリケーションを提供します。

ここに、動的コンパイルが非常に役立つと思われるいくつかの例を示します。これらすべてを実現する方法は他にもありますが、Roslynを使用すると簡単になります。

  • 実行時にロードされ、コンパイルされ、「親」アプリケーションの実行に含まれるプラグインファイルを持つ。
  • 実行時にC#に変換され、Roslynを使用してコンパイルされるDSLを作成します。
  • C#の取得、分析、翻訳などを行うプログラマー指向のアプリケーションの作成
  • 空白などの単なる「表面的な」違いとは対照的に、コンパイル後の違いについて2つのコードチャンクを比較します。これはセマンティック差分として知られています。

要約すると、執筆に時間を費やすソフトウェアによっては、Roslynの使用法が見つからない場合があります。ただし、Roslynがテーブルに多くのことをもたらす多くのユースケースがあります。あなたが言及したツールはどれもこの機能を提供していません。また、彼らは彼らのアーキテクチャと目的に基づいていません。


セマティックdiffの場合は+1。興味深いのは、セマンティックdiffにRoslynを使用する開発中の商用製品へのリンクです。(完全な開示-私は彼らとは関係がなく、彼らの製品がジョンスキートのブログで言及されているのを見たばかりです)
-MarkJ

@RationalGeek-例のおかげで、DSL => C#ルートの例を考えていませんでした...それがビジネスアプリケーションで非常に強力になるいくつかのシナリオを想像できます。私が見た他の多くの例(あなただけのものではない)は、前に述べたリファクタリングツールと非常に重なっています。私の元々の質問の他の部分は、何分の一かのコストで事前にロールされた優れたものがあるときに、誰かがこの分析を実行するためのツールの開発にお金を投資する理由でした...しかし、私は常に別のスペースがあると思いますより良い)ツールのセット!:)
リチャードフーパー

@Penfoldには常に新しい開発者ツールの余地があります... :
RationalGeek

1
セマンティックdiffは、コンパイル目的だけではありません。すべてのバージョン管理システムには差分が必要であり、ほとんどの場合、愚かな差分が使用されます。2つの関数を入れ替えて、作成した混乱を確認してください
。diffが

ここに大きなものがあります。ASP.NETアプリを作成する際の自動再コンパイルは、Webアプリを再構築および再デプロイする必要がありません。最終的にASP.NET vNextで発表されたC#での作業は、スクリプト言語とまったく同じになります。ただし、タイプセーフであり、パフォーマンスも優れています。これはこの一般的なアプローチのまさに始まりであり、最終的にはリッチクライアントアプリ(モバイル、デスクトップ)に組み込まれ、実行時にコードを変更できるようになります。定義上、各リクエストはステートレスであるため、Webアプリの方がはるかに簡単ですが、やがて他のアプリアーキテクチャにも反映されます。
マーキー

12

ツーリングを提供する企業(例:JetBrains *)は、Roslynに非常に興味を持っていると確信しています。優れたツールはマイクロソフトのエコシステムの使用を促進するため、マイクロソフトはツールの作成を簡単にしたいと考えています。

* JetBrainsブログ(このエントリ)に従って、JetBriansはRoslynを使用しないことを発表しました。ただし、JetBrainsの新しい競合他社(既存のコードベースを使用していない場合)はRoslynを使用すると思います。有利なスタートを切ることができます。

Roslynに関する10の質問、10の回答のうちの質問6 :

6:Roslynの実用的な用途は何ですか?開発者としてどのように役立ちますか?

頭に浮かぶRoslynの最初の用途の1つは、ビジネスルールエンジンの用途です。Roslynの前は、通常、ユーザーマクロの評価には、Visual Basic for Applications(VBA)の実装、Ruby式を使用したDLRへの呼び出し、動的に生成されたVisual BasicまたはC#コードを使用したコマンドラインコンパイラーへの呼び出し、実行結果の取得が含まれていましたそのコード。これらの方法は理想的ではありませんでした。

Eric Vogelの記事「C#でのRoslyn Scripting APIの使用」で示されているように、RoslynはC#および(最終的に)Evaluate()関数を使用してVisual Basicコードの動的なコンパイルと実行を簡単に許可します。アプリケーションと同じ言語で記述されたユーザーマクロにより、開発者はビジネスルールを表すユーザーマクロを簡単にサポートできます。

Roslynを使用すると、コードのリファクタリングがはるかに簡単になります。Roslyn以前は、DevExpress CodeRushやRefactor Pro、JetBrains ReSharperなどのツールの開発者は、製品の基盤として多くのコンパイラー操作を再作成する必要がありました。Roslynを使用すると、リファクタリング開発者は既存のコンパイラー機能を直接活用できます。Roslynが広く利用可能になったら、個々のリファクタリングルールをインストールするNuGetパッケージの外観を想像できます。


4
「アプリケーションと同じ言語で記述されたユーザーマクロにより、開発者はビジネスルールを表すユーザーマクロを簡単にサポートできます。」-何が間違っている可能性があります!
gbjbaanb

10

すべてのコンパイラーが定期的にサービスとしてのコンパイラー(CaaS)を提供する日を心待ちにしています。コンパイラがプリリンカーコードのみを出力すると考えるのをやめ、コンパイラが複数のターゲットに変換できるツリーを出力すると考えるようにする必要があります。すべてのコンパイラには、ツリーとオプションでJSON / XMLを出力する機能が必要です。出力は、美化された同じ言語、C、ILソース、ILバイナリ、Java、Javascript、LLVM、PIC実行可能ファイル、プリリンカーコードなど、多くのタイプのターゲットに変換できます。

私は生計のためにコンパイラを書いています。私の顧客は、優れた柔軟性、移植性、分析への扉を開くため、CaaSで販売されています。

マイクロソフトがずっと前にCaaSを実装していないことに本当に失望しています。たとえば、VB6から他の何かへの移行パス、または.NetからC ++への移行パスとして使用できます。


1

MSFTがRoslynに投資している理由の簡単な答えは、C#コンパイラ用の既存のコードベースが5バージョン-11年前だということです。コードベースが管理可能なままになるのは長い時間です。加えて、彼らは書き直しているので、彼らはその内部のすべてがAPIとして公開されるようにそれをすることに投資することを決めました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.