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
37
情報科学若手の会 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
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
170
Wasmで拡張できる軽量マークアップ言語 Brack
momeemt
0
78
❄️ NixOS/nixpkgsにSATySFiサポートを実装する
momeemt
2
220
Intel系FPGA上へのRISC-Vプロセッサの実装
momeemt
0
130
Nixでつくるdotfiles
momeemt
1
39
情報特別演習I 最終発表「理工学の紙書籍を用いた学習の効率を向上させるインタフェース」
momeemt
0
32
SATySFi Conf 2023「SATySFiを使って学類新歓冊子を発行した」
momeemt
0
23
主専攻実験(深層学習を用いたCG・画像処理)最終成果報告
momeemt
0
33
情報科学類新歓2023 履修の組み方
momeemt
0
120
Other Decks in Technology
See All in Technology
A2Aのクライアントを自作する
rynsuke
1
170
Amazon Bedrockで実現する 新たな学習体験
kzkmaeda
2
550
Кто отправит outbox? Валентин Удальцов, автор канала Пых
lamodatech
0
340
Navigation3でViewModelにデータを渡す方法
mikanichinose
0
220
生成AI活用の組織格差を解消する 〜ビジネス職のCursor導入が開発効率に与えた好循環〜 / Closing the Organizational Gap in AI Adoption
upamune
4
2.6k
製造業からパッケージ製品まで、あらゆる領域をカバー!生成AIを利用したテストシナリオ生成 / 20250627 Suguru Ishii
shift_evolve
PRO
1
140
PHPでWebブラウザのレンダリングエンジンを実装する
dip_tech
PRO
0
200
生成AIでwebアプリケーションを作ってみた
tajimon
2
150
Claude Code Actionを使ったコード品質改善の取り組み
potix2
PRO
6
2.3k
AWS テクニカルサポートとエンドカスタマーの中間地点から見えるより良いサポートの活用方法
kazzpapa3
2
550
2025-06-26_Lightning_Talk_for_Lightning_Talks
_hashimo2
2
100
Understanding_Thread_Tuning_for_Inference_Servers_of_Deep_Models.pdf
lycorptech_jp
PRO
0
120
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
A designer walks into a library…
pauljervisheath
207
24k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
330
24k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
800
Automating Front-end Workflow
addyosmani
1370
200k
Docker and Python
trallard
44
3.4k
Embracing the Ebb and Flow
colly
86
4.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
For a Future-Friendly Web
brad_frost
179
9.8k
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が使えそうな分野があればぜひ教えてください