Python智能合約編程 -- 開篇:為什么是Python

? ? ? ? Python因其簡單易用,開發(fā)效率高而深受廣大開發(fā)者的喜愛和推崇并级。雖說編程最重要的是背后的思想拂檩,但是思想的表達(dá)也是非常的重要的。Python正是這種有強(qiáng)大表達(dá)能力的語言嘲碧。Python有句名言:Life is short, use Python.中文版是:人生苦短稻励,我用Python。可以從一個(gè)側(cè)面來了解Python是一個(gè)高效的開發(fā)語言望抽。在科學(xué)計(jì)算加矛,網(wǎng)絡(luò)編程,人工智能等等領(lǐng)域煤篙,Python有著廣泛的應(yīng)用斟览。最近的消息顯示Python即將被納入高考內(nèi)容,并且Python已經(jīng)進(jìn)入小學(xué)生的教材辑奈。詳見csdn公眾號(hào)文章苛茂。所以說,學(xué)習(xí)python真的是大勢(shì)所趨鸠窗,沒有必要費(fèi)時(shí)費(fèi)力的勸說別人去學(xué)Python了妓羊。

? ? ? ? ?以太坊智能合約功能讓以太坊火了起來,甚至帶動(dòng)了上一波的區(qū)塊鏈的牛市稍计。以太坊也憑借它的智能合約功能坐上了區(qū)塊鏈?zhǔn)袌龅牡诙呀灰蔚奈恢迷瓿瘛V悄芎霞s將會(huì)是以后區(qū)塊鏈項(xiàng)目的必備的功能。但是智能合約本身卻也有許多的問題臣嚣,最明顯的就是性能和易用性問題净刮。以太坊的solidity智能合約語言在性能和易用性上都不盡如人意。智能合約語言的設(shè)計(jì)并不是簡單的事情硅则,但是卻又是區(qū)塊鏈?zhǔn)澜绫仨毥鉀Q的問題淹父。既然Python這么好用,為什么不直接用Python作為智能合約語言呢抢埋?其實(shí)弹灭,早期的以太坊就早就已經(jīng)認(rèn)識(shí)到了這個(gè)問題。最早的以太坊智能合約語言serpent就是一種類Python的語言揪垄,后面逐漸被solidity所替代∏钏保現(xiàn)在以太坊又在開發(fā)vyper語言,也是一種類Python語言饥努。github上對(duì)它的描述是:Pythonic Smart Contract Language for the EVM捡鱼。在github上已經(jīng)2000多start了。為什么以太坊在類Python語言的開發(fā)上情有獨(dú)忠呢酷愧,最根本的原因還是因?yàn)镻ython好用驾诈,用戶群體廣泛。還有一個(gè)原因是以太坊的創(chuàng)始人Vitalik Buterin是一個(gè)Python的死忠粉溶浴。實(shí)際上Python還為以太坊作出了功不可沒的貢獻(xiàn)乍迄,最早期的以太坊版本就是用Python開發(fā)的,后面才有C++和Go的版本士败。

? ? ? ? 這里就提出來一個(gè)問題:既然Python這么好用闯两,為什么以太坊不直接把python作為智能合約語言褥伴?原因是不適合。Ethereum的智能合約是基于GAS付費(fèi)模型的漾狼,需要精確的計(jì)算代碼所占的CPU和代碼操作存儲(chǔ)空間所需的花費(fèi)重慢,以太坊稱之為GAS。而原生的Python解釋器有眾多的代碼逊躁,相對(duì)于簡單的EVM虛擬機(jī)來說似踱,要復(fù)雜很多,要計(jì)算GAS比較困難稽煤。

? ? ? ? 下面來談?wù)凱ython為什么能作為Eos的智能合約編程語言核芽。Eos是Daniel Larimer以及他的開發(fā)團(tuán)隊(duì)為我們帶來了的,因?yàn)镋os的TS是零費(fèi)用的念脯,運(yùn)行智能合約的時(shí)候計(jì)算的是CPU的運(yùn)行時(shí)間狞洋,不用像Ethereum那樣去費(fèi)時(shí)費(fèi)力的計(jì)算每一行代碼的GAS弯淘,使得用Python作為智能合約的開發(fā)語言成為可能绿店。為Python成為智能合約語言移除了一個(gè)大阻礙。所以感謝Daniel Larimer吧庐橙,苦哈哈的開發(fā)者們看到了一絲曙光假勿。

? ? ? ? 再來說說Python的性能問題。其實(shí)在今天這個(gè)世界里态鳖,開發(fā)者更關(guān)注的是軟件的開發(fā)效率和維護(hù)成本转培。至于性能,在大多數(shù)情況下浆竭,以現(xiàn)在CPU的計(jì)算能力浸须,是完全能夠滿足需求的。如果在十幾二十年前邦泄,你可能還需要為了性能而斤斤計(jì)較删窒,但是現(xiàn)在,大多數(shù)應(yīng)用場景下顺囊,真的不用了肌索。并且在Python代碼不滿足性能要求時(shí),完全有很方便的方法來對(duì)Python代碼進(jìn)行優(yōu)化以幾倍幾十倍的提高代碼的性能特碳。另外诚亚,二八定律也同樣適用于程序的運(yùn)行。也就是說午乓,20%的代碼占用了80%的運(yùn)行時(shí)間站宗。具體到Python語言,20%的bytecode占用了80%的運(yùn)行時(shí)間益愈,并且由于Python的關(guān)鍵模塊很多都是通過C來實(shí)現(xiàn)的梢灭,所以實(shí)際上80%的Python程序運(yùn)行時(shí)間又是大部分時(shí)間里都在運(yùn)行除解釋bytecode以外的C代碼。這也就是即使不采用優(yōu)化手段,Python的性能在大多數(shù)情況下不會(huì)太差的原因或辖。事實(shí)上瘾英,Python的list,dict等等關(guān)鍵模塊的運(yùn)行速度已經(jīng)和C/C++寫的代碼沒有多大的差別了。但是颂暇,有句實(shí)話還是得說:會(huì)用Python和用好Python還是有很大的差別的缺谴。當(dāng)然,高性能的區(qū)塊鏈項(xiàng)目對(duì)智能合約語言的性能還是有比較高的要求的耳鸯,從測試的情況來看湿蛔,cpython的運(yùn)行速度比wasm的binaryen運(yùn)行方式會(huì)快3倍以上。和wasm的wabt運(yùn)行模式處于同一個(gè)數(shù)據(jù)級(jí)县爬。這也說明了python智能合約的運(yùn)行速度是能夠滿足要求的阳啥。

最后,祭出Python之禪(Zen of Python)作為本篇的結(jié)束

Zen of Python(Python之禪)

1. Beautiful is better than ugly.

優(yōu)美勝于丑陋(Python 以編寫優(yōu)美的代碼為目標(biāo))

2. Explicit is better than implicit.

明了勝于晦澀(優(yōu)美的代碼應(yīng)當(dāng)是明了的财喳,命名規(guī)范察迟,風(fēng)格相似)

3. Simple is better than complex.

簡潔勝于復(fù)雜(優(yōu)美的代碼應(yīng)當(dāng)是簡潔的,不要有復(fù)雜的內(nèi)部實(shí)現(xiàn))

4. Complex is better than complicated.

復(fù)雜勝于凌亂(如果復(fù)雜不可避免耳高,那代碼間也不能有難懂的關(guān)系扎瓶,要保持接口簡潔)

5. Flat is better than nested.

扁平勝于嵌套(優(yōu)美的代碼應(yīng)當(dāng)是扁平的,不能有太多的嵌套)

6. Sparse is better than dense.

間隔勝于緊湊(優(yōu)美的代碼有適當(dāng)?shù)拈g隔泌枪,不要奢望一行代碼解決問題)

7. Readability counts.

可讀性很重要(優(yōu)美的代碼是可讀的)

8. Special cases aren't special enough to break the rules.

9. Although practicality beats purity.

即便假借特例的實(shí)用性之名概荷,也不可違背這些規(guī)則(這些規(guī)則至高無上)

10. Errors should never pass silently.

11. Unless explicitly silenced.

不要包容所有錯(cuò)誤,除非你確定需要這樣做(精準(zhǔn)地捕獲異常碌燕,不寫except:pass風(fēng)格的代碼)

12. In the face of ambiguity, refuse the temptation to guess.

當(dāng)存在多種可能误证,不要嘗試去猜測

13. There should be one-- and preferably only one --obvious way to do it.

而是盡量找一種,最好是唯一一種明顯的解決方案(如果不確定修壕,就用窮舉法)

14. Although that way may not be obvious at first unless you're Dutch.

雖然這并不容易愈捅,因?yàn)槟悴皇?Python 之父(這里的 Dutch 是指 Guido)

15. Now is better than never.

16. Although never is often better than right now.

做也許好過不做,但不假思索就動(dòng)手還不如不做(動(dòng)手之前要細(xì)思量)

17. If the implementation is hard to explain, it's a bad idea.

18. If the implementation is easy to explain, it may be a good idea.

如果你無法向人描述你的方案叠殷,那肯定不是一個(gè)好方案改鲫;反之亦然(方案測評(píng)標(biāo)準(zhǔn))

19. Namespaces are one honking great idea -- let's do more of those!

命名空間是一種絕妙的理念,我們應(yīng)當(dāng)多加利用(倡導(dǎo)與號(hào)召)


參考鏈接:

http://blog.csdn.net/gzlaiyonghao/article/details/2151918

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末林束,一起剝皮案震驚了整個(gè)濱河市像棘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壶冒,老刑警劉巖缕题,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胖腾,居然都是意外死亡烟零,警方通過查閱死者的電腦和手機(jī)瘪松,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锨阿,“玉大人宵睦,你說我怎么就攤上這事∈睿” “怎么了壳嚎?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長末早。 經(jīng)常有香客問我烟馅,道長,這世上最難降的妖魔是什么然磷? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任郑趁,我火速辦了婚禮,結(jié)果婚禮上姿搜,老公的妹妹穿的比我還像新娘寡润。我一直安慰自己,他們只是感情好痪欲,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布悦穿。 她就那樣靜靜地躺著,像睡著了一般业踢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上礁扮,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天知举,我揣著相機(jī)與錄音,去河邊找鬼太伊。 笑死雇锡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的僚焦。 我是一名探鬼主播锰提,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼芳悲!你這毒婦竟也來了立肘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤名扛,失蹤者是張志新(化名)和其女友劉穎谅年,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肮韧,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡融蹂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年旺订,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片超燃。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡区拳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出意乓,到底是詐尸還是另有隱情劳闹,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布洽瞬,位于F島的核電站本涕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏伙窃。R本人自食惡果不足惜菩颖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望为障。 院中可真熱鬧晦闰,春花似錦、人聲如沸鳍怨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鞋喇。三九已至声滥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侦香,已是汗流浹背落塑。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罐韩,地道東北人憾赁。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像散吵,于是被迫代替她去往敵國和親龙考。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容