球拍(編程語言)

球拍
Linux上的Drracket
範例 多範式功能命令邏輯模塊化面向對象反射性
家庭 Lisp
設計 PLT Inc.
開發人員 PLT Inc.
首先出現 1995年1月28日
穩定版本
8.11.1 / 2023年11月29日
打字學科 動態靜態
平台 X86PowerPCSPARCMIPSARM
作業系統 跨平台
執照 MITApache 2.0
文件名擴展 .rkt
網站 球拍lang .org
主要實施
球拍球拍球拍到JavaScript(ES6)編譯器,使用Rpython的球拍實現
方言
打字球拍,frime,懶惰的球拍,塗鴉
被影響
艾菲爾計劃
受影響
clojure生鏽方案(R6RS)

球拍是一種通用多範式編程語言和一個多平台發行版,包括球拍語言,編譯器,大型標準庫, IDE ,開發工具,以及一組其他語言,包括打字球拍(包括球拍的姐妹語言)帶有靜態類型檢查器),Swindle,Frime,Lazy Concet,R5RS和R6RS方案,塗鴉,Datalog,Racklog, Algol 60和幾種教學語言。

球拍語言是LISP的現代方言,也是方案的後代。它被設計為編程語言設計和實施的平台。除了核心球拍語言外,球拍還用於參考編程語言的家族和一組支持球拍開發的工具。球拍還用於腳本計算機科學教育和研究。

球拍平台提供了球拍語言的實現(包括運行時系統,庫和編譯器,支持多種編譯模式:機器代碼,機器獨立,解釋和JIT)以及Drracket集成的開發環境(IDE)(IDE) 。 “球拍”由ProgramByDesign Outreach計劃使用,該計劃旨在將計算機科學變成“文科課程中必不可少的一部分”。

核心球拍語言以其廣泛的宏觀系統而聞名,該系統可以創建嵌入式和特定領域的語言模塊等語言構造以及帶有不同語義的球拍的單獨方言。

該平台分發是根據Apache 2.0MIT許可證分配的免費和開源軟件。社區編寫的擴展和包裹可以上傳到球拍的包裝目錄

歷史

發展

Matthias Felleisen在1990年代中期創立了PLT Inc.,首先是一個研究小組,不久之後是一個專門為新手程序員生產教學材料的項目(講座,練習/項目,軟件)。 1995年1月,該小組決定根據方案開發一個教學的編程環境。馬修·弗拉特( Matthew Flatt)從libscheme, wxwidgets和其他一些免費系統中拼湊了Mred Mred Mred Mred。在隨後的幾年中,包括Flatt, Robby FindlerShriram Krishnamurthi ,Cormac Flanagan和許多其他團隊製作了新手計劃程序員的編程環境以及用於軟打字的研究環境。 Drscheme支持的主要開發語言被命名為PLT計劃。

同時,團隊開始為高中教師開展研討會,培訓他們在計劃設計和功能編程中進行培訓。與這些老師及其學生一起進行現場測試提供了指導發展的重要線索。

在接下來的幾年中,PLT添加了教學語言,代數步進,透明的讀取 - eval-print循環,基於構造函數的打印機以及許多其他創新,為Drscheme Drscheme提供了一種,從而產生了應用質量的教學計劃開發環境。到2001年,核心團隊(Felleisen,Findler,Flatt,Krishnamurthi)還根據其教學理念編寫並出版了他們的第一本教科書《如何設計計劃》

球拍宣言詳細介紹了推動球拍發展的原則,介紹了設計過程背後的評估框架,並詳細介紹了未來改進的機會。

版本歷史記錄

第一代PLT方案修訂介紹了用於大型模塊的大型編程的功能。版本42引入的單元 - 一流的模塊系統 - 以補充大規模開發的類。類系統獲得了功能(例如Java接口),並且在這些版本中也丟失了幾個功能(例如多個繼承)。該語言在許多連續的版本中演變,並在53版中獲得了里程碑的流行,從而導致了廣泛的工作和以下版本100,這將等同於當前流行版本系統中的“ 1.0”版本。

下一個主要修訂版名為200版,該版本引入了與宏合作的新默認模塊系統。特別是,模塊系統可確保分開運行時和編譯時計算以支持“語言塔”。與單元不同,這些模塊不是一流的對象

版本300向類系統引入了Unicode支持,外國庫支持和改進。後來,300系列通過添加JIT編譯器和切換到默認的世代垃圾集合,提高了語言運行時的性能

到下一個主要版本,該項目已切換到更常規的基於序列的版本編號。版本4.0介紹了#lang速記,以指定模塊所編寫的語言。此外,修訂引入了不變的對和列表,對細粒並行性的支持以及靜態類型的方言。

2010年6月7日,PLT計劃更名為球拍。重命名與版本5.0的發行版相吻合。隨後,使用所有平台上的本機UI工具包,在5.1版中的C ++中重寫了圖形用戶界面(GUI)後端。版本5.2包括一個背景語法檢查工具,一個新的繪圖庫,數據庫庫和新的擴展替補。版本5.3包括一個新的supdule功能,可選加載的模塊,新的優化工具,一個JSON庫和其他功能。版本5.3.1引入了Drracket的重大改進:默認情況下打開了背景語法檢查器,並添加了新的文檔預覽工具。

在6.0版中,球拍發布了其第二代軟件包管理系統。作為此開發的一部分,重新​​組織了主要的Drracket和球拍存儲庫,並將其分成大量的小軟件包,使得可以安裝最小的球拍並僅安裝所需的軟件包。

球拍的第7版已發布,新的宏觀擴展器用球拍編寫,這是支持遷移到Chez Schemementime系統系統並支持多個運行時系統的準備工作。 2019年11月19日,球拍7.5發布。球拍7.5的許可證不太限制。他們現在使用Apache 2.0許可證或MIT許可證。

2021年2月13日,球拍8.0發布。球拍8.0標誌著第一個發行版,其中帶有CHEZ計劃運行時系統的球拍(稱為球拍CS)是默認實現。球拍CS更快,更易於維護和開發,與現有的球拍程序向後兼容,並且具有更好的並行垃圾收集。

特徵

球拍的核心語言包括模塊詞彙封閉尾巴呼叫劃界連續性,參數(流體變量),軟件合同綠色線程操作系統線程等。該語言還帶有原語,例如事件空間和託管人,這些語言控制資源管理,並使該語言像加載和管理其他程序的操作系統一樣起作用。該語言的進一步擴展是使用強大的宏系統創建的,該系統與模塊系統一起,自定義解析器可以控制語言的所有方面。球拍中的大多數語言構造以基本語言的宏實現。其中包括一個Mixin類系統,一個像ML模塊系統中不透明屬性的組件(或模塊)系統以及模式匹配

此外,該語言具有高階編程語言的第一個合同系統。球拍的合同系統靈感來自Eiffel合同工作的設計,並將其擴展到高階值,例如一流的功能,對象,參考單元等。例如,可以確保通過合同檢查的對象最終調用合同檢查。

球拍包括字節碼JIT (JIT)編譯器。字節碼編譯器會產生由球拍虛擬機運行的內部字節碼格式,並且JIT編譯器在運行時將字節碼轉換為機器代碼。

自2004年以來,該語言還與Planet一起發貨,Planet是一個集成到模塊系統的軟件包管理器,以便可以透明地導入和使用第三方庫。此外,Planet還具有內置版本控制策略,可防止依賴地獄

在2014年底,球拍的大部分代碼已移至與主代碼庫分開的新包裝系統。這個新的包裝系統由名為RACO的客戶程序服務。新的軟件包系統提供的功能少於行星。傑伊·麥卡錫(Jay McCarthy)在“球拍博客”上的博客文章解釋了更改的理由以及如何復制較舊的系統。

綜合語言可擴展性和宏

LISP家族中最清楚地區分球拍的功能是其集成的語言擴展性功能,這些功能支持構建新的領域特定通用語言。球拍的可擴展性功能內置在模塊系統中,以允許對語法的上下文敏感和模塊級的控制。例如,可以覆蓋#%app句法形式以更改功能應用程序的語義。同樣, #%module-begin形式允許對整個模塊進行任意靜態分析。由於任何模塊都可以通過#lang符號用作語言,因此這實際上意味著可以對語言的任何方面進行編程和控制。

模塊級的可擴展性功能與類似方案的衛生宏系統相結合,該系統提供的功能比LISP的S-表達操縱系統更多的功能,該方案84的衛生擴展Syntax Macros或R5RS語法規則。確實,可以說宏系統是編譯器擴展程序的精心調整的應用程序編程接口(API)。使用此編譯器API,程序員可以以使其與內置語言構造完全沒有區別的方式添加功能和整個域特定語言

球拍中的系統已用於構建整個語言方言。這包括鍵入的球拍,這是一個逐漸鍵入的球拍方言,可以將遷移從未到鍵入代碼,懶惰的球拍(一種帶有懶惰評估的方言)和Hackett,將Haskell和球拍結合在一起。教學編程語言Pyret最初是在球拍中實現的。

其他方言包括FRTIME(功能性反應性編程),塗鴉(文檔語言),幻燈片(演示語言)和多種教育語言。

球拍的核心分佈提供了庫,以幫助開發編程語言。此類語言不僅限於基於S-表達的語法。除了常規的基於可讀取的語法擴展外,指令#lang還可以調用任意解析器,可以使用解析器工具庫來實現。有關這種語言的示例,請參見球拍邏輯編程

編程環境

該語言平台提供了一個自我託管的IDE ,名為Drracket,基於延續的Web服務器圖形用戶界面和其他工具。作為帶有庫(如常見腳本語言)庫的可行腳本工具,它可用於拼寫腳本。它可以解析命令行參數並執行外部工具。

Drracket IDE

Drracket(以前是Drscheme)被廣泛用於教授計劃或球拍的入門計算機科學課程中,並因其簡單性和吸引初學者程序員而受到稱讚。 IDE最初是為了與Teacheme一起使用的!東北大學的推廣工作(現為programbydesign ),以及許多附屬大學,以吸引高中生進入大學一級的計算機科學課程。

編輯器為語法和運行時錯誤,括號匹配,調試器和代數步進提供了突出顯示。它的學生友好功能包括對多個“語言級別”的支持(初學者,中級學生等)。它還為高級程序員提供了集成的庫支持和復雜的分析工具。此外,模塊瀏覽器支持面向模塊的編程,輪廓視圖,集成的測試覆蓋範圍測量以及重構支持。它提供了集成的,上下文敏感的訪問權限,以訪問名為“幫助台”的廣泛的超鏈接幫助系統。

drracket可用於WindowsMacOSUnixLinux ,其中X Window System和程序在所有這些平台上都相似。

代碼示例

這是一個微不足道的Hello World節目:

#lang racket
"Hello, World!"

運行此程序會產生輸出:

“你好世界!”

這是一個略微瑣碎的程序:

該程序的結果,如Drracket所示
#lang racket
(require 2htdp/image)
(let sierpinski ([n 8])
  (if (zero? n)
    (triangle 2 'solid 'red)
    (let ([t (sierpinski (- n 1))])
      (freeze (above t (beside t t))))))

該程序取自球拍網站,繪製了一個嵌套到深度8的Sierpinski三角形

使用#lang指令,可以用不同的方言來編寫源文件。這是類型球拍中的階乘程序的一個示例,這是一個靜態打字的球拍方言:

#lang typed/racket
(: fact (Integer -> Integer))
(define (fact n)
  (if (zero? n) 1 (* n (fact (- n 1)))))

實施

球拍目前有兩個實現。在各種體系結構上都支持Linux,Windows和MacOS,並在第8.8版(2023)中得到支持。默認實現使用CHEZ方案增量編譯器和運行時。替代實現會生成無獨立的字節碼,並使用即時彙編來生成加載機器代碼。 [1]

此外,還有實驗實現:

  • congetscript是JavaScript(ES6)編譯器的實驗球拍。它允許程序員同時使用JavaScript和球拍的生態系統,並旨在使這種互操作性盡可能平滑。
  • Pycket是使用Rpython框架生成的球拍實現。

應用和實際用途

除了具有編程語言理論的基礎之外,球拍還設計為生產系統的通用語言。因此,球拍發行版具有涵蓋系統和網絡編程的廣泛庫,網絡開發,基礎操作系統的統一接口,動態的外部功能接口,正則表達式的幾種口味,lexer/parser生成器,邏輯編程,邏輯編程和一個完整的GUI框架。

球拍具有一些對商業語言有用的功能,其中包括在Windows,Macos和Unix下編譯獨立可執行文件,該功能, MACOS和UNIX(集成開發環境(IDE)(IDE))以及單元測試框架中包含的探險儀和調試器

球拍已用於商業項目和Web應用程序。一個值得注意的例子是黑客新聞網站,該網站在ARC上運行,該網站是在球拍中開發的。頑皮的狗在幾種視頻遊戲中都將其用作腳本語言。

球拍被用來通過Bootstrap計劃中的遊戲設計來教學學生代數。