Racket 這個語言的潛力怎麼樣?有什麼生產環境使用的例子嗎?
脫胎於 Scheme (並且通過宏包兼容),文檔齊備,有各種很高端大氣現代的功能(編譯,包管理,類型推導,模式匹配……),作為一個教學語言很不錯,同時看起來也非常 Real World,能用來寫 GUI 和 Web,自己的IDE用起來也挺舒服的。只是看起來社區比較小。
先回答樓主的問題。
# 關於生產環境
比較常舉的一個例子是著名的 Hacker News。Hacker News 是 Paul Graham 用他的 Arc 語言寫的,Arc 是基於 PLT Scheme (Racket 的前身)的。
還有很多例子可以在 Racket 的郵件列表上搜索到,比如 Matthias Felleisen 說 [1]:
# 關於社區社區確實不大,但已經足夠大。一個表現就是在 StackOverflow 上問問題很快就能夠得到回答。而且 Racket 的社區是非常專業並且友好的社區。程序員的世界裡有很多專業但不友好的社區,有很多友好但不專業的社區,甚至也有很多不專業也不友好的社區(比如知乎)。而得益於 Racket 的作者們既是頂級的程序語言專家,又是優秀的教師,Racket 的社區恰恰是既專業、又友好。Racket 的用戶也有很多是高校中的老師、教授和有長期業界經驗的程序員。這是一個高質量的社區。# 關於潛力Racket 是一門沒有多少炒作的語言,它會不會像現在某些紅得發紫的無聊語言那樣流行我真的不知道。但從各方面講它都是一門很優秀的語言,有一批理性而忠實的用戶。對我來說,我相信這些人的選擇。而且即使它沒有所謂的「潛力」,我也很願意花時間去學習它。;; --------------------------------------------------再說一下目前最高票數的答案,也就是 szzz 的答案。Boeing/USAF use Racket to control large, expensive telescope arrays.
szzz 的答案有很多值得商榷的地方,在我看來他可能是一名優秀的 C# 程序員,但他好像對 Lisp 及其方言並不熟悉。
整個答案用的一些翻譯很奇怪,但由於我也沒去了解過這些詞具體怎麼翻譯,就不講了。說一些非常明顯的地方。Lisp 的方言一向多如牛毛。此後 Lisp 僅剩下兩支方言
PLT Scheme 在 1994 年就已經發布了 [2]。另外 PLT Scheme 怎麼成為「科學計算」系統了?... 2008年 ... 同時美國東北大學另立爐灶,其主導的科學計算系統PLT Scheme開始迅猛發展
Lisp 運行效率低的問題是不是 Racket 解決的。當然 Racket 的效率是很高,可是像 SBCL 之類的 Common Lisp 實現早就已經很快了。;; --------------------------------------------------[1] http://lists.racket-lang.org/users/archive/2011-August/047356.html[2] Racket (programming language)從而徹底解決了Lisp程序運行效率低、不易發布的歷史
Racket真是一門很好的語言。scheme的精髓在於其簡潔,語法上高度的統一性,乃至與被人稱之為編程語言的皇后(比其他Lisp方言更甚之),而Racket作為一門教學語言,私以為它比scheme做得更優秀(我本人其實更喜歡scheme)。Racket有非常多的輪子,文檔完善,非常適合初學者,你可以去看看它的getting start,充滿趣味性,這門語言雖然繼承自scheme,它的目標卻遠不同於scheme,在Racket的主頁上,萬年不變的一句話就是:A programmable programming language,Racket的主張,就是將程序設計更多地往語言設計中靠攏,通過構建DSL來提升複雜系統的健壯性,正如其文檔指出,使用Racket不要把它看作一門語言,Racket里到處都是各種語言,這樣做存在兩面性,一方面會給維護者帶來困難,另一方面可以使設計和洽地融合起來,更多的輪子可以鼓勵初學者的積極性,這些輪子的構造本身,也含有豐富的知識等待我們去探索。
我敘述一下Lisp-&>Scheme-&>Racket的歷史
下面這段文字是本人和他人正在合著的《寫給C#程序員的Lisp入門》(Beginning Lisp for C# Developer)一書中的草稿節選,歡迎高手指出硬傷和補充:時間倒退到1958年,人工智慧之父約翰·麥卡錫(1927-2011),為了製造出具有人類智能的機器,在MIT(麻省理工學院)發明了一種符號處理語言。該語言借鑒了更早期IPL語言的特性,不同的是該語言以Lambda演算為基礎,而IPL語言以圖靈機為目標。
1960年,麥卡錫發表了那篇著名的論文《遞歸函數下的符號表達式及計算機器》(Recursive Functions of Symbolic Expressions and Their Computation by Machine),從此這種語言被命名為:Lisp,即列表處理器(List Processor),鑒於Lisp語言書寫格式的特殊性,將其語法命名為:符號表達式(S-Expression)。
Lisp最初誕生是為了純粹的科學研究,代碼執行像數學公式一樣,以人的大腦來演算。
直到麥卡錫的學生斯蒂芬·羅素將eval函數在IBM 704機器上實現後,才開啟了Lisp作為一種計算機語言的歷史。緊接著1962年,第一個完整的Lisp編譯器在MIT誕生,從此之後Lisp以MIT為中心向全世界傳播。在隨後的十來年間,Lisp程序不斷發展,併到了非常可怕的地步:各自為政,方言眾多,功能極其複雜。許多新功能以使用為目的,但設計並不合理(如:動態作用域)。
直到1975年,MIT誕生了一門新的Lisp方言——Scheme。它強調:簡約和可擴展,這和以往的眾多方言的設計理念——追求實用性和強大功能——都不同。Scheme語言定義了最少的必要基礎函數,並率先引入靜態作用域、衛生宏、第一類繼續等特性。Scheme的哲學:設計計算機語言不應該進行功能的堆砌,而應該儘可能減少弱點和限制,使剩下的功能顯得必要。在簡約的設計思想下,Scheme趨於極致的優雅,並作為計算機教學語言在教育界廣泛使用。
二十世紀七八十年代,Lisp的發展處於鼎盛時期,但各自為政的問題並沒有改善,甚至Lisp世界面臨分崩離析的危險。從1981年開始,在一個Lisp黑客組織的運作下,經過三年的努力整合後,於1984年推出了Common Lisp。不過由於Scheme的設計理念和其他Lisp版本不同,所以儘管Common Lisp借鑒了Scheme的一些特點,但沒有把Scheme整合進來。此後Lisp僅剩下兩支方言: Common Lisp和Scheme。(AutoLisp屬於Common Lisp分支,而EmacsLisp屬於Scheme分支)
從二十世紀九十年代開始,由於C++、Java、C#的興起,Lisp逐漸沒落。直到2005年後,隨著科學計算的升溫,動態語言JavaScript、Python、Ruby的流行,Lisp又漸漸的回到人們的視線。不過在Lisp的傳統陣地教育界,Python作為強有力的挑戰者對Scheme發起衝鋒;在2008年,MIT放棄了使用Scheme作為教學語言的SICP(計算機程序的構造和解釋)課程,而啟用Python進行基礎教學。同時美國東北大學另立爐灶,其主導的科學計算系統PLT Scheme開始迅猛發展;2010年,PLT Scheme改名為Racket。近幾年,The Racket Language連續成為年度最活躍語言網站,並駕齊驅的還有http://www.haskell-lang.org/。

Racket語言在Scheme的基礎上做了一些擴展:將Reading和Evaluating功能分離,使得程序員不僅可以通過擴展Evaluating,支持類型系統、懶模式等眾多語義功能,還能開發自己的Reader,用來支持各種不同語法的語言——這是PLT Scheme改名為Racket的主要原因——目前已經支持十來種語言。Racket還提供了豐富的開發包:從桌面程序到網路服務,從科學計算到語言處理。除此之外,Racket還單獨開發了IDE集成開發環境:DrRacket。最後,Racket能夠將Lisp程序像C#一樣編譯成位元組碼來運行,從而徹底解決了Lisp程序運行效率低、不易發布的歷史。
本書以Racket作為講解Lisp時使用的方言,貫穿所有章節。我們會在最後的附錄里給出Racket以及Lisp的另一種流行方言Common Lisp的差異對比。由於Common Lisp比較龐雜且設計上良莠不齊,不太適合於初學者。建議有志於Common Lisp的讀者還是先從Racket學起,在打好基礎的前提下轉向Common Lisp,這樣才能對那些錯誤設計具有甄別能力。個人覺得scheme racket 還是學習、造輪子的時候用的多。真正生產的話還是clojure.scala等實用。畢竟人家有這麼多包可以用。
看了一下 Racket 的主頁,標題上面兩句話:解決問題,創作語言。
這已經很好地說明了 Racket 的定位。
Common Lisp 由於 loop 和 format 兩個東西產生了內部兩大陣營,一部分人拒絕它們理由是:「連續七個原子沒有括弧?!這不 Lisp!!」
我是不會在意一個語言有多醜或者多優雅的,只要強大就行。
Racket 不是 Scheme,不是 CL,它就是 Lisp,那個可以自定義語法把自己變成一門適合解決實際問題的語言的東西。
順帶,幾個 Scheme 解釋器好像都兼容 Emacs Lisp。
Oculus CTO John Carmack is developing Scheme scripting language for VRhttps://groups.google.com/forum/#!msg/racket-users/RFlh0o6l3Ls/8InN7uz-Mv4J
無論是Racket還是Haskell,用於生產環境,這絕對不是一般的團隊能駕馭的了的,學習函數式語言更重要的是學習其中的思想
怎麼說呢,目前我正在跟Racket的創始人Matt Flatt學RACKET,聽別人講當時他的老師給他一筆錢讓他在搞的,結果等做完之後,他的老師成了在百度上能搜到的所謂的Racket之父,其實應該是我的老師Matt Flatt,就目前我所學的Racket來講,這算是一個底層編程語言了,寫習慣了C#,JAVA之後我入門是非常難反正。再換句話來說的話,叫one line programming?之前一直覺得MIPS難寫,寫了RACKET之後感覺MIPS真是友好地不是一點半點(就拿寫起來的難度上),到底RACKET到底有沒有什麼潛力,我覺得我沒有資格講,起碼也算對我的老師的一種尊重。但是我可以說一下RACKET的學習難度(可能一開始學編程 的人會容易一些?),寫習慣了Java和C#之後,特別喜歡流程性的東西,代碼寫在BLOCK里,電腦會逐條執行,直到最後,RACKET而言的話是one line programming,就是樓上各位說的,函數式編程 ,寫起來真是彆扭得不是一點半點,目前寫的東西用到循環的地方都是直接遞歸,寫習慣了循環的人估計是真的不喜歡遞歸,而且就我目前用的DRRACKET來說,操作過程 中,直要你的method沒寫完並且完全正確之前,你的DRRACKET一定會打紅線, 當然,比你用EMACS或者記事本寫C++就算有錯誤也不打紅線強多了,但是真的會逼死強迫症。總之,要是沒什麼特殊需求還是盡量不要接觸這個了,有時間去學點別的也比這個強。總之就是,不好學。
推薦閱讀:
※要獲得「機器學習或數據科學」的工作,到底選哪種編程語言更好?
※關於Vert.x的冷知識
※多維度分析2017年最熱門的編程語言
