Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Emela - AI 時代に,なぜプログラミング言語を作るのか
Search
Allianaab2m
November 08, 2026
60
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Emela - AI 時代に,なぜプログラミング言語を作るのか
2026/11/09 言語処理系集会[0] での発表資料
https://vrc-langdev.connpass.com/event/410417/
Allianaab2m
November 08, 2026
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
60k
Building Adaptive Systems
keathley
44
3.3k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
390
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
510
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
370
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
600
How to Talk to Developers About Accessibility
jct
2
610
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
670
Designing Powerful Visuals for Engaging Learning
tmiket
1
650
Transcript
Emela AI 時代に,なぜプログラミング⾔語を作るのか ありあな(@Alliana_VRC) github.com/emela-lang/emela
⾃⼰紹介 ありあな(Alliana) アイコン • 実務で TypeScript と Effect-TS を書いていた •
今は Kotlin と Go を書いている • 4ヶ⽉ほど前から Emela を作っている • ⽣みの親は Python, 育ての親は TypeScript • 動的型付け⾔語から開発者を守る党 党⾸(?) • X: @Alliana_VRC GitHub: Allianaab2m 2
Emela という名前 Emerald を⽇本語で発⾳したときの⾳から Ruby のような,キレイそうな宝⽯の名前に 発⾳を寄せた -la の綴り 関数
Lambda や Scala に思いを馳せている ロゴを作ってもらった 規則的な⼋⾓形はコンピュータ,曲線の⼿形は⼈間. ⼆つを⼀つのエメラルドに重ねている ←Created by @skytomo221 ありがとう!! 3
None
Mission 処理を記述する上での, AI と⼈間の共通語になる
可読性と決定論のどちらを取るか 機械・AI ⼈間 決定論的に寄せる Emela:共通語 可読性に寄せる 可読性が落ち,⼈間が仕様を 追えなくなる. 本来読みたい部分が埋もれる ⼈間が書いた仕様を
AI が 難なくコードに起こせる AI が書いたコードを⼈間が 難なく読める 解釈に幅が出るので 品質の担保が難しい. 正しさを決定論的に 検証できない プログラミングは,⾏いたい処理に対して どういう⼿続きをしたいかを明確に記述すること 6
⾔語は LLM に対する最⼤のハーネス 投機的な⽣成を投機的に底上げする 決定論的に品質を担保する • プロンプトの⼯夫 • 型検査・コンパイラ・Linter •
エージェントの⼯夫 • 何度⾛らせても同じ結果を返す • 同じ⼊⼒でも結果が変わりうる • LLM の間違いを指摘できる • その間違いを機械的に修正できる 今最も進化すべきなのは,プログラミング⾔語・コンパイラ・Linter 7
失敗しうる処理は、コンパイラに保証させよう async function greeting(id: number): Promise<string> 何で失敗する? 何に依存する? どうテストする? NotFound?
DB エラー? 型にはその情報が出てこない DB? HTTP? ログ? 実装を読まないと分からない モジュールごと モックするしかない 8
エラーも副作⽤も,⼀つの仕組みで扱いたい 手段 エラー 副作用・依存 差し替え つらいところ 例外 △ × ×
throws の宣言が冗長になる Result / Either ◦ × × 伝播を手で書くことになる DI コンテナ × △ ◦ 依存が型に出ず,実行時に分かる 引数で渡す × ◦ ◦ 引数のバケツリレー モナド変換子 ◦ ◦ ◦ 合成が重い,初学者に厳しい Effect System ◦ ◦ ◦ 言語側の支援が要る エラー・副作⽤・DI を推論つきで⼀つの仕組みで扱えるのがエフェクトシステム 9
何をするかと,どう実装するかを分けて書ける handler:本番 DB に問い合わせる SQL を使うとか ⼿続き(関数) greeting: ユーザーを探して 挨拶する
use effect Users 何をするか: find(id) は User を返し ,NotFound で失敗しう る with handler:開発 モックデータを返す handler:テスト 常に NotFound とかの 異常系をすぐに作れる ⼈間が読みたい⼿続きと,DB や HTTP といった環境の差異を分離できる effect = interface + 型に残る依存 + コンパイラによる注⼊の検査 10
ライブラリレベルのエフェクトシステムはつらい TypeScript + Effect-TS class Users extends Context.Tag("Users")< Users, {
readonly find: (id: number) => Effect.Effect<User, NotFound>; } >() {} const greeting = (id: number) => Effect.gen(function* () { if (id < 0) return yield* Effect.fail( new Invalid({ reason: "negative id" })); const users = yield* Users; const user = yield* users.find(id); return `Hello, ${user.name}!`; }); 実務で使って良かったこと • 型によるコーディング⽀援 • LLM のハーネスとして働く つらかったこと • Effect.gen や yield* など, 処理と関係ない記述が多い 11
Emela: エフェクトシステムを⾔語機能でサポート Emela effect Users { fn find(id: Int) ->
User fails NotFound } # fails NotFound | Invalid と uses Users を推論 fn greeting(id: Int) { if id < 0 { fail Invalid(reason: "negative id") } user = (use Users).find(id) "Hello, #{user.name}!" } # NotFound だけ処理し、Invalid は伝播する fn greeting_or_guest(id: Int) { greeting(id) escape { NotFound(_) -> "Hello, guest!" } } fails:起こりうるエラー use:使う副作⽤ 関数の型としてエラーと 副作⽤を持っている状態 ←エラーは部分的に 処理ができる 12
テストは handler を差し替える 本番・開発⽤ handler SampleUsers: Users { fn find(id)
{ id match { 1 -> User(id: 1, name: "alice") _ -> fail NotFound(id:) } } } テスト handler NoUsers: Users { fn find(id) { fail NotFound(id:) } } @test fn guest_greeting() { with NoUsers { assert greeting_or_guest(1) == "Hello, guest!" } } with で包んだ範囲だけ実装が変わる 実装するコードは effect を通じて同じインターフェースを共有できる 13
Emela と AI での開発フローイメージ LLM が書く コンパイラが検査する ⼈間がレビューする Emela は学習データに
ほぼない. 書き⽅は Skills などで渡す エラーが網羅的に ハンドリングされているか ハンドラーが すべて実装されているか 構⽂エラー: 実際,LLM は 他の⾔語と間違えて 書き間違えることが多い シグネチャに失敗と副作⽤ が出ているので読みやすい 14
現状: Web アプリケーションが書けます!! app はただの関数なのでテスト可能 @entry(Http.serve) pub fn app(request: Request)
-> Response { with Platform { route(request) } } fn route(request: Request) -> Response { (request.method, Request.segments(request)) match { (Get, ["hello", name]) -> Response.new(200, "hello, #{name}") (Post, ["echo"]) -> Response.new(200, request.body) _ -> Response.new(404, "not found") } } Std HTTP サーバーとクライアント ,FileSystem, Clock, Fiber, Map / Set emela-lang/x JSON, Redacted, Dynamic Cloudflare Workers 対応 ツールチェーン Pome: Package manager emela test / brix, fmt, lsp 15
コンパイラのアーキテクチャ図 フロントエンド syntax 字句・構⽂解析, 無損失構⽂⽊ JS codegen-js Core IR derive
展開,末尾 呼び出しのループ 化,layer の展開 組み込み C codegen-emb Flow IR resolve モジュールと名前解決 表現型つきの構造 化 ANF WASM Heap IR types 型推論,fails / use の 推論 Perceus による 参照カウント (ARC) codegen-wasm C11 codegen-c 周辺の crate:fmt(整形),driver(パイプライン),lsp,cli / pome 16
Emela が⽬指すものと⽬指さないもの ⽬指すもの ⽬指さないもの • AI と⼈間が読み書きしやすい • • トークン効率のよい構⽂
低レイヤで⾼速・省メモリ・ メモリ安全に動くこと • 構⽂上の驚きが少ない • • 型によるコーディング⽀援 マルチスレッド処理を快適に書く こと(Web アプリケーションの 遅さの多くは I/O 待ちであること が多い) メモリの都合を押し付けない代わりに,処理を素直に書けるようにするのが⽬標 (ちなみに,なぜか組み込みで Emela が動くらしいです → aoi-netai/emelino) 17
処理を記述する上での, AI と⼈間の共通語へ • エラーと副作⽤を静的に検査できる • それらを統⼀的に扱えるエフェクトを⾔語機能にする • 検査はコンパイラに任せ,⼈間は実装のレビューに集中する github.com/emela-lang/emela
· docs.emela.dev Discord: discord.emela.dev try me: `curl -fsSL https://emela.dev/install.sh | sh`