概要
- プログラミング言語の違い よりも、 ライブラリの充実度 が生産性に直結
- 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な言語仕様に興味がなければ、 そのままライブラリの便利さを享受 しても問題なし