金融网站建设报价方案,一键登录qq空间,网站建设中 动画,wordpress 外链背景图SQLite 近日发表了一篇博文#xff0c;解释了为什么多年来 SQLite 一直坚持用 C 语言来实现#xff0c;以下是正文内容#xff1a; C 语言是最佳选择 从2000年5月29日发布至今#xff0c;SQLite 一直都是用 C 语言实现。C 一直是实现像 SQLite 这类软件库的最佳语言。目前解释了为什么多年来 SQLite 一直坚持用 C 语言来实现以下是正文内容 C 语言是最佳选择 从2000年5月29日发布至今SQLite 一直都是用 C 语言实现。C 一直是实现像 SQLite 这类软件库的最佳语言。目前还没有任何计划要采用另外一门语言对 SQLite 进行重新开发。 为什么 C 语言是实现 SQLite 的最佳选择原因主要体现在这几个方面 性能兼容性低依赖性稳定性1、性能 像 SQLite 这类库要求速度必须要快。SQLite 的速度就很快它比文件系统快 35%详情可以参考这两个示例Internal Versus External BLOBs 和 35% Faster Than The Filesystem。 而 C 语言就能实现快速编写代码。C 语言通常被描述为“可移植性的汇编语言”。它使开发人员能够尽可能靠近底层硬件进行编码同时仍然可以跨平台保持可移植性。 平常我们可能会看到有人描述某种语言“像 C 语言一样快”却不会看到有人说作为通用目的编程时会有一门语言“比 C 语言快”因为这种语言真的不存在。 2、兼容性 几乎所有系统都能调用 C 语言编写的库但其他语言就不尽然。例如用 Java 编写的 Android 应用能够调用 SQLite通过适配器。 如果用 Java 编写 SQLite那么对 Android 来说可能会更方便因为这会使接口更简单。但在 iPhone 上应用程序是用 Objective-C 或 Swift 编写的它们都不能调用用 Java 编写的库。 因此如果用 Java 编写SQLite 将无法在 iPhone 上使用。 3、低依赖性 用 C 语言编写的库对运行时没有很强的依赖。SQLite 的最低配置也只要求 C 库中的这些方法 memcmp()memcpy()memmove()memset()strcmp()strlen()strncmp()在更完整的构建中SQLite 也使用诸如 malloc() 和 free() 之类的库例程以及用于打开读取写入和关闭文件的操作系统接口。 但即便如此依赖的数量也很少。 4、稳定性 C 语言易于理解契合了 SQLite 的要求适合 SQLite 的开发。 为什么 SQLite 不使用面向对象的语言 开发人员可能无法想象用“非面向对象”来开发一个像 SQLite 这样复杂的系统会是什么样子。所以 SQLite 为什么不使用 C 或者 Java 来开发呢 1、用 C 或 Java 编写的库通常只能由以相同语言编写的应用程序使用。 使用 Haskell 或 Java 编写的应用程序很难调用用 C 编写的库。 另一方面用 C 语言编写的库可以从任何编程语言调用。 2、面向对象是设计模式而不是编程语言。 你可以使用任何所需语言包括汇编语言进行面向对象编程。 某些语言例如C 或 Java可以使面向对象更容易但你仍然可以用像 C 这样的语言进行面向对象的编程。 3、面向对象不是唯一有效的设计模式。对象通常是分解问题的好方法。 但不是唯一的方法也不总是分解问题的最佳方法。 有时好的旧程序代码更容易编写更易于维护和理解并且比面向对象的代码更快。 4、SQLite 进行开发时Java 还不是一门成熟的语言C 会成熟一点但当时要找到两种能以 相同方式工作的 C 编译器比较困难。相比之下C 语言是个不错的选择。虽然这种情况现在有所改善但为此对 SQLite 重新开发并没有什么好处。 为什么 SQLite 不使用”安全”语言编写 使用“安全”语言不易发生内存泄露、数组溢出等的安全问题。最近许多人好像对 Rust 和 Go 这样的“安全”语言感兴趣。但 SQLite 为什么不使用呢 1、SQLite 出现后的 10 年时间里所谓的“安全”语言还不存在。虽然 SQLite 可以用 Rust 或者 Go 重新编写但这样可能会引入更多难以修复的 Bug进而会影响编码速度。 2、“安全”编程语言解决简单的问题像内存泄露、数组溢出等。在解决 SQL 计算结果这类的问题上并不如 C 语言好用。 3、“安全”语言可防止安全漏洞但 SQLite 并非一个对安全敏感的库。如果应用运行了不受信任的 SQL那它可能已经存在更大的安全问题而这是“安全”语言无法修复的问题。 4、一些“安全”语言如 Go 语言不喜欢使用 assert()但这是保持 SQLite 可维护性的重要前提。 5、“安全”语言会插入额外的机器分支来执行其他操作。但在正确的代码中这些分支并不会被采用。所以机器代码不能 100% 被测试到可这恰恰是 SQLite 质量检测的重要组成部分。 6、“安全”语言会在内存不足OOM时请求终止而 SQLite 的设计是遇到 OOM 时能重新恢复。目前还不知道如何利用“安全”语言实现这一点。 7、现有的“安全”语言都比较新SQLite 开发员对它们的出现表示赞赏但依然认为 C 语言更适合目前的开发工作。 文章最后表示SQLite 可能会考虑使用 Rust 重新开发但不太可能使用 Go 语言因为它对 assert() 不友好。但其实 Rust 目前的条件并不足以对 SQLite 进行重新开发它还需要继续发展