Hacker News 中文摘要

RSS订阅

C语言最佳 -- C Is Best

文章摘要

SQLite选择用C语言编写,主要因为C语言性能优异、兼容性强、依赖少且稳定。C语言能直接操作硬件,确保高效运行;几乎在所有平台都有编译器,便于移植;减少外部依赖,提升可靠性;语法稳定,长期兼容。虽然面向对象或"安全"语言有优势,但无法满足SQLite对性能、兼容性和稳定性的核心需求。

文章总结

为什么SQLite选择用C语言编写

SQLite自2000年5月29日诞生以来,一直采用C语言实现。C语言始终是开发SQLite这类软件库的最佳选择,目前也没有改用其他编程语言的计划。

选择C语言的主要原因包括:

  1. 性能优势
  • C语言被称为"可移植的汇编语言",能编写出接近硬件性能的高效代码
  • 虽然其他语言常宣称"与C语言速度相当",但没有语言能宣称比C更快
  1. 兼容性强
  • 几乎所有系统都能调用C语言编写的库
  • 这使得Java编写的Android应用和Objective-C/Swift编写的iOS应用都能使用SQLite
  1. 依赖极少
  • 最小配置下仅需7个标准C库函数
  • 完整构建也只需少量额外依赖
  • 相比其他现代语言动辄数MB的运行时环境优势明显
  1. 稳定性高
  • C语言成熟稳定,规范变化小
  • 这对需要长期稳定的数据库引擎至关重要

关于不使用面向对象语言的解释: 1. C语言库可被任何语言调用,而C++/Java库受限 2. 面向对象是设计模式而非语言特性,C语言也能实现 3. 面向对象并非唯一有效的设计模式 4. 早期Java不成熟,C++编译器差异大

关于不使用"安全"语言的考虑: 1. SQLite前10年这些语言尚未出现 2. 安全检查分支影响100%分支测试覆盖率 3. 安全语言通常无法优雅处理内存不足情况 4. 开发团队更倾向使用成熟稳定的语言

未来可能改用Rust的条件包括: 1. 语言足够成熟稳定 2. 能创建通用库被所有语言调用 3. 支持无操作系统的嵌入式设备 4. 支持100%分支覆盖率测试 5. 具备内存不足恢复机制 6. 性能不显著低于C语言实现

(最后更新:2025年5月9日)

评论总结

评论内容总结

1. 支持C语言的观点

  • 主要观点:C语言是当前性能较好、适用范围广(从底层到大型应用)的选择,且具有广泛的兼容性。
    • 引用1: "Plain and simple C is, by far, one of the current LESS WORSE performant alternatives which can be used, actually, from low level to large applications." (sylware)
    • 引用2: "C-API is the best. As a language, it's too basic. Almost every C projects try to mimic what C++ already has." (feverzsj)

2. 支持Rust的观点

  • 主要观点:Rust在某些场景下是更好的选择,尤其是安全性和现代特性方面,但仍需成熟。
    • 引用1: "Rust is great for many things, but when you have something old that is already so well tested and accessible on all sorts of obscure platforms, it makes little sense to rewrite." (nu11ptr)
    • 引用2: "Rust needs to mature a little more, stop changing so fast, and move further toward being old and boring." (publicdebates)

3. 反对重写的观点

  • 主要观点:对于已经成熟且广泛测试的项目(如SQLite),重写为Rust或其他语言可能带来更多问题而非改进。
    • 引用1: "If they are getting good results with C and without OOP, and people like the product, then those from outside the project shouldn't really have any say on it." (baranul)
    • 引用2: "Oh look. Something works. Lets not break it? How crazy is that?" (talkingtab)

4. 技术细节讨论

  • 主要观点:SQLite的C实现具有独特的优势(如OOM恢复),而Rust等语言在此类场景下仍有不足。
    • 引用1: "SQLite is designed to recover gracefully from an OOM. It is unclear how this could be accomplished in the current crop of safe languages." (WhyNotHugo)
    • 引用2: "The only language that would make sense for a partial/progressive migration is zig, in huge part due to its compatibility with C." (hbbio)

5. 其他观点

  • 兼容性与历史原因:C语言的广泛兼容性和历史积累是其不可替代的优势。
    • 引用1: "Nearly all systems have the ability to call libraries written in C. This is not true of other implementation languages." (Ragnarork)
    • 引用2: "C syntax is already waaaaay to rich and complex (and ISO is a bit too much pushing feature creep over 5/10 years cycles)." (sylware)

总结

评论中既有对C语言在SQLite中使用的支持(强调其性能、兼容性和成熟度),也有对Rust等现代语言的期待(尤其是安全性和现代特性)。反对重写的声音主要基于项目的稳定性和历史积累,而技术细节(如OOM处理)则是讨论的焦点之一。整体上,多数观点认为SQLite的C实现是合理且难以替代的。