为什么 SQLite 用 C 编写?
简评:SQLite 官方出品。
C是最好的选择
从 2000 年 5 月 29 日开始,SQLite 就选择了 C 语言。直到今天,C 也是实现 SQLite 这样软件库的最佳语言。
C语言是实现 SQLite 最好的语言的原因包括:
- 性能。
- 兼容性。
- 低依赖性。
- 稳定性。
性能
像 SQLite 这样被密集使用的基础库需要有很好的性能(SQLite 确实很快,可以看看 Internal Versus External BLOBs 和 35% Faster Than The Filesystem 两篇文章)。
C语言很适合写这样有性能要求的程序。C 语言有时被称为「便携式汇编语言」,让开发者能尽可能的接近底层硬件编码,同时保证跨平台的便携性。
当然,也有其他的编程语言声称和 C 一样快或者更快,但没有一个能和 C 一样通用。
兼容性
目前几乎所有的系统都可以调用由 C 语言编写的库。
比如,用 Java 编写的 Android 应用能通过 adapter 来使用 SQLite。如果 SQLite 是用 Java 编写的,这对于 Android 肯定会更方便。但在 iPhone 上应用是 Objective-C 或者 Swift 编写的,这两种语言都没办法调用 Java 库。因此,如果 SQLite 选择用 Java 编写,那在 iPhone 上就没办法用了。
低依赖性
用 C 来编写库不会在运行时有太多的依赖。在最小的配置下,SQLite 只需要 C 标准库里的:
- memcmp()
- memcpy()
- memmove()
- memset()
- strcmp()
- strlen()
- strncmp()
在更复杂的配置下,SQLite 可能还会用到 malloc(),free() 和一些操作系统接口来打开、读取、写入和关闭文件。但即使这样,依赖的数量也非常小。
稳定性
这个稳定性是指语言的稳定性。C 语言可能是老旧又无聊,但却正好很适合开发像 SQLite 这样更注重长期稳定的模块。
原文:Why Is SQLite Coded In C
为什么 SQLite 用 C 编写?的更多相关文章
- 桌面轻量级数据库的选择:Access、SQLite、自己编写?
1. Access我们做小项目的时候特别是小的MIS系统一般也都要用数据库来保存数据.经观察大部分的小系统都是用Access数据库,有的系统为了掩盖数据库的类型,把数据文件后缀名改了,其实只要改回到m ...
- 学习SQLite之路(一)
工作快一年了,接触的东西不是很多,学到的东西也不多.无意中看到公司的代码有一点关于sqlite3的(不是我这一层负责的代码),于是乎就学学试试. 参考: http://www.runoob.com/s ...
- C#中使用SQLite数据库简介(上)
[SQLite数据库] SQLite是一个开源的轻量级的桌面型数据库,它将几乎所有数据库要素(包括定义.表.索引和数据本身)都保存在一个单一的文件中.SQLite用C编写实现,它在内存消耗.文件体积. ...
- Visual Studio下SQLite数据库开发环境设置
由于我们介绍的内容都是基于微软的Visual Studio下开发的Win32平台,所以下边我们介绍Visual Studio下SQLite数据库开发环境设置.具体而言我们有两种方式可以在Visual ...
- sqlite详细介绍
------------------------------------------------------------------------------SQLite简介-------------- ...
- SQLite:自学笔记(1)——快速入门
SQLite的安装和入门 了解 啥是SQLite? SQLite是一种轻巧迷你的关系型数据库管理系统.它的特点如下: 不需要一个单独的服务器进程或操作的系统(无服务器的). SQLite 不需要配置, ...
- 轻量级数据库Sqlite的使用
SqLite是什么? SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置. 就像 ...
- SQLite数据库 简介、特点、优势、局限性及使用
SQLite简介 SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足.无服务器.零配置的.事务性的SQL数据库引擎.它是一个零配置的数据库,这就体现出来SQLite与 ...
- SQLite EF Core Database Provider
原文链接 This database provider allows Entity Framework Core to be used with SQLite. The provider is mai ...
随机推荐
- 读取properties文件并获取属性值
1.Properties与ResourceBundle 两个类都可以读取属性文件中以key/value形式存储的键值对,ResourceBundle读取属性文件时操作相对简单. 2.Propertie ...
- linux系统命令行基本组成元素
一.shell prompt(PS1) 命令行提示符 1. 游标(coursor) 当你成功登录进一个文字界面之后,大部份情形下,你会在荧幕上看到一个不断闪烁的方块或底线(视不同版本而别),我们称之为 ...
- 项目介绍4 y有用
在青岛做了两年开发,大大小小参与过三个项目的开发,一个是某公司内部的人员管理系统,一个是物流项目,最近做的是一个电商项目. 前两个项目采用的是ssh框架搭建的,最近的项目采用的是ssm框架搭建的.在实 ...
- 富文本编辑器和fastdfs的使用
宜立方商城的系统架构a) 功能介绍(项目架构,有哪些功能模块,这些功能模块如何实现?)b) 架构讲解工程搭建-后台工程c) 使用maven搭建工程(后台工程如何搭建?)d) 使用maven的tomca ...
- Openssl genrsa命令
一.简介 生成RSA私有密钥 二.语法 openssl genrsa [-out filename] [-passout arg] [-f4] [-] [-rand file(s)] [-engine ...
- java判断一个数是否为素数[转]
http://blog.csdn.net/lwcumt/article/details/8027586 import java.util.Scanner; //质数又称素数,是指在一个大于1的自然数中 ...
- python3--json序列化
# Auther: Aaron Fan # 把数据存入到一个文件中 # json格式的数据几乎可以通用语任何编程语言,但是仅仅只是简单的格式转换# 比如:字典.列表.元组.字符串这些,像函数.类就不可 ...
- C++11学习笔记之三lamda表达式,std::function, std::bind
//lamda //first lamda [] {}; // second lamda []() //or no need () when paramater is null { std::cout ...
- zrender源码分析3--初始化Painter绘图模块
接上次分析到初始化ZRender的源码,这次关注绘图模块Painter的初始化 入口1:new Painter(dom, this.storage); // zrender.js /** * ZRen ...
- opencv常用函数备忘
//显示图片 IplImage * src = cvLoadImage("xx.JPG"); cvNamedWindow(); cvShowImage("show_ima ...