成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

編程語言的心智負(fù)擔(dān)

zhangke3016 / 1945人閱讀

摘要:心智負(fù)擔(dān)因此在中建議使用或函數(shù)代替宏。心智負(fù)擔(dān)等編程語言,默認(rèn)整數(shù)為有符號,降低了心智負(fù)擔(dān)。而動態(tài)弱類型語言可能會因為重構(gòu)或其他維護(hù)操作產(chǎn)生運行時錯誤,增加了心智負(fù)擔(dān)。心智負(fù)擔(dān)而且異步的等無需擔(dān)心此問題。

很多編程語言對比的文章,總喜歡比較各種編程語言的性能、語法、IO模型。本文將從心智負(fù)擔(dān)這個角度去比較下不同的編程語言和技術(shù)。因本人所擅長的編程語言有限,如有不對的地方,歡迎指正。

內(nèi)存越界

如:C語言、C++(C with class)
C/C++可以直接操作內(nèi)存,但編程必須要面對內(nèi)存越界問題。發(fā)生內(nèi)存越界后,程序會直接core dump,開發(fā)者需要使用gdb工具分析內(nèi)存錯誤的原因,如果內(nèi)存越界是偶發(fā)的,比如由于數(shù)據(jù)同步問題造成,數(shù)億次中會出現(xiàn)一次,解決起來非常困難,甚至需要頂級專家才能找到問題原因。

心智負(fù)擔(dān):10

現(xiàn)代C++提供了STL庫包含大量容器,另外C++支持引用語法,不再需要直接操作指針,降低了內(nèi)存錯誤讀寫的風(fēng)險。使用現(xiàn)代C++的編程風(fēng)格可以避免此問題。但由于C++沒有完全從語法層面移除指針,不夠徹底。

C/C++程序中經(jīng)常使用預(yù)定義宏實現(xiàn)一些邏輯,導(dǎo)致可讀性變差。有些情況下會嵌套多次宏的使用,展開后變得極其難讀。心智負(fù)擔(dān):6

因此在C/C++中建議使用enumstatic inline函數(shù)代替宏。

內(nèi)存管理

如:C語言、C++

C/C++語言,需要手工管理內(nèi)存,malloc/new申請的內(nèi)存要與free/delete成對使用。申請的內(nèi)存忘記釋放,就會出現(xiàn)內(nèi)存泄漏。心智負(fù)擔(dān):8

Java/PHP/Go等有GC的編程語言,不需要手工管理內(nèi)存,不會因為代碼錯誤引起內(nèi)存泄漏。心智負(fù)擔(dān):0

數(shù)值類型

C/C++/GO等編程語言,提供了有符號、無符號整型和浮點型,8/16/32/64不同尺寸的整型。編程時需要額外處理,避免數(shù)值溢出。心智負(fù)擔(dān):6

PHP/Java等編程語言,默認(rèn)整數(shù)為有符號int64,降低了心智負(fù)擔(dān)。一般業(yè)務(wù)項目中很難有超過2^63的數(shù)字,不會遇到問題。但如果是做科學(xué)計算,int64就難以滿足需求了。在PHP中超過2^63底層會轉(zhuǎn)為浮點型,計算將丟失精度。心智負(fù)擔(dān):1

Python整數(shù)是不限長度的,可以做任意位數(shù)的數(shù)值計算。心智負(fù)擔(dān):0

類型約束

Java是靜態(tài)強類型編程語言,因此在編程中存在類型約束,某些情況下可能不是特別方便。如JSON序列化。不同類型的變量互相操作時可能需要進(jìn)行顯式類型轉(zhuǎn)換。心智負(fù)擔(dān):2

PHP/JS是動態(tài)弱類型編程語言,底層自動進(jìn)行隱式類型轉(zhuǎn)換。編程更方便。心智負(fù)擔(dān):0。

項目維護(hù)

在大型項目,或?qū)σ延邢到y(tǒng)進(jìn)行代碼重構(gòu),以及項目代碼更換開發(fā)者時,弱類型動態(tài)語言會帶來可維護(hù)性的難題。Java/Go/C++這樣的靜態(tài)強類型編程語言在編譯期就可以發(fā)現(xiàn)問題。而動態(tài)、弱類型語言可能會因為重構(gòu)或其他維護(hù)操作產(chǎn)生運行時錯誤,增加了心智負(fù)擔(dān)。心智負(fù)擔(dān):5

多線程編程

Java/C++/Go提供了多線程并行編程、無鎖編程,在編程中會存在數(shù)據(jù)同步問題。因此需要對臨界資源進(jìn)行加鎖。而錯誤的鎖操作又會帶來,死鎖和熱點爭搶問題。需要開發(fā)者具備極高的素質(zhì),否則難以做到正確無誤并性能良好,這可能需要耗費大量心智。心智負(fù)擔(dān):10

內(nèi)存泄漏

PHP(php-fpm)之外的其他編程語言和技術(shù)(包括PHP + Swoole),在服務(wù)器端程序中均為長生命周期。對全局/靜態(tài)變量操作可能會導(dǎo)致內(nèi)存或資源句柄泄漏。編程時需要注意。心智負(fù)擔(dān):3

PHP(php-fpm)是短生命周期的,在請求結(jié)束后會立即釋放所有內(nèi)存和句柄,無需擔(dān)心泄漏。心智負(fù)擔(dān):0

IO 超時

同步阻塞IO模型的編程語言和技術(shù),在遇到某個慢IO會導(dǎo)致整個進(jìn)程或線程掛起。極端情況下會出現(xiàn)所有進(jìn)程/線程掛起,引起線上服務(wù)不可用。開發(fā)者需要格外注意設(shè)置IO操作的超時時間,避免慢請求帶來進(jìn)程/線程阻塞。心智負(fù)擔(dān):2

而且異步IOGo/Node.js/Swoole等無需擔(dān)心此問題。心智負(fù)擔(dān):0

匯總

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29823.html

相關(guān)文章

  • 一位神經(jīng)科學(xué)家對神經(jīng)科學(xué)愿景與隱憂

    摘要:多種學(xué)科為神經(jīng)科學(xué)做出貢獻(xiàn)。對正常的心智功能如學(xué)習(xí)和記憶,以及異常功能如抑郁精神分裂和阿爾茨海默病,遺傳學(xué)鑒定了與之相關(guān)的基因。 大腦的未來,在作者的描述之下,真是一個令人興奮又令人擔(dān)憂的未來。——蒲慕明我是一個神經(jīng)科學(xué)家,也就是說,我在研究腦如何工作。就像其他許多神經(jīng)科學(xué)家一樣,我做這門學(xué)問,是因為我相信在分子、細(xì)胞和系統(tǒng)層次探索腦如何工作,我們可以對思維如何運作有些理解。對我來說,這是一...

    baukh789 評論0 收藏0
  • 什么是好API設(shè)計?

    摘要:什么是我們只要是在進(jìn)行編程我們就需要不停的設(shè)計。不易誤用這一點很重要,要減少使用者的心智負(fù)擔(dān)。盡量少的外部依賴減少使用者的成本。良好的命名盡量做到自描述。 什么是API? 我們只要是在進(jìn)行編程我們就需要不停的設(shè)計API。 API簡單來講可以是一個調(diào)用的函數(shù),一個接口。 抽象來說,接口是一個內(nèi)聚系統(tǒng)暴漏給外部的一切信息,包含但不限于: 調(diào)用方式:比如通過lib庫或者h(yuǎn)ttp接口等。 調(diào)...

    mudiyouyou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<