概要
- SQLite は2000年から C言語 で実装されているデータベースライブラリ
- C言語 が選ばれている理由は 性能、互換性、依存性の低さ、安定性
- オブジェクト指向言語や「安全な」言語への移行は現状メリットが少ない
- 「安全な」言語(例:Rust)への移行には 多くの課題 が残る
- 今後も C言語 で開発が継続される予定
SQLiteがCで実装されている理由
- C言語 は 高速なコード が書ける「ポータブルなアセンブリ言語」的存在
- ほぼ全てのシステムで C言語ライブラリ を呼び出せる互換性
- 依存性が極めて低い ため、最小構成なら標準Cライブラリの数関数のみで動作
- C言語 は古くて安定しており、仕様変更による影響が小さい
- SQLite のような低レイヤーで広く使われるライブラリに最適な選択
オブジェクト指向言語で実装されていない理由
- C++やJava で書かれたライブラリは、同じ言語で書かれたアプリからしか使いにくい
- C言語 なら、ほぼ全ての言語から呼び出し可能なライブラリ構築が可能
- オブジェクト指向は設計手法であり、 C言語でも実現可能
- 問題の分解方法として「手続き型」が有利な場合も多い
- 初期開発時(2000年頃) はC++やJavaの成熟度・互換性に課題あり
「安全な」言語で実装されていない理由
-
RustやGo などの「安全な」言語はSQLite開発開始時には存在しなかった
-
移植すると 新たなバグや性能低下 のリスク
-
「安全な」言語は配列範囲チェック等のため 分岐が増え、完全なブランチテストが難しい
-
OOM(メモリ不足) 時の挙動がSQLite設計と異なることが多い
-
Rust は今後の候補になる可能性もあるが、下記課題の解決が必要
- 言語仕様の安定化
- 他言語からの呼び出し互換性
- 非OS環境・組み込み機器での動作
- 100%ブランチカバレッジの実現
- OOM時の優雅なリカバリー
- C並みの性能
-
Rustacean (Rust愛好者)は、SQLite開発者に直接提案可能
今後の方針
- C言語 による開発継続方針
- Rust への移行は慎重に検討されるが、現時点で計画なし
- 「安全な」言語の進化には期待しつつも、 信頼性と実績重視 の姿勢