redis为什么不选择C++作为实现语言而选择C语言来自己实现简单动态字符串(SDS),链表,字典(map)等?

如题:

在我阅读《redis设计与实现》一书时觉得很是困惑,因为第一部分通篇都在讲redis是如何使用自己的方式来对C语言数据结构进行封装然后提高性能,既然如此,为什么不使用面向对象的C++?而且C++也有STL,直接拿来使用也可以吧。

阅读 10.3k
3 个回答
  1. 因为redis它爹不喜欢c++喜欢c
  2. redis build很快, 用了内置容器(就是你说的stl, 虽然其实这些不是stl, stl只是某牛人在hp写的库, 标准库在这基础上面增减了很多东西. )一堆模板自然慢了下来
  3. 可移植性(楼上说了)
  4. c++比c更难(靠谱的c++码农比c少), 没必要冒这种风险.

反对C的结构体中封装函数指针就能很优雅的实现面向对象。这种人肉虚表的做法, 我不认为有正常人(除了c厨)会觉得这种方法优雅. 虽然linux的内核文件系统就是这么做的, Linus不就是c厨吗, 不过既然redis它爹是c厨, 这样做也是正常的.(扯远了, 逃

嗯,这个问题容易引起喷子啊!我捡能回答来说说哈:

为什么不使用面向对象的C++?

C的结构体中封装函数指针就能很优雅的实现面向对象。

因为第一部分通篇都在讲redis是如何使用自己的方式来对C语言数据结构进行封装然后提高性能,既然如此,C++也有STL,直接拿来使用也可以吧。

Redis中有一些数据结构是常见的,通用的,比如字典 dict跳跃表 skiplist,这些拿本数据结构的书就有,但是有的数据结构比如 整数集合 intset压缩列表 ziplist等都是自己实现的,特有的数据结构,目的就是为了尽可能的节约内存,这些STL中可没实现,作为内存数据库,设计数据结构的出发点就是省内存呗!

要想最简单获得极广的可移植特性,你就需要使用C语言而不是C++。
你看sqlite,lua,CPython等等都是,单片机上都可以轻松用上。
从操作系统到编程语言再到组件到应用开发者,大家早就达成了共识,如果提供其他语言扩展支持,C语言是肯定要支持的。
那为何不上来就直接采用C语言让别的语言别的系统轻松使用上呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题