私はRoslynコードベースを見て、2つのバージョンの構文(内部と外部)を持っていることに気付きました。多くの場合、これらは「赤」ノードおよび「緑」ノードと呼ばれるように見えます。私は誰かがこのような構文の2つのバージョンを持っている理由を説明できるかどうか疑問に思っています。なぜRoslynは言語ごとに2つのバージョンの構文を持っていますか?
4
A
答えて
8
Persistence, Facades and Roslyn’s Red-Green Treesから:
「緑」の木は不変で、永続的な、親への参照を持っていない、「ボトムアップ」構築され、そしてすべてのノードは、その幅ではなく、その絶対位置を追跡しています。編集が行われると、編集によって影響を受けた緑色のツリーの部分のみが再構築されます。これは通常、ツリー内の総解析ノードのO(log n)あたりです。
"赤い"ツリーは、緑色のツリーの周りに構築された不変のファサードです。要求に応じて「トップダウン」で構築され、すべての編集時に破棄されます。それは、あなたが上からツリーを下っていくにつれて、それらを必要に応じて製造することによって親参照を計算する。あなたが降りると、幅からそれらを計算することによって、絶対位置を作ります。
Roslyn APIのコンシューマは、赤いツリーしか表示しません。緑色のツリーは実装の詳細です。 (また、デバッガを使用して解析ノードの内部状態を調べると、別のタイプの別の解析ノード(緑のツリーノード)への参照があることが実際に分かります。
ちなみに、これらは「赤/緑の木」と呼ばれています。なぜなら、それらはデザインミーティングでデータ構造を描くために使用したホワイトボードマーカーの色だったからです。色に他の意味はありません。
関連する問題
- 1. オフサイトルールを持つ言語で、すべての言語構成をファーストクラスにすることはできますか?
- 2. なぜresharperは '単一の' throw文を持つcatch節は冗長です 'と言っていますか?
- 3. Drupalで言語ごとに2つ以上のドメインをバインドしますか?
- 4. なぜHTMLVideoElementはHTMLAudioElementと同じコンストラクタ構文を持っていませんか?
- 5. なぜGHCはスレッドごとにスタックを持っていますか?
- 6. なぜNSRegularExpressionは "a"文字列に "。*"の2つの一致があると言っているのですか?
- 7. 関数はC言語のストレージクラスを持っていますか?
- 8. CKEditorバージョンの言語がlanaguageが空の場合、CKEditorバージョンは、デフォルトの言語が持っている言語を示すだろう、
- 9. GroovyとGroovy ++は2つの言語か1つの言語ですか?
- 10. なぜ私のif文は、2つの文字列がリストに含まれていないと言っているのですか?
- 11. 2つのJava文字列が同じでないと言っています
- 12. バッシュ:私は行ごとに2文字列をテキストファイルを持っている
- 13. は、私がデータを持ついくつかのテーブルを持っている動的なピボット(バージョン2)
- 14. なぜC99はストレージサイズについて不平を言っていますか?
- 15. なぜ2と4が2つの例に残っていますか?
- 16. どのように1つの画面に2つのランダムな単語ジェネレータを持っていますか?
- 17. NSISは変数を宣言する2つの方法と条件文を持っています
- 18. なぜPylintはprint( 'foo'、end = '')が無効な構文であると言っていますか?
- 19. なぜPerlはここで未終端の文字列について不平を言っていますか?
- 20. epoll_ctlが私に悪いfdを持っていると言っているのはなぜですか?
- 21. PHPは完全に文脈自由言語ですか、文脈依存部分を持っていますか?
- 22. なぜ私のSQL構文が間違っていますか?
- 23. なぜgitは2つのブランチが最新であると言ってマージしていますか?
- 24. JSON.Parseが「無効な文字」と言っているのはなぜですか?
- 25. 新しい言語の実装にRoslynを使用する
- 26. C言語での構文
- 27. Go言語の構文Confusion
- 28. Java言語の構文
- 29. なぜJavaはたくさんのエントリを持つjarファイルについて文句を言うのですか?
- 30. SQL構文 - 反対私は2つのテーブルを持っている
はhttp://stackoverflow.com/questions/10417169/are-roslyn-syntaxnodes-reused/10417510#10417510 –
これに関する詳細な背景については、私はいくつかの時間前に書いた論文を読むことができますも参照してください。ページ35:https://www.dropbox.com/s/rc9edahndlog0je/MainPaper.pdf?dl=0 –