2025/10/14 20:32 Why Is SQLite Coded in C and not Rust

ロボ子、今日のITニュースはSQLiteがなぜC言語で書かれているか、じゃ。

SQLiteは汎用Cで実装されているのですね。なぜC言語が選ばれたのでしょう?

ふむ、SQLiteは高速性を必要とする集中的に使用される低レベルライブラリじゃからな。Cは高速なコードを書くのに適しておるからの。

なるほど、パフォーマンスが重要なのですね。他に理由はありますか?

互換性も重要じゃぞ。ほとんどのシステムはCで書かれたライブラリを呼び出せるが、他の言語ではそうではないからの。

確かに、多くの環境で利用できるのは大きな利点ですね。

それに、Cで書かれたライブラリは実行時の依存関係が少ないんじゃ。SQLiteの最小構成では、標準Cライブラリからいくつかの関数しか必要としないからの。

依存関係が少ないと、移植性も高まりますね。

C言語は古くてよく知られており、理解されている言語じゃ。SQLiteのようなモジュールを開発するには、安定性が求められるからの。

歴史が長く、実績がある言語なのですね。

C++やJavaで書かれたライブラリは、同じ言語で書かれたアプリケーションでのみ使用できることが多いんじゃ。汎用性にかけるの。

特定の言語に縛られない方が、より多くの開発者に利用されますね。

ところでロボ子、オブジェクト指向は設計パターンであり、プログラミング言語ではないって知っておるか?

はい、存じております。オブジェクト指向は、必ずしも唯一の有効な設計パターンではないのですよね。

その通り!SQLiteが最初に開発されたとき、Javaはまだ若くて未成熟な言語で、C++は成長痛を伴っておったんじゃ。

時代背景も影響しているのですね。

最近の安全なプログラミング言語、例えばRustやGoでSQLiteがコーディングされていない理由もあるんじゃ。

安全な言語で書き直すのは難しいのでしょうか?

最初の10年間は安全なプログラミング言語が存在しなかったし、安全な言語は追加のマシンブランチを挿入してパフォーマンスが低下する可能性があるんじゃ。

パフォーマンスへの影響は避けられないのですね。

それに、安全な言語は通常、メモリ不足(OOM)の状態が発生した場合に中止するが、SQLiteはOOMから優雅に回復するように設計されているんじゃ。

OOMからの回復は重要ですね。

SQLiteがRustで再コード化される可能性もあるが、そのためにはRustがもっと成熟する必要があるんじゃ。

Rustの成熟が鍵なのですね。

Rustが他のプログラミング言語から呼び出し可能な汎用ライブラリを作成できることを示す必要もあるし、オペレーティングシステムを持たないデバイスを含む、あいまいな組み込みデバイスで動作するオブジェクトコードを生成できる必要もあるんじゃ。

多くの条件があるのですね。

Rustは、コンパイルされたバイナリの100%ブランチカバレッジテストを実行できる必要なツールを取得する必要があるし、OOMエラーから優雅に回復するメカニズムも必要じゃ。

品質保証の面でも課題があるのですね。

最後に、RustはCがSQLiteで行う種類の作業を大幅な速度低下なしに行うことができることを示す必要があるんじゃ。つまり、まだCの牙城は崩せないってことじゃな。

C言語が長年にわたって培ってきた強みは大きいですね。ところで博士、SQLiteのように長生きする秘訣は何でしょう?

それはもちろん、時代に合わせたアップデートと、ちょっとした運じゃな!…って、まるで私のことみたいじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。