經過8年的開發,Lisp Flavoured Erlang(LFE)達到了1.0版本,將Lisp編程穩定支持帶到了Erlang虛擬機上(BEAM)。LFE由Erlang最初開發者之一的Robert Virding創建。
LFE是一個Erlang編譯器的Lisp–2(即類Common Lisp)前端,這意味著它允許基于宏的元編程,并支持使用遞歸和高階函數。為了同Erlang的理念保持一致,LFE采用了一種消息傳遞參與者模型,該模型嚴格執行一種“無共享”范式,并完全支持模式匹配。由于它生成的代碼同Erlang百分之百兼容,所以LFE可以同普通的Erlang和使用開放電信平臺(OTP)的應用程序完美共存,其中,OTP是Erlang中一個中間件和庫的集合,旨在支持創建高可用、并發、可擴展的架構。
對于使用Erlang和LFE定義一個列表元素求和的遞歸函數的語法,下面的代碼片段提供了一個基本的比較:
Erlang:
sum(L) -> sum(L,0).
sum([], Total) -> Total;
sum([H|T], Total) -> sum(T, H+Total).
LFE:
(defun sum (l) (sum l 0))
(defun sum
(('() total) total)
(((cons h t) total) (sum t (+ h total))))
按照Lisp慣例,LFE可以通過REPL使用,這使得試用和試驗這門語言的特性更容易。REPL及其他用于任務管理、項目創建和依賴管理的工具均由lfetool項目提供。它可以通過Docker運行docker pull lfex/lfe進行安裝,其中會包含創建和運行LFE項目所需的所有組件。
還有一點值得注意,LFE維護者承擔起了編寫《計算機程序的構造和解釋》LFE版本的任務,該書是Gerald Jay Sussman和Hal Abelson的經典著作。不過,這項工作目前尚處于準備階段。
為了了解更多關于這門語言的信息,InfoQ采訪了lfetool及許多LFE庫的維護者Duncan McGreggor。
經過多年的開發之后,LFE近日達到了1.0版本。這意味著什么?對于在生產環境中使用,您如何評價LFE的穩定性或準備狀態?
Robert以前已經在LFE郵件列表和推特上提到過這一點,但v1.0本質上是隨意定的。對于1.0版本,它已經準備好很長一段時間了。實際上,據我們了解,有多家知名公司和少數創業公司在生產環境中使用了LFE。其中有一部分已經在生產環境中使用LFE幾年了。這很容易理解,因為LFE的編譯結果同Core Erlang百分之百兼容。Erlang已經在生產環境中穩定運行幾十年了。
在Erlang虛擬機上使用一門類Lisp語言有什么好處呢?
關于Lisp的好處,就是從60年代開始人們所說的那些:靈活性和通用性(借助REPL、宏、同像性、輕松創建DSL的能力,等等。)將這些好處同Lisp社區數十年來所做的、可供LFE借鑒的有關語言/庫的工作相結合,你會有非常令人印象深刻的資源可供汲取。雖然任何現代Lsip都可以添加Erlang的核心特性,諸如高并發和容錯功能,但對于需要創建分布式系統的Lisper而言,LFE有點讓夢想變成現實。
您可以分享一些關于LFE路線圖的見解嗎?LFE SICP的開發速度如何?
現在,對于LFE,其中一個最為優先的事項是更新文檔(合并、更新、支持多版本、讓用戶/讀者更容易貢獻)。為了讓LFE社區成員統一到單個實用的用戶體驗上,相關工作值得我們花幾年去做。那有許多工作要做!我們已經有了一個新的設計,目前正在探索從多個文檔源生成內容。關于這一點,我們緩慢但穩步地推進,希望這些工作會受到LFE社區的歡迎。
有關將SICP轉換成LFE的工作過去停滯了(由于主要編者的工作安排),但受到近來文檔工作的鼓舞,那項工作已經重啟。上周已經進行了多項支持性更新——很快會有更多的內容。
LFE托管在GitHub上,可以從Homebrew、Docker和源代碼安裝。
查看英文原文:LFE Brings Lisp to the Erlang Virtual Machine