Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」
Search
Mutsuha Asada
September 15, 2024
Technology
0
51
情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」
Brackについての紹介
https://github.com/brack-lang/brack
Mutsuha Asada
September 15, 2024
Tweet
Share
More Decks by Mutsuha Asada
See All by Mutsuha Asada
Reproducible Containers (ASPLOS'20)
momeemt
0
220
❄️ NixCon2025に参加した
momeemt
0
250
🔨 小さなビルドシステムを作る
momeemt
4
1k
情報科学類で学べる専門科目38選
momeemt
0
820
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
580
Wasmで拡張できる軽量マークアップ言語 Brack
momeemt
0
370
❄️ NixOS/nixpkgsにSATySFiサポートを実装する
momeemt
2
540
Intel系FPGA上へのRISC-Vプロセッサの実装
momeemt
0
330
Nixでつくるdotfiles
momeemt
1
490
Other Decks in Technology
See All in Technology
2025年 山梨の技術コミュニティを振り返る
yuukis
0
140
業務の煩悩を祓うAI活用術108選 / AI 108 Usages
smartbank
9
18k
さくらのクラウド開発ふりかえり2025
kazeburo
2
1.3k
ハッカソンから社内プロダクトへ AIエージェント「ko☆shi」開発で学んだ4つの重要要素
sonoda_mj
6
2k
Strands Agents × インタリーブ思考 で変わるAIエージェント設計 / Strands Agents x Interleaved Thinking AI Agents
takanorig
6
2.5k
戰略轉變:從建構 AI 代理人到發展可擴展的技能生態系統
appleboy
0
170
20251222_サンフランシスコサバイバル術
ponponmikankan
2
160
「もしもデータ基盤開発で『強くてニューゲーム』ができたなら今の僕はどんなデータ基盤を作っただろう」
aeonpeople
0
280
[2025-12-12]あの日僕が見た胡蝶の夢 〜人の夢は終わらねェ AIによるパフォーマンスチューニングのすゝめ〜
tosite
0
230
AgentCoreとStrandsで社内d払いナレッジボットを作った話
motojimayu
1
1.2k
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
130
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
240
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
0
48
Git: the NoSQL Database
bkeepers
PRO
432
66k
エンジニアに許された特別な時間の終わり
watany
106
220k
Faster Mobile Websites
deanohume
310
31k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Facilitating Awesome Meetings
lara
57
6.7k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Tell your own story through comics
letsgokoyo
0
770
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
38
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Optimizing for Happiness
mojombo
379
70k
Transcript
1 情報科学若手の会 2024 LT WebAssemblyで拡張可能な 軽量マークアップ言語の開発 浅田睦葉 GitHub: @momeemt
2 自己紹介 省略
・Markdownは統一された規格が無く、 CommonMarkやGitHub Flavored Markdown(GFM)などの後発の規格がいくつかある → 脚注はCommonMarkに定義されている?GFMには? → インライン脚注はpandocで変換できる? → リストの要素に見出しを含めてMarkdown.plで変換できる?CommonMark準拠だと?
→ MultiMarkdownを使うとルビを振ることはできる? ・人々はMarkdownの枠を超えた表現力をMarkdownに要求している 3 Markdownクイズ 😄 まあ確かに欲しいよな 知人のMarp製スライド pタグを省略できる JSXであるところのMDX
・Markdownの統一された規格は無く、CommonMarkやGitHub Flavored Markdownなどが乱 立している → 脚注はCommonMarkに定義されている?GFMには? → インライン脚注はpandocで変換できる? → リストの要素に見出しを含めてMarkdown.plで変換できる?
・人々はMarkdownの枠を超えた表現力をMarkdownに要求している 3 動機 まあ確かに欲しいよな 知人のMarp製スライド pタグを省略できるJSX 4 変換規則・対象を拡張することを 前提にしたマークアップ言語が欲しい
5 文法 ・文法を最小限にして、できるだけ簡単に拡張可能な言語仕様にする ・多くのマークアップ言語は拡張が処理系依存 ・Brackの重要な文法は1種類(厳密には3種類)だけ ・コマンド呼び出し構文 ・[module.ident arg1, arg2, ...,
argN] ・`[]`はインライン、`{}`はブロックで、 単なる置換メカニズム ・`<>`はマクロ
6 プラグイン① ・WebAssemblyバイナリをプラグインとして扱う ・現在はRustのみで書いているが、JavaScriptやGo、Cなどでも書ける ・HTMLターゲットのboldの実装は単純 ・[std.bold hello]はどう処理されるか 1. コンパイラが文字列“hello”をプラグインに渡す 2.
bタグで囲った文字列“<b>hello</b>”を返す ・インライン脚注は置換のみでは実現できない ・抽象構文木を操作可能なマクロを利用する ・文書のASTとIDを受け取る ・フッターに脚注を挿入するコードを書く
7 プラグイン② [展望] ・LSPも書いている(今は簡単なエラー報告ができる程度) ・プラグインがLSPの機能を実装できるように進める予定 ・型検査、補完、Inlay Hints、Code Actions、Semantic Tokensなど ソースコード
トークン列 具象構文木 (CST) 抽象構文木 (AST) 変換前表現 生成結果 tokenizer parser transformer → プラグインが定義したフォーマッタを呼び出す expander → プラグインが定義したマクロを呼び出す codegen → プラグインが定義したコマンドを呼び出す
8 ターゲット ・テキスト形式ならターゲットを自由に選べる ・先述したHTMLをはじめとして、pandoc ASTやはてな記法、JSON、XMLなど ・バイナリ形式だと少し大変そう ・フックを入れたい [展望] ・JSON形式に変換した後に、そのデータを利用して任意のプログラムを実行する ・既存のPDFバックエンド(typst/pdf-writerなど)を利用して直接PDFを出力する
・動画、画像、音声、その他?
9 何に使うの ・現状: 私のブログ(blog.momee.mt)はBrackで書かれています ・このスライドはCanvaで作りましたがBrackで書けるようになると嬉しい ・Marp、結局はHTMLの暴力になってしまう ・単一のファイルからPDF、Playground、講義動画の出力 ・今はマークアップ言語が主流ではない、文章主体の作業を効率化したい
まとめ 10 ・9月末にv0.1.0を出す予定です!興味があれば動かしてみていただけると嬉しいです ・Brackが使えそうな分野があればぜひ教えてください