2013-05-14 64 views
2

那麼這就是問題所在。是否有其他語言的項目試圖模仿python的堆棧python?是否有像其他語言項目(Java,Lisp,Haskell,Go等)的任何Stackless Python

+1

無堆棧python的核心優勢在於它提供了一條圍繞GIL的途徑。除此之外,它並不令人印象深刻。由於其他語言沒有GIL,因此「執行python的無堆棧python」並不是很有意義。 – sclv 2013-05-14 13:31:55

+1

你可以更具體地瞭解什麼語言或運行時功能/特別是/你看到堆棧python提供給python?因爲許多語言支持先發制人的綠線和更多,而不需要模仿。 – 2013-05-14 13:55:28

回答

5

安德魯·阿佩爾寫了很久以前一本書Compiling with Continuations,實施了一些舊版本(110?)SML/NJ(不堆棧,但與收集「的延續幀」垃圾),並寫了一篇論文(這一切上個世紀)。

幾篇論文提到彙編continuations例如, Flanagan

方案有一個延續相關的原始call/cc

此外,Queinnec的Lisp In Small Pieces,甚至從J.Pitrat的書Artificial Beings (the conscience of a conscious machine)

而且Go Routines等一章..

最近GCC給出-fsplit-stack頗爲相似(和有用的特別是爲實施Go Language的GCC的前端)以及GCC編譯的許多語言(包括C & C++)可用(小心)。

Chicken Scheme正在玩堆棧中的奇怪技巧(特別是對於tail callscall/cc)。

所以我不認爲Stackless Python是第一個想到這個(並實現這些想法)。

另請參閱call stack wikipage。

PS。當然,Haskell,Erlang,Oz ......

4

Haskell和Erlang都包含(在標準實現中)具有多核支持的微線程/綠色線程,一個搶先式調度器和一些模擬通道。我能想到的Stackless唯一相當獨特的功能是線程序列化,儘管有時可以通過提供序列化函數狀態的方式來僞造它。

5

如果您指的是輕量併發的無堆棧編譯,Haskell從一開始就這樣做了。 IIRC第一個Haskell編譯方案被稱爲G-machine。後來被STG機器取代。這對於有效的懶惰來說實際上是必要的,但簡單的併發性和並行性成爲額外的好處。

該領域的另一個值得注意的語言是Erlang及其糟糕的玩笑模仿語言Go以及Scheme這樣的基於延續的語言。與Haskell不同,它們不使用STG編譯方案。

相關問題