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 进行重新开发,它还需要继续发展

受 SQLite 多年青睐,C 语言到底好在哪儿?相关推荐

  1. 受 SQLite 多年青睐,C 语言到底好在哪儿? 1

    SQLite 近日发表了一篇博文,解释了为什么多年来 SQLite 一直坚持用 C 语言来实现,以下是正文内容: C 语言是最佳选择 从 2000 年 5 月 29 日发布至今,SQLite 一直都是 ...

  2. iPhone到底好在哪里

    iPhone到底好在哪里 在成功的卖出1亿部"21世纪最伟大的电子产品"--iPod后,6月29日,数字教父乔布斯带着他最新一款"改变世界"的产品iPhone& ...

  3. 流程的python-《流畅的 Python》到底好在哪?

    原标题:<流畅的 Python>到底好在哪? <Fluent Python>是我最近一个月的地铁通勤读物,它的优秀不仅超出了我的预期,而且还让我开始思考这样一个问题:一本好书, ...

  4. 被吹上天的802.11ac Wave2到底好在哪?还有,Wave1哪去了?

    802.11ac Wave2到底好在哪? 在说Wave2之前,我们先要了解802.11ac是什么,它的特点是什么.IEEE 802.11ac是802.11的一个通信标准,802.11n的升级版.再具体 ...

  5. 电网计算机专业分数线,这几类大学受“国家电网”青睐,录取分数线不高,毕业就有铁饭碗...

    近年来,随着就业压力的不断增加,很多的学生在大学毕业之后,都很难找到一份合适的工作.就算是找到了比较合适的工作,也会面临着"失业"的风险,正是因为这样,一份"铁饭碗&qu ...

  6. BBR到底好在哪里?

    BBR到底好在哪里? 都说BBR好,特别是在长传场景,一试就知道,也有很多分析BBR细节的文章,但很少有在理论上详细对比BBR和传统Loss based CCA的,BBR到底好在哪里,周末例行写作,今 ...

  7. Roam Reserach 到底好在哪儿?

    题图:Photo by João Silas on Unsplash 说 Roam Research 是一款笔记应用,可能是低估它了. 疑惑 最近,我看到了一个奇怪的现象. Roam Research ...

  8. 网络推广费用浅析网站具备哪些特点能更受蜘蛛的青睐?

    网络推广费用很了解一个网站想要获得蜘蛛更多的青睐,那么就要从实际出发,让网站具备更多能使蜘蛛喜爱的点,这样才能更好地提升网站质量,让网站拥有更好地排名和权重,那么下面网络推广费用就带大家一起来了解一下 ...

  9. Python,美国顶尖大学里最受欢迎的编程入门语言

    摘要 截止到目前,Python 已经成为目前美国顶尖大学里最受欢迎的计算机编程入门语言.计算机排名前 10 的学校里,有 8 所学校(80%)使用 Python 作为编程入门语言.在计算机排名前 39 ...

最新文章

  1. 不可达的对象一定要被回收吗?
  2. HDU - 6971 K - I love max and multiply sosdp
  3. html如何制作滑块,网页制作html5实现滑块功能之type=quot;rangequot;属性-建站-建站教程-建站方法-米云建站 - 米云问答...
  4. C#LeetCode刷题-拓扑排序
  5. docker 随笔记录
  6. MessageDigest简介
  7. SqlServer 使用小技巧
  8. 现在自驾旅游吃住有没有问题?
  9. java web服务器cpu占用过高的处理 (2014-07-21 17:17:36)
  10. eclipse最新版本photon下载和安装
  11. 贝叶斯神经网络 BNN
  12. 盛迈坤电商:店铺获得流量有哪些方法
  13. 我的世界java版注册账号教程_我的世界java版官方购买教程
  14. [開發記錄] BBxM 系統建立
  15. 计算机组成与结构(Ⅰ)
  16. Photoshop 技能167个(学完它,你可以去相馆做高级设计师了)
  17. 线性和非线性方程数值解法_数值分析计算方法
  18. 为MCU在Qt上运行Doom
  19. 无领导小组讨论面试真题解析(八)—— 海上救援
  20. 黑马程序员——OC基础05—Foundation框架

热门文章

  1. 进程间通信IPC(二)(共享内存、信号、信号量)
  2. 加拿大计算机语言学,加拿大语言学专业排名
  3. php中定义css样式的好处,CSS的优点和缺点分别是什么
  4. 我历时3年才写了10余篇源码文章,但收获了100w+阅读
  5. 没想到你是这样的npm install
  6. 微服务神经元(Neural)
  7. 《Migrating to Cloud-Native Application Architectures》学习笔记之Chapter 2. Changes Needed
  8. 青海西宁市大通县非洲猪瘟疫区解除封锁
  9. Spring Data Redis与Jedis的选择(转)
  10. LAMP部署脚本--安装篇