[obsidian] vault backup: 2025-08-05 00:16:00[
All checks were successful
Build / build (push) Successful in 7m25s
All checks were successful
Build / build (push) Successful in 7m25s
This commit is contained in:
@@ -10,4 +10,28 @@
|
||||
|
||||
ながいけどこれがわかりやすい
|
||||
|
||||
[Ruby Parser開発日誌 (19) - 最高の構文木の設計 2024年版 - かねこにっき](https://yui-knk.hatenablog.com/entry/2024/08/23/113543)
|
||||
[Ruby Parser開発日誌 (19) - 最高の構文木の設計 2024年版 - かねこにっき](https://yui-knk.hatenablog.com/entry/2024/08/23/113543)
|
||||
|
||||
[[C#]]のRoslynで提案されたもので、[[rust-analyzer]]とかでも使われている
|
||||
|
||||
- Green Treeが構文的に意味のある単位でのツリーで、Childrenを持ち、Spanの絶対位置ではなく幅を持つ
|
||||
- Red Treeは必要に応じて構築される木で、Green Nodeへの参照と親への参照、ドキュメントトップからのSpanの先頭位置を持つ
|
||||
|
||||
これで、SpanはRed-GreenTreeの組み合わせでアドホックに生成できるから、部分的な木の差し替えとかにも対応しやすくてうれしい
|
||||
|
||||
## これってRustでもうちょっとシンプルに作れんのか
|
||||
|
||||
|
||||
[[Rust]]で普通にSyntax Tree作ってると、Recursiveなenumを経由して作るのが普通なわけだが、適当なid-arena的仕組みで管理している限りは、普通のSyntax TreeがGreen Tree
|
||||
|
||||
|
||||
愚直に参考にされているやつを使うと、Tagged Unionをゼロから再実装するみたいなことになるので、Rustのenum as Tagged Unionの構造を有効活用したくね?
|
||||
|
||||
|
||||
Rust Analyzerだと文字列だけじゃなくSyntax TreeまでInterningされてるらしい(Rust規模のコードベースなら確かに有効かも)
|
||||
|
||||
[rust-analyzer/docs/dev/syntax.md at c9109f23de57359df39db6fa36b5ca4c64b671e1 · rust-lang/rust-analyzer · GitHub](https://github.com/rust-lang/rust-analyzer/blob/c9109f23de57359df39db6fa36b5ca4c64b671e1/docs/dev/syntax.md)
|
||||
|
||||
というかrowanそのままつかえばいいのかな
|
||||
|
||||
[GitHub - rust-analyzer/rowan](https://github.com/rust-analyzer/rowan)
|
Reference in New Issue
Block a user