Canopy開発日誌-4月-まとめ
3月まで、CanopyはLambda中心のエディタに見えていた。4月に固まったのは、その形ではなく、言語を差し替えられる骨格だった。日々の記録は通常版の日誌、英語版はHighlights (English)。
ソースコードを構造(IR)として編集する MoonBit 製エディタ。概要はCanopyとは。
1. すべてのエディタ面がひとつのprotocolに
Ideal editorもprosemirror exampleも、それぞれ別の配線を持っていた。EditorProtocol経由に統一し、CM6Adapter/PMAdapterをadapter層として整理した。
どの面も同じ言葉でドキュメントモデルと話せるようになった。「ひとつの決め打ちエディタ」から「adapterの集合」へ、形が変わった。
2. pretty-printerがDOMとつながる
Wadler-Lindig pretty-printerは、それまでテキスト整形の道具だった。出力をViewNodeへ渡すbridgeを作り、HTML syntax highlightingとつなげた。
整形結果が、そのまま描画パイプラインに入る。エディタの見た目と、ソースの構造が同じ経路で扱われるようになった。
3. Markdownが本格的なblock editorに
Markdown用block editor、7つのedit ops、three-mode web editor、preview adapterを実装した。ContainerのPhase 2(text sync)・Phase 3(block doc sync)も進み、文書をブロック単位で扱えるようになった。
段落をまとめて動かす操作が、ここから日常になる。プログラムだけでなく、ノートやドキュメントも同じ編集基盤で扱える。
4. 汎用B-treeとconfidence lattice
lib/btreeを汎用B-treeライブラリとして切り出し、3月のorder-tree作業と統合した。range delete、splice promotion chain repairもこの時期に入る。
並行してlib/semanticを新設し、推論結果の確信度を扱うConfidence latticeとsymbolic annotatorを追加した。すべてを確実とみなさない——推論の確からしさそのものを扱う、最初の基盤だ。
5. 言語の分離が始まる
LanguageCapabilities[T]により、SyncEditorからLambda固有の型を切り離した。汎用tree opへの道が開かれた。
JSON・Markdown、そして7月のJSXへつながる下地は、ここでできている。
6. drag-and-drop・E2E・moon.work
触れる範囲が広がった分、「壊れていない」証拠も増やした月だ。
Ideal editorとblock editorでdrag-and-dropの土台を実装し、Lambda/JSON editorのWeb E2EテストをCIへ載せた。loomではReactiveParserを廃止し、統一@loom.Parser[T]へ移行した。MoonBitのworkspace機構moon.workも導入し、依存方向ルールをCIで検証するようにした。
4月末までに、言語非依存のcore、ブロック単位でアドレス可能な文書、複数adapterの構成が見えた。5月のCognitionもscope graphも、この骨格の上に載る。
- GitHub: dowdiness/canopy · dowdiness/loom · mooncakes.io/user/dowdiness
- 全文: 4月の日誌