Kirara(プログラミング言語)
| 系統 | 静的型付け+参照透明性志向 |
|---|---|
| 設計理念 | 読みやすさ優先(ただし最適化は容赦しない) |
| 開発開始 | (大学共同研究として開始) |
| 実行方式 | JIT兼インタプリタ(方式は実装依存) |
| 代表的機能 | 遅延確定最適化、パターン・スライサ、型付き文法補完 |
| 影響領域 | 教育、競技プログラミング、組込み補助 |
| 派生 | Kirara/Kernel、Kirara-Silk、Kirara-Lint |
| ライセンス | 研究利用は無償、商用は「貢献指数」方式 |
Kirara(きらら)は、発の高水準プログラミング言語である。読みやすさを重視しつつ、実行速度は「遅延確定最適化」により確保されるとされる[1]。学術コミュニティでは「紙のように軽いコード」としても知られている[2]。
概要[編集]
は、プログラムの意図を短い語彙と文法規則に圧縮することを目的としたプログラミング言語である。とくに「実行前にできるだけ確定させ、残りは実行時に確定させる」設計思想が採られたとされる[3]。
言語仕様は、まずを土台として、開発体験の改善のために対話的な文法補完機構を組み込む形で整備された。なお、この補完機構は後述する大学共同研究の「提出締切が短いほど賢くなる」統計モデルから派生したと説明される[4]。
または、エラーメッセージが“学習教材”として機能することでも知られている。誤り検出時には、誤った構文を直す例が3通り提示され、さらに「過去に同型のミスをした人数」を推定して注意文の強さが変化する仕様が採られたとされる[5]。
歴史[編集]
誕生:神楽坂の会議室で決まった「軽さの税」[編集]
、の小規模共同研究室で、学習用コンパイラの負荷を下げるためのプロジェクトが立ち上げられた。中心人物は、当時の非常勤講師であったと、研究監査役として参加していたのであるとされる[6]。
当初は単に「軽いコンパイラ」を目標にしていたが、議論の末に「軽さには税がかかる」という比喩が仕様に取り込まれた。すなわち、軽量化の代償として、文法の曖昧さを一定割合(当時の提案では)だけ“遅延確定”へ回す、という折衷案が採択されたとされる[7]。
なお会議の議事録は、なぜかの老舗甘味処で配布された「祝儀袋サイズの仕様書」に印刷され、以後、言語設計の細部が“紙幅”を基準に調整されていったと語られる。具体的には、エラーメッセージの折り返し幅が実測でに固定された時期があったという[8]。
発展:遅延確定最適化と、競技勢が勝手に作った型体系[編集]
頃からは教育用途の試作に広がった。ところが、競技プログラミング界隈が独自に最適化パターンを発見し、「遅延確定最適化」の効果が“特定の書き方にだけ偏っている”ことが問題視された。
そこで所属のは、競技者が勝手にまとめた暫定型体系を吸収し、言語仕様を“学習者の書き方に合わせて進化する”方向へ転換したとされる[9]。このとき導入されたのが、パターンマッチにおける「スライサ(区間指定)」機構であり、誤った一致をした場合は範囲のどこがずれたかが自動で視覚化されるようになったという。
一方で、最適化の発動条件が複雑になりすぎたとの指摘も出た。実装によっては、ループの推定回数が未満のときだけ“確定を早める”など、妙に数値が限定される挙動が出て、学習者を困惑させたと記録されている[10]。ただし当時の開発チームは「困惑は学習の燃料」として、挙動を隠蔽しなかったとされる[11]。
社会への波及:自治体の窓口業務が“型”を要求し始めた日[編集]
になると、の一部自治体で、窓口業務の問い合わせ処理をで記述する試みが広がった。理由は単純で、問い合わせの分類が型に近い構造を持っていたためであると説明される[12]。
ただし導入は順調ではなかった。市民からは「間違える余地が少なすぎる」との声が上がり、さらに“確定が遅い”ケースでは返答が最短でになるはずが、実際にはになっていたことがSNSで話題になったという[13]。開発者は「秒は丸め誤差である」と主張したが、住民は“言語が気分で小数点を選んでいる”と解釈したとされる。
この時期、を教育用に採用する学校が増え、型の読み書きが一種の市民リテラシーとして扱われるようになった。結果として、プログラマ以外の担当者が、入力フォームの文言を“型のように”修正する行動が観測されたと報告されている[14]。
仕様と特徴[編集]
の文法は、短い記号と日本語風のキーワードの組合せで構成されると説明されることが多い。ただし教育用テンプレートでは表記が日本語寄りにされ、正式仕様では英字キーワードへ置換されるため、見た目の印象が実装によって揺れると指摘されている[15]。
代表的な特徴は「遅延確定最適化」である。これは、関数呼び出しの引数が完全に確定していない状態でも、型推論の一部を“先に確定”させる仕組みであるとされる[3]。また、推論が曖昧なまま実行が進む場合には、計算結果ではなく“推論の理由”がログとして保持されるため、後から原因に遡れるようになる設計だと説明される。
さらに、パターン・スライサと呼ばれる構文がある。これはデータ構造の一部を区間として指定し、処理対象を限定する発想である。たとえば文字列処理では、先頭から、末尾からのように区間を切り出すことで、曖昧一致のコストを抑える。なおこの仕様は、当時の競技者が“スライスの発明は正義”と主張したことに由来するとされる[16]。
開発体制と“国際共同調律”[編集]
の標準化は、国内の研究機関だけでなく、海外の教育技術チームとも連携して進められたとされる。とくにのが、教材を共通化するための翻訳メモリ仕様を提出し、言語仕様への反映を求めたという[17]。
その結果、言語のエラーメッセージは自然言語生成(NLG)に近い設計へ拡張された。たとえば「変数が未使用である」場合には、代替案として3種類の修正例が提示されるが、どれが選ばれるかは“学習者が過去に選びがちな修正”によって変化する[5]。この学習統計は、収集対象が“匿名のコンパイル失敗ログのみ”とされていたが、批判も生んだ(後述)。
また、開発プロセスには数値目標が導入された。「コンパイルの最初の結果提示までの時間は、平均以内」とされ、さらに95パーセンタイルでは以内と定義された時期があった[18]。この指標の妙な具体性が、後年の開発者向けWikiにおいて“聖典化”したとされる。
批判と論争[編集]
一方で、の設計は“学習のための言語”としての側面が強く、熟練者からは不満が出た。理由は、遅延確定最適化が内部で行う変換が多く、デバッグ時に「実際に実行されている式」と「ソースに書いた式」が一致しないように見えることがあるとされる[19]。
また、エラーメッセージの個別最適化が、学習者の思考パターンを推定しているように受け取られた点が問題視された。実際、ある調査では、学習者が誤る傾向を反映した警告文が平均早く出るという結果が報告されている[20]。ただし開発側は、これは「教育的な優先度の自動調整」であり、監視ではないと説明した。
さらに、自治体導入での小数点トラブルのように、細部の挙動が“感情”として語られることも多かった。言語が丸め誤差を選んでいるように見える、という指摘は、教育言語の誤解を招いたとして批判されることがある[21]。
脚注[編集]
関連項目[編集]
脚注
- ^ 渡辺精一郎『遅延確定最適化の実装指針—紙幅設計からの逆算』共立出版, 2016.
- ^ 田坂礼子『エラーメッセージは教材である:Kiraraの学習統計モデル』情報教育研究, 2015.
- ^ 中島晃太『パターン・スライサと区間推論:競技者由来の仕様統合』第6巻第1号, 2018.
- ^ Dr. Margaret A. Thornton『Pedagogical Type Systems in Modern Compilers』J. Applied Language Engineering, Vol. 12, No. 3, pp. 201-233, 2019.
- ^ 伊藤真琴『キララ方言エラー文の生成制御』言語処理学会論文集, 第32巻第2号, pp. 77-95, 2017.
- ^ Satoshi Hoshino『Kernel Variants of Kirara for Embedded Assistance』Proceedings of the Asia-Pacific Conference on Computing Education, pp. 44-60, 2020.
- ^ 北米型言語教育連盟『共通翻訳メモリ仕様書:NLGとしての注意文』技術報告書, 2016.
- ^ 佐藤涼『窓口業務における型要求の社会実装』自治体情報システム年報, 第9号, pp. 15-29, 2018.
- ^ “Kirara: A Lightweight Compiler That Teaches Back”『Somewhat Correct Computing』Vol. 1, pp. 1-9, 2014.
- ^ 松原蓮『丸め誤差が物語になるとき:教育言語の感情的解釈』計算言語学研究, 第41巻第4号, pp. 501-519, 2021.
外部リンク
- Kirara公式チューニングノート
- 神楽坂仕様書アーカイブ
- Kirara-Lint 既知の誤警告集
- 遅延確定最適化ベンチマーク掲示板
- 自治体型窓口導入事例Wiki