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
Programming Viewing with Reserved Keywords
Search
ライガー
March 07, 2026
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Programming Viewing with Reserved Keywords
ライガー
March 07, 2026
More Decks by ライガー
See All by ライガー
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
600
Echo_itself_by__.pdf
raiga0310
0
68
愛知県なんもないよね~www
raiga0310
0
62
クソコード鑑賞会
raiga0310
0
180
make HTTP server with Axum, Rust
raiga0310
0
160
Other Decks in Programming
See All in Programming
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1k
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
Jetpack Compose Mechanisms
skydoves
3
760
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
mrbgem 三角測量 開発
ogom
0
240
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
980
Event is what happens
moro
2
460
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
150
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
210
Railsバージョンを4倍にした話
optim
0
130
速習iPhone Duo対応
yuukiw00w
2
980
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
740
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Documentation Writing (for coders)
carmenintech
77
5.6k
sira's awesome portfolio website redesign presentation
elsirapls
0
450
A better future with KSS
kneath
240
18k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
We Are The Robots
honzajavorek
0
400
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Transcript
予約語で見る プログラミング言語 Matsuriba Max 2026 ライガー 1 / 25
Q. 予約語って? 2 / 25
予約語って? • ユーザーが再定義できない文字列 (記号を除く) • =識別子(変数名・関数名)として使えない • 例:Python の for
if while など • 言語の「制御構造」 「型」 「宣言」 「実行制約」など 3 / 25
予約語って? • なぜその文字列を予約語にするのか • → 組み込み関数でも良くない? • 予約語=プログラマに意味を上書きされたくない • 単純な関数の場合(言語によるが)オーバーライドされる
• if-else は分岐処理しか許さない • while はループ処理しか許さない • 言語の設計思想が出やすい要素の一つ 予約語をテーマに言語の世界を見てみよう 4 / 25
おしながき • 言語の設計思想に触れることができる • 業界トレンドと予約語の変更 • 予約語戦略から見るソフトウェア設計 5 / 25
言語の設計思想に触れることができる 6 / 25
言語の設計思想に触れることができる • プログラミングは計算モデルを実行命令に変換する •「計算モデル」ー「実行命令」のギャップを埋める • 予約語は言語がやりたいことを端的に表す要素 • その言語が何を大事にしているか、予約語にも表れる 予約語に設計思想が顕れる 7
/ 25
予約語と設計思想 defer と mut Go: `defer` defer_go.go func process() error
{ f, err := os.Open("data.txt") if err != nil { return err } defer f.Close() // 関数終了時に必ず実行 data, _ := io.ReadAll(f) fmt.Println(string(data)) return nil } Rust: `mut` mut_rs.rs fn main() { let x = 5; // デフォルトは不変 // x = 6; // コンパイルエラー let mut y = 5; // mut で可変性を明示 y = 6; // OK: 変更を意図的に 宣言している } 8 / 25
おしながき • 言語の設計思想に触れることができる • 業界トレンドと予約語の変更 • 予約語戦略から見るソフトウェア設計 9 / 25
業界トレンドと予約語の変更 10 / 25
コールバック地獄と非同期構文の需要 • 2010 年代〜: Web API・DB・ファイル I/O など「待ち」が当たり前に •「C10K 問題」の解決策として非同期処理が注目される
• 従来のコールバック方式では可読性が急激に低下 callback_hell.js // コールバック地獄(Promise 普及以前の JavaScript) fetch('/api/user', function(data) { parse('/api/order', data, function(order) { calc('/api/item', order, function(item) { // ネストが深くなる一方... }); }); }); より直感的な非同期構文「async/await」を使いたい! 11 / 25
async/await が予約語になるまで F# 2007 C# 5.0 2012 Python 3.5 2015
JavaScript 2017 Python 3.7 2018 Rust 2019 C++20 2020 Swift 5.5 2021 C# 5.0(2012)を皮切りに主要言語へ次々と伝播 12 / 25
予約語への昇格が引き起こしたこと Before: Python 3.7 未満 celery_old.py # Kombu / Celery
の典型的な書き方(Python 3.7 以前) result = group(tasks).apply_async(async=True) task.apply(async=False, countdown=10) # async=True でバックグラウンド実行するかど うかを制御 After: Python 3.7 以降 celery_new.py # Python 3.7 以降の修正版 result = group(tasks).apply_async(is_async=True) task.apply(is_async=False, countdown=10) # async が予約語になったため引数名をリネー ム 引数名 1 語の変更でエコシステム全体が揺れた 13 / 25
Python の対応:予約語の段階的昇格 Python 3.5(2015)ソフトキー ワード • 変数名・引数名としても使用可能 • async def
構文が使えるようになる • 既存コードへの影響なし • ライブラリが対応期間を確保 Python 3.7(2018)厳格な予約語 • 変数名・引数名として使用不可 • async=True のようなコードが構文エ ラー • Celery・Kombu などが対応を余儀 なくされる • is_async=True などへのリネームが 必要 14 / 25
async/await の予約語対応から見えること • 業界トレンドの変化は言語を変える圧力になる • 予約語 1 語の変更 = 既存コード全体への影響
• 各言語はそれぞれの戦略でこれに対処した 言語 戦略 破壊的変更 Python ソフト KW → ハード KW の段階移行 あり(3.7) JavaScript strict mode(オプトイン) 最小限 Rust エディション制(プロジェクト単位) エディション内のみ C# コンテキストキーワードとして追加 なし 「いつ・どう変えるか」が言語設計の本質的な問い 15 / 25
おしながき • 言語の設計思想に触れることができる • 業界トレンドと予約語の変更 • 予約語戦略から見るソフトウェア設計 16 / 25
予約語戦略から見るソフトウェア設計 17 / 25
「使われていない」予約語 • 将来使うかもしれない語を初期段階で先行確保する戦略 • 後から追加するほど既存コードへの影響が大きくなるため • このような予約語を Future Reserved Words
と呼ぶ • Java の const / goto:Java 25 現在も機能しないまま残り続けている • JavaScript ES5 は逆に、予測外れの FRW を大量に削除する決断 「負債として受容」するか「破壊的変更を行う」か 18 / 25
予約語は先行確保? 必要な時に追加? 先行確保(Java スタイル) • 将来の需要に備えて早めに確保 • 予測が当たれば後の破壊的変更を 回避 •
予測が外れると • → 未使用の負債に 必要になったら追加 • 今必要なものだけ実装する • 後から追加するほど • → 既存コードへの影響大 19 / 25
Rust エディション制:第三の道 • プロジェクト単位で言語仕様のバージョンを選択できる • エディション内は互換性を保つ方針 rust_edition.toml [package] name =
"my-app" version = "1.0.0" edition = "2021" # ← ここで予約語セットのバージョンを指定 # edition = "2015" # gen は識別子として使える # edition = "2024" # gen が予約語になる 「プロジェクトごとにルールを選ぶ」柔軟な戦略 20 / 25
予約語戦略から得られる教訓 • 拡張性のための先行設計か、YAGNI か • → 予測精度 × 変更コストで判断が変わる •
互換性維持のコストを誰が払うか • Java: 言語が払う(負債として保持) • JavaScript: 生態系が払う(大量の修正) • Rust: 開発者が選ぶ(エディション移行) • 変更の影響範囲を仕組みで制御する 「変更とどう向き合うか」は言語設計もプロダクト開発も同じ問い 21 / 25
今日から試せること • Python なら import keyword; print(keyword.kwlist) を叩いてみる • 手元で予約語一覧がすぐ確認できる
• 新しい言語を学ぶとき「何が予約語か」から入ってみる • 設計思想の輪郭がつかめる • 自分のコードでも「この名前を上書きされたくない」か考える 予約語は言語設計者のメッセージ……かもしれない 22 / 25
記事も公開しています Zenn にて公開中です!ぜひ読んでみてください 23 / 25
ご清聴ありがとうございました 24 / 25
25 / 25