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
47
情報科学若手の会 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
🔨 小さなビルドシステムを作る
momeemt
4
750
情報科学類で学べる専門科目38選
momeemt
0
630
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
290
Wasmで拡張できる軽量マークアップ言語 Brack
momeemt
0
120
❄️ NixOS/nixpkgsにSATySFiサポートを実装する
momeemt
2
260
Intel系FPGA上へのRISC-Vプロセッサの実装
momeemt
0
150
Nixでつくるdotfiles
momeemt
1
85
情報特別演習I 最終発表「理工学の紙書籍を用いた学習の効率を向上させるインタフェース」
momeemt
0
46
SATySFi Conf 2023「SATySFiを使って学類新歓冊子を発行した」
momeemt
0
27
Other Decks in Technology
See All in Technology
能登半島災害現場エンジニアクロストーク 【JAWS FESTA 2025 in 金沢】
ditccsugii
0
830
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
3
1.8k
AgentCon Accra: Ctrl + Alt + Assist: AI Agents Edition
bethany
0
110
スタートアップにおけるこれからの「データ整備」
shomaekawa
2
480
Node.js 2025: What's new and what's next
ruyadorno
0
330
防災デジタル分野での官民共創の取り組み (2)DIT/CCとD-CERTについて
ditccsugii
0
300
フレームワークを意識させないワークショップづくり
keigosuda
0
190
[Keynote] What do you need to know about DevEx in 2025
salaboy
0
170
これがLambdaレス時代のChatOpsだ!実例で学ぶAmazon Q Developerカスタムアクション活用法
iwamot
PRO
6
1.1k
Wasmのエコシステムを使った ツール作成方法
askua
0
170
いまからでも遅くない!SSL/TLS証明書超入門(It's not too late to start! SSL/TLS Certificates: The Absolute Beginner's Guide)
norimuraz
0
240
『OCI で学ぶクラウドネイティブ 実践 × 理論ガイド』 書籍概要
oracle4engineer
PRO
3
220
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
470k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Navigating Team Friction
lara
190
15k
How GitHub (no longer) Works
holman
315
140k
Docker and Python
trallard
46
3.6k
The Cost Of JavaScript in 2023
addyosmani
55
9k
Balancing Empowerment & Direction
lara
4
690
Optimizing for Happiness
mojombo
379
70k
Making Projects Easy
brettharned
120
6.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
A better future with KSS
kneath
239
18k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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が使えそうな分野があればぜひ教えてください