如题:
在我阅读《redis设计与实现》一书时觉得很是困惑,因为第一部分通篇都在讲redis是如何使用自己的方式来对C语言数据结构进行封装然后提高性能,既然如此,为什么不使用面向对象的C++?而且C++也有STL,直接拿来使用也可以吧。
如题:
在我阅读《redis设计与实现》一书时觉得很是困惑,因为第一部分通篇都在讲redis是如何使用自己的方式来对C语言数据结构进行封装然后提高性能,既然如此,为什么不使用面向对象的C++?而且C++也有STL,直接拿来使用也可以吧。
嗯,这个问题容易引起喷子啊!我捡能回答来说说哈:
为什么不使用面向对象的C++?
C的结构体中封装函数指针就能很优雅的实现面向对象。
因为第一部分通篇都在讲redis是如何使用自己的方式来对C语言数据结构进行封装然后提高性能,既然如此,C++也有STL,直接拿来使用也可以吧。
Redis中有一些数据结构是常见的,通用的,比如字典 dict,跳跃表 skiplist,这些拿本数据结构的书就有,但是有的数据结构比如 整数集合 intset,压缩列表 ziplist等都是自己实现的,特有的数据结构,目的就是为了尽可能的节约内存,这些STL中可没实现,作为内存数据库,设计数据结构的出发点就是省内存呗!
要想最简单获得极广的可移植特性,你就需要使用C语言而不是C++。
你看sqlite
,lua
,CPython
等等都是,单片机上都可以轻松用上。
从操作系统到编程语言再到组件到应用开发者,大家早就达成了共识,如果提供其他语言扩展支持,C语言是肯定要支持的。
那为何不上来就直接采用C语言让别的语言别的系统轻松使用上呢?
1 回答889 阅读
2 回答900 阅读
1 回答875 阅读
1 回答719 阅读
反对
C的结构体中封装函数指针就能很优雅的实现面向对象。
这种人肉虚表的做法, 我不认为有正常人(除了c厨)会觉得这种方法优雅
. 虽然linux的内核文件系统就是这么做的, Linus不就是c厨吗, 不过既然redis它爹是c厨, 这样做也是正常的.(扯远了, 逃