C 語言是最好的
SQLite 在 2000 年 5 月 29 日發布,並一直使用 C 語言實現。C 語言一直是實現 SQLite 這類軟體庫的最佳語言,目前還沒有計劃使用其他程式語言重新開發 SQLite。
C 語言是實現 SQLite 的最佳語言,原因有四:性能、兼容性、低依賴性、穩定性。
性能
像 SQLite 這樣低級庫速度必須要快。確實,SQLite 的速度很快,甚至比文件系統要快上 35%。
C 語言非常適合用來開發這種對速度有要求的代碼。C 語言有時被稱為「可移植的彙編語言」。它讓開發人員能夠儘可能地靠近底層硬體,同時仍然可以保持跨平臺可移植性。
有些語言聲稱自己「與 C 語言一樣快」,但卻沒有一門語言敢聲稱在作為通用目的編程時比 C 語言快,因為真的沒有。
兼容性
幾乎所有系統都能夠調用用 C 語言編寫的庫,但不一定都能調用使用其他語言實現的庫。
例如,使用 Java 開發的 Android 應用程式也能調用 SQLite(通過適配器)。如果使用 Java 開發 SQLite,那麼對 Android 來說可能會更加方便,因為接口會更簡單。但是,在 iPhone 上,應用程式是用 Objective-C 或 Swift 開發的,它們都不能調用使用 Java 編寫的庫。因此,如果使用 Java 開發,SQLite 將無法在 iPhone 上使用。
低依賴性
使用 C 語言開發的庫沒有太多運行時依賴。SQLite 的最低配置只依賴標準 C 庫的以下幾個例程:memcmp()、strcmp()、memcpy()、strlen()、memmove()、strncmp()、memset()。
對於更完整的版本,SQLite 還使用了 malloc() 和 free() 之類的例程以及用於打開、讀取、寫入和關閉文件的作業系統接口。但即便如此,依賴項的數量仍然非常少。相比之下,其他「現代」語言通常需要加載數兆字節帶有成千上萬個接口的運行時。
穩定性
C 語言陳舊乏味,是一門眾所周知且易於理解的語言。這正好契合了 SQLite 的要求。如果沒有 C 語言這樣的語言,開發一個小型、快速、可靠的資料庫引擎是很困難的。
為什麼 SQLite 不使用面向對象語言來開發?
一些程式設計師無法想像怎麼可以使用非「面向對象」的語言來開發像 SQLite 這樣的複雜系統。那麼為什麼 SQLite 沒有用 C++ 或 Java 來開發?
使用 C++ 或 Java 編寫的庫通常只能由以相同語言開發的應用程式使用。使用 Haskell 或 Java 開發的應用程式很難調用 C++ 庫。反過來,用 C 語言編寫的庫可以在其他程式語言中調用。
面向對象是一種設計模式,而不是一種程式語言。你可以使用任何語言(包括彙編語言)實現面向對象編程,只是某些語言(例如 C++ 或 Java)讓面向對象變成變得更容易而已。但你仍然可以用像 C 這樣的語言進行面向對象編程。
面向對象並不是唯一有效的設計模式。很多程式設計師被教導使用純粹的面向對象方式進行思考。對象通常是分解問題的好方法,但對象不是唯一的方法,而且不一定是分解問題的最佳方法。有時候,過程式的代碼更容易編寫,更易於維護和理解,並且比面向對象的代碼運行地更快。
最初在開發 SQLite 時,Java 還只是一門年輕而不成熟的語言。C++ 比較成熟一些,但正在經歷成長的痛苦時期,當時很難找到兩種能夠以相同方式工作的 C++ 編譯器。所以,在當時 C 語言絕對是一個更好的選擇。現在這種情況沒有那麼明顯,但現在重新開發 SQLite 幾乎沒有任何好處。
看到這裡,你是不是對「C語言」又有了一點新的認知呢~