自從.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的一次完整重寫。其中蘊含的原因有好多,以下是我隨便列出的幾個。
最初,我只是計劃支持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的目標用戶。