如果用 C 20 來寫 Python 的 Implementation,會有多少效能提公升?

時間 2021-05-06 21:59:20

1樓:pansz

我猜測你提出這個問題的原因,是因為pypy?

你的想法大概是:

pypy 是用 python 寫的 python 實現

pypy 的效能比 cpython 強

所以用 python 寫的 python 比用 C 寫的 python 強。

c++20 像 python,所以寫出來就比 C 寫的 python 強?

啊,其實這個問題很多人以前就解釋過了,pypy 比 cpython 強的原因,與它用 python 寫的沒有半毛錢關係。準確的說,pypy 是乙個高效的 python 直譯器,而它恰好是用 python 寫的,僅此而已。

這樣說吧,重寫 cpython,並且使用更先進更優秀的架構,引入JIT機制,確實有可能會比現在的 cpython 更強,但這與用什麼語言實現沒有關係。純粹是因為架構跟機制的原因。

2樓:eechen

Python是出了名的效能不行,倒是被各種嘲諷的PHP,其實比Lua還要快。

這幾個語言的直譯器都是用C寫的,所以效能瓶頸不是C,而是實現上的差異。

3樓:LemonHX

如果題主想問的是把py編譯到C艹再加乙個輕度適量的執行時大概能快多少呢?

這個問題不難回答,我們已經有pypy了,但是pypy沒有動態呼叫,很好,我們把只能動態呼叫的部分抽出來,恩,然後hook c艹20的compiler(比如clang)在劃分vtable時定義乙個規則比如這個類沒有想要的函式指標的時候找runtime要,呼叫函式可以用msg(類似objc艹手寫彙編),然後盡可能的把核心庫型別補全,把核心庫用c艹20的強大的元魔法和靜態反射實現了...

最後在使用thread之類的和一些精妙的鎖什麼的把gil乾掉,在codegen的時候再順便維護一下乙個簡單的gc的話...

那麼能把執行速度提公升到Swift的量級(大概快4倍左右(專指計算密集任務))。

不過這個會造成很大程度上的社群割裂因為第一是強型別的,第二是很多庫得重寫。

不過要是重寫直譯器不用任何jit技巧...0提公升

使用c艹20打造乙個jit?...js v8吧最快了。

4樓:James Yin

用了python,就不再期待效能了。我現在遇到的效能瓶頸,在大量物件的建立。而我在測試c++實現的無所佇列時,建立物件同樣是瓶頸。

這時候我又想把建立物件的開銷劃給呼叫方,這樣我的佇列演算法就解脫了。怎麼提高效能,私以為記憶體管理十分關鍵。

5樓:zpan

CPython 效能差不在於它是用什麼語言實現的,而是在於不得不相容其 C 介面。如果可以放棄對 CPython API 的相容,那隨便用 C/C++/Rust 重寫都能大大提高效能。連 PyPy 都可以。

6樓:開源醬

C++ 20 長得再像 Python 也和用 C++ 20 去實現乙個 Python 直譯器能有多少效能提公升沒有半毛錢關係

devil blues deluxe和C20口琴哪個好,或者有更加好的打算(200 400)

丟失的草帽 devil blues deluxe和c20都沒吹過。但本人吹過並且擁有藍網十週年,wooden voice,proreeds及babyfat可以說藍網琴的水平很高可以說是中國產口琴的精品。和萊的sp20,mb1896,mbd,mbc自己也吹過也擁有過部分。賽德的1847c自己也擁有。我...

面對C 20, 應該如何入門學習C

Tex 先學傳統C 再一步一步過渡到現代C 儘管有些書中的內容現在已經不適用 或者有更簡便的實現,但是該看的書還是得看,該踩的坑還是得踩。不要想一步登天,直接進入C 20。 飛翔的荷蘭豬 推薦 c Templates 第二版。這本書不會一上來就教特性,然後講例子。而是一種,先講需求,再講如何用老語法...

如何看待C 20可能會棄用原始指標?

菩提薩埵 c 可以制定兩套標準一套相容c的一套甩掉c的包袱。現在c 不是想搞原始編譯版本嗎?和c 不謀而合,可以一起制定標準。 神棍 如果真的這麼做,那還不如直接宣布,放棄和C相容這個包袱,提神效果會更好。上園了C 委員會決定在C 20 中棄用原始指標 IT新聞 部落格園 好吧,丟人了。坐等明年C ...