PaNdRa(関数型プログラミング言語)
| 分類 | 関数型プログラミング言語 |
|---|---|
| 設計者 | 渡会賢一郎、M. E. Thorntonら |
| 初版 | 1987年 |
| 最新安定版 | PaNdRa 3.8.1 |
| 開発元 | 国際計算言語協議会 パンドラ部会 |
| 影響を受けた言語 | Lisp、ML、Miranda、Ariadne-S |
| 主要な用途 | 教育、分散取引、研究計算 |
| ライセンス | Pandora Academic and Industrial License |
PaNdRa(パンドラ)は、とを中核に据えたである。もともとはにの研究会で提案された用の実験系として知られ、のちに教育・金融・生体情報解析の各分野へ急速に普及した[1]。
概要[編集]
PaNdRaは、関数合成を第一原理とし、状態変化を明示的な「箱」に封じ込める設計であるとされる。特に、型推論の過程で例外の発生確率まで計算する「確率的型束縛」が有名であり、これが後年の金融系システムに重宝されたとされている[2]。
言語名は、開発初期に用いられた研究用端末の識別子「PANDORA-7」に由来するという説と、のにちなみ「箱を開けるたびに副作用が漏れる」ことを皮肉った命名だとする説がある。なお、後者は1989年の社内報にしか見当たらず、真偽は不明である[3]。
歴史[編集]
前史と誕生[編集]
PaNdRaの前史は、前半にで行われた「関数代数の機械化」計画に求められる。中心人物はで、彼はの前身組織で、紙テープ駆動の推論機に触れた経験から「計算は命令ではなく変換の連鎖であるべきだ」と主張したとされる[4]。
夏、の貸会議室で行われた第3回「形式意味論と機械翻訳の夕べ」において、初期仕様書『Pandora Core Notes』が配布された。参加者は22名であったが、そのうち実際に仕様を読んだのは7名、最後まで口を挟んだのは3名だけだったと記録されている。ここで提案された構文は、関数定義に角括弧を用いるという独特のもので、当時の編集者は「印刷所が嫌がる」と評したという[5]。
普及と企業導入[編集]
、PaNdRaは系の試験システムで採用され、1日あたり約48万件の口座照合を処理したとされる。ただし、同時に型エラーの約18%が「人間の承認待ち」に分類され、結果として事務職員の残業時間が月平均で16.4時間増えたとの指摘もある[6]。
その後、の海運会社との証券系ベンダーが相次いで採用し、PaNdRaは「止まらないが、止め方が難しい言語」として評価を得た。特に、例外処理を関数値として返す「涙滴モナド」は、導入説明会で理解された回数より誤用された回数の方が多かったとされ、現場では「濡れた関数」と呼ばれていた[7]。
標準化と分裂[編集]
にはがPaNdRaの標準化に着手したが、配列の扱いを巡って派閥が分裂した。主流派は「純粋性を守るべき」としたのに対し、実務派は「副作用のない帳票システムなど存在しない」と反論し、会議は6回連続で議事録が未承認のまま終了した[8]。
この対立の結果、PaNdRa 2系統は学術版と産業版に分岐した。学術版は証明支援系と結びついて発展し、産業版は系監査ツールとの親和性を高めたが、双方とも互いを「本来のPaNdRaではない」と呼び合う状況が長く続いた。
設計思想[編集]
PaNdRaの設計思想は、三つの箱と一つの梯子に要約されるとされる。すなわち、値を包む、失敗を包む、副作用を包むを別々に扱い、最後にという梯子でそれらをつなぐという発想である。
この設計は一見すると抽象的であるが、実装者によれば、実際には「手続き型で書くと三日かかる監査処理を、二時間で壊せる」ことが利点であったという。もっとも、初学者には厳しく、1980年代末の大学講義では、受講生38名のうち期末レポートを提出できたのは11名、構文糖衣の意図まで説明できたのは4名に過ぎなかった[9]。
また、PaNdRaは遅延評価を徹底しており、未参照の式は「まだ社会に必要とされていない値」として保留される。これは教育現場で好意的に受け止められた一方、研究室のプリンタで出力待ち行列が自然増殖する原因にもなったとされている。
言語仕様[編集]
型系と推論[編集]
PaNdRaの型系は、主型推論に加えて「副作用の気配」を推定する拡張が特徴である。型注釈がなくても多くのプログラムは動作するが、毒性の高い副作用が検出された場合、コンパイラが警告ではなく沈黙を返すことがある。この沈黙は「バグではなく配慮」と説明されていたが、現場ではしばしば恐れられた[10]。
並列実行モデル[編集]
並列実行は「星座スケジューラ」と呼ばれる仕組みで管理され、各スレッドは干渉しない限り自由に進む。研究メモによれば、このモデルはの天文同好会が貸与した星図作成法から着想を得たもので、関数同士の衝突を避けるために「同じ空に二つの星を置かない」という比喩が採用されたという[11]。
標準ライブラリ[編集]
標準ライブラリには、金融計算用の『LedgerKit』、自然言語処理用の『Sentence Loom』、および謎の状態遷移系『Garden of Null』が含まれていた。最後のものは、配布版ごとに挙動が微妙に変わるため、教育用には向くが監査には向かないとされた。なお、v2.4.0以降、Garden of Null は「観測されるまで定義されない」仕様に改訂されたとされるが、これは開発会議の議事録にしか記載がない[12]。
社会的影響[編集]
PaNdRaは、特にの大学院教育に強い影響を与えた。1990年代半ばには、情報系研究室の演習課題の約27%がPaNdRaで記述され、学生たちは「再帰で書けば採点者は優しくなる」と信じていたが、実際には逆であったとされる。
また、の一部金融機関では、PaNdRaで書かれた取引監視系が「毎朝8時17分にだけ落ちる」現象が続き、これを回避するために始業時刻を8時19分へずらした部署があったという。労務管理上は問題があったが、システム部門は「時刻を変えるのが最も安い修正」であるとして容認した[13]。
一方で、PaNdRaのコード審査文化は、後の日本語圏オープンソース界隈に「関数の意味を説明できないならコミットするな」という強い規範を残した。これにより、コメント欄が擬似的な論文査読の場になるという副作用も生じた。
批判と論争[編集]
批判の中心は、PaNdRaが理論的に美しいにもかかわらず、実務では「箱を開けるたびに箱が増える」点にあった。特にのでは、ある発表者が「PaNdRaはコードではなく思想である」と述べた直後、聴衆から「思想のわりにビルド時間が長い」と返され、議場が一時騒然となった[14]。
また、学術版PaNdRaの一部には、コンパイル成功時に稀に詩が出力される機能があり、これが「言語設計の遊び過ぎ」として批判された。開発側は「詩は副作用ではなく観測可能な美である」と反論したが、監査部門は採用しなかったという。
さらに、PaNdRa 3.2系に搭載された自動最適化器が、通貨換算ルールを学習データから誤って吸収し、フラン建ての取引だけを異常に速く処理した事件があった。原因は最適化器が「安定通貨」を「静かな通貨」と誤解したためとされるが、これは要出典とされることが多い。
脚注[編集]
関連項目[編集]
脚注
- ^ 渡会賢一郎『Pandora Core Notes』国際計算言語協議会出版局, 1987.
- ^ M. E. Thornton, Kenji Watarai. "Probabilistic Type Binding in PaNdRa" Journal of Functional Systems, Vol. 12, No. 4, pp. 201-229, 1992.
- ^ 佐伯裕子『関数型言語の箱構造』技術評論社, 1994.
- ^ A. B. Caldwell. "Lazy Evaluation and the Social Cost of Waiting" Computing and Society Review, Vol. 8, No. 2, pp. 44-61, 1995.
- ^ 国際計算言語協議会標準化委員会『PaNdRa 2.0 仕様書』第14版, 1998.
- ^ 中村和也『涙滴モナド入門』東京形式科学出版, 2001.
- ^ H. Ito, S. Bernard. "Star Scheduler for Concurrent Functional Programs" Proceedings of the 9th Symposium on Distributed Semantics, pp. 88-103, 2004.
- ^ 田辺修一『監査可能な関数系の設計』日本監査情報学会誌, 第21巻第3号, pp. 17-39, 2006.
- ^ L. S. Hartmann. "On the Garden of Null and Other Observational Plants" Functional Languages Quarterly, Vol. 15, No. 1, pp. 5-19, 2010.
- ^ 渡会賢一郎・松田彩子『PaNdRaと教育工学の異様な親和性』青土社, 2013.
- ^ N. Fitzgerald. "Why Did the Compiler Output a Poem?" The Annals of Program Poetry, Vol. 3, No. 7, pp. 70-91, 2018.
外部リンク
- PaNdRa公式アーカイブ
- 国際計算言語協議会 PaNdRa部会
- 関数箱研究ネットワーク
- PaNdRa歴史資料館
- 型推論と社会影響研究センター