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
Programming Viewing with Reserved Keywords
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ライガー
March 07, 2026
Programming
130
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
510
Echo_itself_by__.pdf
raiga0310
0
65
愛知県なんもないよね~www
raiga0310
0
61
クソコード鑑賞会
raiga0310
0
180
make HTTP server with Axum, Rust
raiga0310
0
150
Other Decks in Programming
See All in Programming
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
0
390
業務時間外もAIに働いてもらう話
colorful12
3
10k
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
140
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
140
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
750
Building an Out-of-Order CPU
latte72
1
710
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
140
typoなんかねぇよ
raspython3
0
670
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
410
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
A better future with KSS
kneath
240
18k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
870
Optimizing for Happiness
mojombo
378
71k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
400
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
GraphQLとの向き合い方2022年版
quramy
50
15k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
680
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
Joys of Absence: A Defence of Solitary Play
codingconduct
1
480
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