在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/人工智能  C/ redis為什么不選擇C++作為實(shí)現(xiàn)語(yǔ)言而選擇C語(yǔ)言來(lái)自己實(shí)現(xiàn)簡(jiǎn)單動(dòng)態(tài)字符串(S

redis為什么不選擇C++作為實(shí)現(xiàn)語(yǔ)言而選擇C語(yǔ)言來(lái)自己實(shí)現(xiàn)簡(jiǎn)單動(dòng)態(tài)字符串(SDS),鏈表,字典(map)等?

如題:

在我閱讀《redis設(shè)計(jì)與實(shí)現(xiàn)》一書(shū)時(shí)覺(jué)得很是困惑,因?yàn)榈谝徊糠滞ㄆ荚谥vredis是如何使用自己的方式來(lái)對(duì)C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)進(jìn)行封裝然后提高性能,既然如此,為什么不使用面向?qū)ο蟮腃++?而且C++也有STL,直接拿來(lái)使用也可以吧。

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

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

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

嗯,這個(gè)問(wèn)題容易引起噴子??!我撿能回答來(lái)說(shuō)說(shuō)哈:

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

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

因?yàn)榈谝徊糠滞ㄆ荚谥vredis是如何使用自己的方式來(lái)對(duì)C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)進(jìn)行封裝然后提高性能,既然如此,C++也有STL,直接拿來(lái)使用也可以吧。

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

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

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

2018年3月28日 18:31