Parrot 常見問題 - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- Parrot 常見問題 (http://www.webasp.net/article/8/7713.htm) |
| -- 作者:未知 -- 發佈日期: 2003-09-13 |
| //////////////////// //一般性問題// //////////////////// #什麼是Parrot? Parrot是為支持Perl6語言而新設計的解釋器。它被設計成一種獨立的虛擬機,可以用來執行從Perl5,Perl6等動態語(dynamic languages)編譯成的字節碼。理想中,Parrot能夠支持其他的動態,被編譯成字節碼(bytecode-compiled)的語言,如Python, Ruby和Tcl。 #為什麼叫Parrot? Parrot來源於Simon Cozens的愚人節玩笑,說的是Larry Wall和Guido van Rossum宣佈Perl和Python將合併。 #Parrot就是Perl6嗎? 否!Parrot是用來執行Perl6程序的。Perl6語言的定義正在被Larry Wall加工。Perl6的真正狀態仍然是一個迷,她會和今天我們看到的Perl充分的相似,以及需要一個運行時系統。 #今天我能夠使用Parrot嗎? 當然!Parrot正處於她執行的早期階段。使用Parrot最主要的方式是去寫Parrot的彙編代碼。你可以在Apache中使用Ask Bjorn Hansen的mod_parrot模塊來建立動態內容(dynamic content)。不過千萬不要用於產品的代碼中,那只是一個玩具。 #為什麼我要用Parrot彙編代碼編程? 很多的原因: *所有的人都在這麼做 *It's a neat hack. *你能夠享受是用彙編編程的樂趣而不必擔心系統的崩潰 嚴肅的說,使用Parrot彙編語言是一種充滿樂趣的挑戰,同時也是用來測試Parrot的最好的方式。 #什麼時候才能通過一種「真正」的編程語言來使用Parrot? 這要看你是怎麼看「真正」這個詞了。 *Leon Brocard發佈了一個Java字節碼到Parrot字節碼的編器。 *Gregor Purdy正在進行一種能夠直接面對Parrot字節碼的小語言Jako的方面的工作。 *Dan Sugalski和Jeff Goff已經開始了將Scheme編譯成Perl 字節碼方面的工作。 #Parrot是用什麼語言寫的? C. #Why not write it in insert favorite language here?(不曉得如何翻譯insert favorite language) Becuase of one of : *Not available everywhere. *Limited talent pool for core programmers. *Not fast enough #你為什麼不使用外部工具或者X庫(library X)? *許可證兼容性(License compatibility) Parrot有著一個古怪的許可證--她目前正在使用和Perl5同樣的許可證,這種許可證是GNU GPL和Artistic 許可證的分離,可以簡寫成Artistic | GPL。因此,Parrot的許可證和GNU GPL兼容,這意味著你可以把Parrot同GPL代碼相結合。 能夠進入核心解釋器的代碼必須歸入與Parrot一致的條款。我們連接進入解釋器的庫代碼(比如,用於Unicode的ICU庫)能夠被其他的許可證代替,只要他們自己的條款不禁止這樣做。 *平台兼容性 Parrot必須工作在所有的Perl5的平台上,以及少數特別的平台。Perl5可以在80個平台上運行;Parrot必須在Unix, Windows, Mac OS(X and Classic), VMS, Crays, Windows CE, and Palm OS等等。而她的處理器的構架將會是x86, SPARC, Alpha, IA-64, ARM, 和68x00(Palms and old Macs).如果某些東西不能在其中的一個平台/操作系統中工作,我們就無法在Parrot中使用它。 *速度,大小和適應性 Parrot不僅應該能夠,而且應該是高效的在這些平台上工作。根據不同編譯器,Parrot的核心大小是在250K到700K之間。這樣她就能夠在掌上系統上運行了。任何Parrot使用的庫必須足夠快,幾乎不存在性能的衝突;必須足夠小,幾乎不存在核心大小上的衝突;足夠強的適應性,能夠處理如Perl, Python, Tcl, Ruby, Scheme等的各種要求。 #為什麼用你們自己的虛擬機,而不是編譯成JVM/.NET? 那些虛擬機針對靜態類型語言的(statically typed languages)。比如Java, C# 和許多其他的語言都是靜態類型語言,而Perl不是。由於各種各樣的原因,意味著Perl若要是在那些虛擬機上運行會慢的多,所以針對Perl這樣的動態語言(dynamic language)我們設計了專門的解釋器。 #那麼,你們不能在JVM/.NET上運行了? 當然不是。他們不是我們的第一目標。我們首先建立自己的解釋器/虛擬機,然後才會開展基於JVM,.NET的工作。 /////////////////////////////////// //PARROT AND PERL// ////////////////////////////////// #為什麼重新實現Perl?(Why re-implement Perl) 好問題! 在2000年夏天,Larry wall宣佈是到了從新開始建立Perl的時候了,這包括Perl語言,語言的執行,那些志願去實現和維護語言的源碼社區的開發者,以及更大的使用Perl的程序員社區。 很多的原因促使我們開展的這個計劃: *Perl5是一個穩定的,可靠的,健壯的開發平台;她還很年輕,到Perl6正式發佈的以後。(證據:Perl4依然堅強的活著,而其實我們都想讓她消失) *若有需要,我們有將Perl5轉化成Perl6的能力。這保留了向後的兼容性。 *語言有修改的必要(The lauguage can stand some revision):格式並不屬於核心語言, typeglobs have outlived their unsefulness。通過修改語言,我們能使Perl更好。 *一些瑕疵應該被除去:一旦成功,系統應該返回TRUE來代替FALSE,localtime應該返回year 而不是 year-1900。 *用Perl代替C來寫Perl編譯器是一件非常好的事情. #你想用Perl來寫Perl編譯器? 當然!C, Java, Lisp, Scheme……實際上所有的其他的語言都是self-hoisting 的! #Parrot如何一起處理Perl5和Perl6? 我們還不清楚,這將依賴於Perl6語言的定義。但是,我們或許會根據編譯的是Perl5還是Perl6來選擇使用兩個不同的Perl編譯器。Larry曾經說過或許會使用一個package statement來聲明該文件是Perl5,但具體怎麼做,我們也不清楚。 #這將是Parrot運行Python, Ruby和Tcl代碼的方式嗎? 或許 |
| webasp.net |