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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Mutsuha Asada
September 15, 2024
Technology
60
0
Share
情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」
Brackについての紹介
https://github.com/brack-lang/brack
Mutsuha Asada
September 15, 2024
More Decks by Mutsuha Asada
See All by Mutsuha Asada
Reproducible Containers (ASPLOS'20)
momeemt
0
430
❄️ NixCon2025に参加した
momeemt
0
460
🔨 小さなビルドシステムを作る
momeemt
4
1.3k
情報科学類で学べる専門科目38選
momeemt
0
990
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
880
Wasmで拡張できる軽量マークアップ言語 Brack
momeemt
0
580
❄️ NixOS/nixpkgsにSATySFiサポートを実装する
momeemt
2
780
Intel系FPGA上へのRISC-Vプロセッサの実装
momeemt
0
500
Nixでつくるdotfiles
momeemt
2
980
Other Decks in Technology
See All in Technology
「できない」のアウトプット 同人誌『精神を壊してからの』シリーズ出版を 通して得られたこと
comi190327
3
620
あるアーキテクチャ決定と その結果/architecture-decision-and-its-result
hanhan1978
2
540
Hooks, Filters & Now Context: Why MCPs Are the “Hooks” of the AI Era
miriamschwab
0
120
建設的な現実逃避のしかた / How to practice constructive escapism
pauli
4
290
OpenClaw初心者向けセミナー / OpenClaw Beginner Seminar
cmhiranofumio
0
360
Podcast配信で広がったアウトプットの輪~70人と音声発信してきた7年間~/outputconf_01
fortegp05
0
240
システムは「動く」だけでは 足りない - 非機能要件・分散システム・トレードオフの基礎
nwiizo
9
3.5k
ASTのGitHub CopilotとCopilot CLIの現在地をお話しします/How AST Operates GitHub Copilot and Copilot CLI
aeonpeople
1
200
制約を設計する - 非決定性との境界線 / Designing constraints
soudai
PRO
6
2.3k
解剖"React Native"
hacusk
0
120
暗黙知について一歩踏み込んで考える - 暗黙知の4タイプと暗黙考・暗黙動へ
masayamoriofficial
0
230
AWS DevOps Agent or Kiro の使いどころを考える_20260402
masakiokuda
0
190
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
330
Skip the Path - Find Your Career Trail
mkilby
1
100
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.8k
My Coaching Mixtape
mlcsv
0
94
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
120
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
160
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
790
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
170
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が使えそうな分野があればぜひ教えてください