鍍金池/ 問答/人工智能  C/ redis為什么不選擇C++作為實現(xiàn)語言而選擇C語言來自己實現(xiàn)簡單動態(tài)字符串(S

redis為什么不選擇C++作為實現(xiàn)語言而選擇C語言來自己實現(xiàn)簡單動態(tài)字符串(SDS),鏈表,字典(map)等?

如題:

在我閱讀《redis設(shè)計與實現(xiàn)》一書時覺得很是困惑,因為第一部分通篇都在講redis是如何使用自己的方式來對C語言數(shù)據(jù)結(jié)構(gòu)進(jìn)行封裝然后提高性能,既然如此,為什么不使用面向?qū)ο蟮腃++?而且C++也有STL,直接拿來使用也可以吧。

回答
編輯回答
伴謊
  1. 因為redis它爹不喜歡c++喜歡c
  2. redis build很快, 用了內(nèi)置容器(就是你說的stl, 雖然其實這些不是stl, stl只是某牛人在hp寫的庫, 標(biāo)準(zhǔn)庫在這基礎(chǔ)上面增減了很多東西. )一堆模板自然慢了下來
  3. 可移植性(樓上說了)
  4. c++比c更難(靠譜的c++碼農(nóng)比c少), 沒必要冒這種風(fēng)險.

反對C的結(jié)構(gòu)體中封裝函數(shù)指針就能很優(yōu)雅的實現(xiàn)面向?qū)ο蟆?/code>這種人肉虛表的做法, 我不認(rèn)為有正常人(除了c廚)會覺得這種方法優(yōu)雅. 雖然linux的內(nèi)核文件系統(tǒng)就是這么做的, Linus不就是c廚嗎, 不過既然redis它爹是c廚, 這樣做也是正常的.(扯遠(yuǎn)了, 逃

2017年7月25日 05:24
編輯回答
尕筱澄

嗯,這個問題容易引起噴子?。∥覔炷芑卮饋碚f說哈:

為什么不使用面向?qū)ο?/strong>的C++?

C的結(jié)構(gòu)體中封裝函數(shù)指針就能很優(yōu)雅的實現(xiàn)面向?qū)ο蟆?/p>

因為第一部分通篇都在講redis是如何使用自己的方式來對C語言數(shù)據(jù)結(jié)構(gòu)進(jìn)行封裝然后提高性能,既然如此,C++也有STL,直接拿來使用也可以吧。

Redis中有一些數(shù)據(jù)結(jié)構(gòu)是常見的,通用的,比如字典 dict,跳躍表 skiplist,這些拿本數(shù)據(jù)結(jié)構(gòu)的書就有,但是有的數(shù)據(jù)結(jié)構(gòu)比如 整數(shù)集合 intset壓縮列表 ziplist等都是自己實現(xiàn)的,特有的數(shù)據(jù)結(jié)構(gòu),目的就是為了盡可能的節(jié)約內(nèi)存,這些STL中可沒實現(xiàn),作為內(nèi)存數(shù)據(jù)庫,設(shè)計數(shù)據(jù)結(jié)構(gòu)的出發(fā)點就是省內(nèi)存唄!

2017年10月22日 22:44
編輯回答
尐潴豬

要想最簡單獲得極廣的可移植特性,你就需要使用C語言而不是C++。
你看sqlite,lua,CPython等等都是,單片機(jī)上都可以輕松用上。
從操作系統(tǒng)到編程語言再到組件到應(yīng)用開發(fā)者,大家早就達(dá)成了共識,如果提供其他語言擴(kuò)展支持,C語言是肯定要支持的。
那為何不上來就直接采用C語言讓別的語言別的系統(tǒng)輕松使用上呢?

2018年3月28日 18:31