程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> .NET語言三劍客:IronScheme, IronLisp和Xacc

.NET語言三劍客:IronScheme, IronLisp和Xacc

編輯:.NET實例教程

自從.NET DLR發布之後,社區裡大名鼎鼎的LeppIE,也就是Llewellyn Pritchard,積極致力於將Scheme與Lisp集成到.Net DLR中。最終的產品就是包含了集成開發環境的IronScheme與IronLisp,它們極大地豐富了開發者的開發體驗。最近,InfoQ編輯有幸聯 系到了LeppIE,請他談談關於IronScheme與IronLisp的開發近況。

James:是什麼動力促使你發布IronScheme的1.0版?

LeppIE:在我編程生涯之初,就癡迷於語言這門技術。我最初知道的LISP語言是LSharp。我深深地為其所吸引,因此決定將其合並到我正在進行的項目xacc.ide。最初的嘗試是為LSharp創 建一個編譯器,但我總是無法成功,最後不得不放棄這樣的努力。幾年之後,我與LSharp的作者再次談到開發一個LSharp編譯器的想法,這次准備使用 LINQ(我始終認為LINQ非常適用於Scheme,因為Scheme只要求一些基本的語法結構)。Rob Blackwell(LSharp的作者)向我提到了他即將會為LSharp發布DLR。這讓我為之振奮,並決定等待它的發布。不到一個月的時間,DLR 發布了,而我則在第一時間對它進行了研究。我不曾真正給予LSharp任何創新的設計思想,只是試圖基於LSharp進行開發。一個月後,我公開發布了 IronLisp,它是LISP的另外一種語言。它的發布對我而言可謂好壞參半。好處在於我通過社區獲得了許多有價值的反饋,而壞處則是讓我認識到了並沒 有人願意再使用另一種LISP語言。在這個階段,LSharp為我展示了LISP語言的各種形式,同時還要感謝這些反饋,使得我開始引入Scheme。

IronScheme幾乎是對IronLisp的一次完整重寫。其中蘊含的原因有好多,以下是我隨便列出的幾個。

  • 需要遵循(或者盡量遵循)標准。我選擇的是Common LISP(CL)或Scheme。我選擇的Sheme語言規范(R5RS)只有大約50頁,包含了數百個procedures/constructs,而 在CL中卻有超過1000個。這種做法被證明是行之有效的,它使得我能夠將注意力放在語言的核心部分,而不用去擔心太多的細枝末節。目前, IronScheme正試圖遵循最近定稿的R6RS語言規范。它需要大約700個constructs/procedures,是之前版本的近3倍。目 前,IronScheme已經完成R6RS相關內容的80%-90%。
  • IronLisp存在幾個設計缺陷是我無法進行修改和完善的,而這些存在缺陷的功能最主要的目的則是使得IronLisp能夠更好地與CLR進行互操作。這是一個糟糕的錯誤,它會給IronLisp的發展帶來負面的影響,而我卻對此無能為力。
  • 充分地吸取IronLisp的前車之鑒。

最初,我只是計劃支持R5RS,但是隨著我對各種‘宏系統’的測試,我發現了psyntax ,它提供了Scheme共同體,該共同體包含了一個針對語法與庫系統的引用實現。讓我驚訝的是,IronScheme可以毫無障礙地“吞”下引導代碼 (Bootstrap Code,這種代碼針對於另外一種Schema而實現,我認為是Kawa),這就給了我一個R6RS實現的絕佳模板。由於psyntax友好地為幾乎所有 的Scheme‘宏’提供了實現,其中,只有幾個核心宏、過程與語義是必須被實現的,這包括一個reader/parser(無論何時它都屬於語言規范的 組成部分)。它的出彩之處在於它能夠很好地與CLR的方法相匹配,因此,大多數庫代碼都可以用C#編寫,雖然我希望在將來能夠將它們所有都包含在 Scheme中(我對於編寫Scheme的有限經驗使得這一部分內容被抽取出來,但這一過程仍然具有挑戰性)。

另一個重要的靈感則來自於Abdulaziz Ghuloum,他是psyntax 的其中一個作者,也是Ikarus 的作者,Ikarus是一個全新的遵循R6RS的Scheme,它具有一個極富沖擊力的實現方式。目前,它的運行速度比IronScheme快10-50倍。

James:誰是IronScheme的目標用戶。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved