Ruby、Python、Perl這類語言,最開始的時候都是用什麼語言實現的?
03-05
是C嗎?其他語言呢?有哪些語言像C一樣,是彙編語言(至少一開始的10%,後面是滾雪球自己實現自己)實現的?
謝謝 @cat bir 邀請,我不了解 Ruby 的情況,就只寫 Python 的。
Python 有許多不同的實現,其中最常見的 CPython 第一版到現在都是用 C 語言實現編譯器、VM 和部分標準庫。在有了 VM 的基礎上,另一個部分標準庫則用純 Python 實現。
但是編譯器的設計必然是可以自舉的,正如第一個 C 語言編譯器用其他語言實現,從此以後其他 C 語言編譯器就可以用 C 語言實現。Python 的另一個實現 PyPy 的編譯器就是用 RPython 實現的,RPython 是 Python 語言的一個子集。因此,任何 RPython 的超集都可以用於編譯 PyPy,包括 CPython、Jython、IronPython 甚至是 PyPy 本身(比如一個現存的舊版本)。這和 C 編譯器的情況很相似,世界上第一個 PyPy 要用 CPython 來編譯,從此以後的就能用 PyPy 來編譯 PyPy 了。
先有雞還是先有蛋的問題挺有意思的,這類自舉問題可以參考維基百科 Bootstrapping (compilers)據我所知,Python一開始的Python是基於C實現,也就是我們說的CPython(但是注意Python的標準庫中有一些也是用純Python實現的)。
後來的話,Python逐步有了其它語言的實現。我知道的有PyPy(Python實現的Python),還有Jython(一開始是JPython,用Java實現的)。20年前微軟的fortran編譯器就是用會編寫的,自從C/C++普及了之後,大部分都用C/C++來寫了。唯一還有一個例外,就是Delphi的編譯器用的是彙編。
Ruby MRI (就是 Matz 寫的解釋器)及後面出現的 YARV (Yet another Ruby VM,現在是 Ruby 1.9 的官方解釋器)都是用 C 語言實現的,另外還有 JRuby(Java)、MacRuby(Objective-C)、Rubinuis(C++)、ironRuby(基於 .Net)等。
老版本的編譯器編譯自己語言的新版本編譯器C是C++是
Go是
其它大部分是用C/C++來編譯Perl是C實現的,不過Perl6項目為了自舉問題開發NQP(Not Quiet Perl)來實現Perl6。今年也有Moe等項目試圖用Java來實現Perl。
推薦閱讀:
※一個基本的用戶排序功能為什麼這麼難?
※Haseeb Qureshi:看我如何用Ruby來破解我的Reddit密碼
※2015 年的今天,Ruby on Rails 還有哪些獨特的價值?