言語設計をやめて、ライブラリを書くべきだ
100日前原文(lbstanza.org)
概要
- プログラミング言語の違いよりも、ライブラリの充実度が生産性に直結
- Ruby on Railsのようなフレームワークは、言語特有の機能を活用している
- 言語設計は、どんなライブラリが書けるかを決定
- ライブラリの限界は言語の限界でもある
- 理想の言語は、ライブラリ作者が必要な拡張を簡単に実現できるもの
言語設計をやめて、ライブラリを書こう
- 多くのプログラミング言語は基本構文や機能が似通う傾向
- 一般的なプログラマにとって、生産性を高めるのは使いやすいライブラリの存在
- 例:Ruby on Railsによって、非専門家でも本格的なWebアプリ開発が可能に
- 言語自体へのこだわりよりも、Railsのようなフレームワークに魅力を感じる意見が多い
- 専門的な言語機能(例:ファーストクラス関数やコルーチン)は、多くのユーザーが意識せずに恩恵を受けている
なぜRailsのようなフレームワークは他言語で再現できないのか
- Ruby on Railsは、Ruby特有のメタプログラミングやランタイム評価機能を多用
- JavaやCなど、他言語のメタプログラミング機能の制限により、同様のフレームワーク構築が困難
- 言語の設計がライブラリの表現力や使いやすさを直接左右
- 例:C言語のライブラリは関数群中心、JavaのGUIライブラリはハンドラークラスの作成が必須
インタラクティブなソフトウェアとライブラリ設計
- 初期のソフトウェアはバッチ処理が主流で、関数の再利用で十分
- 近年はインタラクティブなアプリケーションが主流となり、拡張性の高いライブラリが求められる
- JavaやC++はサブクラス化による拡張を提供、これが「フレームワーク」という新しい概念を生んだ
言語設計の動機とライブラリの限界
- 新しい言語開発の動機は、既存言語で望むライブラリが作れないことへの不満が多い
- 例:Javaでゲームライブラリを作ろうとしたが、コルーチンや継続の欠如で限界を感じた経験
- Schemeのような言語は継続をサポートし、より直感的なゲームロジック記述が可能
- しかし、型システムの拡張などはライブラリでは実現困難。主流言語で型システム自体をライブラリで拡張できるものはない
言語の本質的な役割
- 汎用プログラミング言語の目的は、強力で使いやすいライブラリの実現を可能にすること
- 言語が強力であればあるほど、ライブラリの表現力・使い勝手が向上
- どんなライブラリが書けて、どんなライブラリが書けないかが言語の個性や限界を決定
- 例:Stanzaはオプション型システムやマルチメソッド型オブジェクトシステムなどを提供
- しかし、オブジェクトシステム自体をライブラリで差し替えることはできない
これからの言語設計とライブラリ
- 未来の理想的な言語は、ライブラリ作者が型システムやオブジェクトシステムを自由に拡張可能なもの
- RacketやShenは型システム拡張をサポート、メタオブジェクトプロトコルの研究も進行中
- ライブラリの可能性と限界が、言語設計の主戦場となる
結論
- 強力なライブラリは、多くの言語設計上の工夫や研究の成果
- 使いやすいライブラリの背後には、言語機能の選択と設計思想が存在
- もしライブラリの優雅さに感銘を受けたら、どの言語機能が使われているかを調べてみる価値
- サブtleな言語仕様に興味がなければ、そのままライブラリの便利さを享受しても問題なし