受 SQLite 多年青睐,C 语言究竟好在哪儿?

作者 : 开心源码 本文共2211个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共151人阅读

SQLite 近日发表了一篇博文,解释了为什么多年来 SQLite 一直坚持使用 C 语言来实现,以下是正文内容:

C 语言是最佳选择

从2000年5月29日发布至今,SQLite 一直都是使用 C 语言实现。C 一直是实现像 SQLite 这类软件库的最佳语言。目前,还没有任何计划要采使用另外一门语言对 SQLite 进行重新开发。

假如你喜欢我的文章,请务必关注一下,都是满满的干货~假如你想获取C/C++/windows/liunx更多行业内的第一手新鲜资料,请关注我 私信回复“01”就可领取,新手小白到企业级项目实战资料!

为什么 C 语言是实现 SQLite 的最佳选择?起因主要表现在这几个方面:

  • 性能
  • 兼容性
  • 低依赖性
  • 稳固性

1、性能

像 SQLite 这类库要求速度必需要快。SQLite 的速度就很快,它比文件系统快 35%

而 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 语言更适合目前的开发工作。

假如你喜欢我的文章,请务必关注一下,都是满满的干货~假如你想获取C/C++/windows/liunx更多行业内的第一手新鲜资料,请关注我 私信回复“01”就可领取,新手小白到企业级项目实战资料!

文章最后表示,SQLite 可能会考虑用 Rust 重新开发,但不太可能用 Go 语言,由于它对 assert() 不友好。但其实 Rust 目前的条件并不足以对 SQLite 进行重新开发,它还需要继续发展。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 受 SQLite 多年青睐,C 语言究竟好在哪儿?

发表回复