Upgrade to Pro — share decks privately, control downloads, hide ads and more …

情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」

情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」

Brackについての紹介
https://github.com/brack-lang/brack

Mutsuha Asada

September 15, 2024
Tweet

More Decks by Mutsuha Asada

Other Decks in Technology

Transcript

  1. ・Markdownは統一された規格が無く、  CommonMarkやGitHub Flavored Markdown(GFM)などの後発の規格がいくつかある  → 脚注はCommonMarkに定義されている?GFMには?  → インライン脚注はpandocで変換できる?  → リストの要素に見出しを含めてMarkdown.plで変換できる?CommonMark準拠だと?

     → MultiMarkdownを使うとルビを振ることはできる? ・人々はMarkdownの枠を超えた表現力をMarkdownに要求している 3 Markdownクイズ 😄 まあ確かに欲しいよな 知人のMarp製スライド pタグを省略できる JSXであるところのMDX
  2. ・Markdownの統一された規格は無く、CommonMarkやGitHub Flavored Markdownなどが乱 立している  → 脚注はCommonMarkに定義されている?GFMには?  → インライン脚注はpandocで変換できる?  → リストの要素に見出しを含めてMarkdown.plで変換できる?

    ・人々はMarkdownの枠を超えた表現力をMarkdownに要求している 3 動機 まあ確かに欲しいよな 知人のMarp製スライド pタグを省略できるJSX 4 変換規則・対象を拡張することを 前提にしたマークアップ言語が欲しい
  3. 6 プラグイン① ・WebAssemblyバイナリをプラグインとして扱う ・現在はRustのみで書いているが、JavaScriptやGo、Cなどでも書ける ・HTMLターゲットのboldの実装は単純  ・[std.bold hello]はどう処理されるか  1. コンパイラが文字列“hello”をプラグインに渡す  2.

    bタグで囲った文字列“<b>hello</b>”を返す ・インライン脚注は置換のみでは実現できない  ・抽象構文木を操作可能なマクロを利用する  ・文書のASTとIDを受け取る  ・フッターに脚注を挿入するコードを書く
  4. 7 プラグイン② [展望] ・LSPも書いている(今は簡単なエラー報告ができる程度) ・プラグインがLSPの機能を実装できるように進める予定  ・型検査、補完、Inlay Hints、Code Actions、Semantic Tokensなど ソースコード

    トークン列 具象構文木 (CST) 抽象構文木 (AST) 変換前表現 生成結果 tokenizer parser transformer → プラグインが定義したフォーマッタを呼び出す expander → プラグインが定義したマクロを呼び出す codegen → プラグインが定義したコマンドを呼び出す