Racket

Racket
运行于Ubuntu的DrRacket
编程范型多范型: 函数式, 反射式, 元编程, 面向语言, 面向对象, 过程式, 模块化, 逻辑式
语言家族Lisp/Scheme
實作者PLT Inc.
发行时间1995年,​29年前​(1995
当前版本
  • 8.12 (2024年2月8日;穩定版本)[1]
編輯維基數據鏈接
型態系統动态类型, 强类型, 静态类型
系统平台x86, PowerPC, SPARC, MIPS, ARM
操作系统跨平台
許可證LGPL
文件扩展名.rkt, .rktl, .rktd, .scrbl, .plt, .ss, .scm
網站racket-lang.org
衍生副語言
Typed Racket[2], Lazy Racket[3], Scribble[4], FrTime[5]
啟發語言
Scheme, Eiffel[6]
影響語言
Clojure[7]RustScheme[8]

Racket(原名 PLT Scheme[10][11])是個通用、多範型,屬於Lisp家族的函數式程序设计語言,它的設計目之一是為了提供一種用於創造設計與實作其它編程語言的平台,Racket被用於腳本程式設計、通用程式設計、電腦科學教育和學術研究等不同領域。

Racket有一個實作平台,包含了執行環境、函数庫、即時編譯器(JIT compiler)等等,還有提供一個以Racket本身寫成的開發環境 DrRacket[12] (原名 DrScheme)。

Racket平台的發行版本是免費且開放原始碼的,以GNU宽通用公共许可证授權發行,所有由社群所編寫的擴充功能和套件都會被上傳到 PLaneT(一個網頁套件發佈系統)。

基於 Racket 實現的 Scribble 可以用來構建HTMLPDF(依賴 LaTeX),Racket 官方文檔就是基於這個語言來編寫的。

开发原则

Racket的开发基于以下原则:[13]

  • 程式语言的目的是表述和解决问题,这一过程通常在特定的情境中发生,该情境有一定的描述语言,因此Racket应该是能够创制新程式语言的程式语言;
  • 基于上述的表述问题的方式,问题系统可视为多语言的相互联系的组件的集合,Racket应当能够提供足够的保护机制,允许实现各种语言的完整特性;
  • 与问题解决相关的在语言之外的机制,如项目和资源的管理,也可被Racket转换为语言构造。

歷史

開發

Matthias Felleisen在1990年代中期建立了PLT,一開始為一個研究團隊,不久後逐漸投入程式設計師入門教材的專案開發。

在1995年1月,這個團隊決定開發一個建立在 Scheme函數式程式語言上的教學用程式語言環境,Mattew Flatt 簡單的從 libscheme 中將 MrEd (Racket 的原始虛擬機器)、wxWidgets 與一些其他的免費系統結合,接下來的幾年內,由 Flatt、Robby Findler、Shriram Krishnamurthi、Cormac Flanagan 和其他許多人組成的團隊推出了 DrScheme,一個給 Scheme 程式設計新手的程式設計環境,也作為弱型別程式語言的研究環境,當時 DrScheme 主要支援的程式語言叫做 PLT Scheme。

在此同時,該團隊也開始為中學教師開設研習課程,教授他們學習程式設計與函數式程式設計,這些老師和他們的學生所做的現場測試提供了團對專案開發方向重要的依據,在接下來的幾年中,PLT 團隊為 DrScheme 加入了教學用語言,例如 代數步進器[14]讀取-求值-輸出循環、constructor-based printer 和其他許多發明,推出了一套有應用價值的程式教學環境。

2001年,核心團隊(Felleisen, Findler, Flatt, Krishnamurthi)也編纂和發行了他們的第一本教科書《程序设计方法》,融入了許多他們的教學理念。

在2010年6月7日, PLT Scheme被重命名为Racket[15]

代碼範例

杨辉三角形(代碼來自:rosettacode):

#lang racket
(define (next-row row)
  (map + (cons 0 row) (append row '(0))))
 
(define (triangle row rows)
  (if (= rows 0)
      '()
      (cons row (triangle (next-row row) (- rows 1)))))
 
(triangle (list 1) 5)

運行後顯示

'((1) (1 1) (1 2 1) (1 3 3 1) (1 4 6 4 1))

繪製迭代8次的 謝爾賓斯基三角形 (代碼來自:Racket 官網):

The result of this program, as shown in 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))))))

在代碼的第一行使用 #lang來使用不同的方言. 下面的範例使用 Racket 的一種靜態類型的方言 Typed Racket 計算階層。

#lang typed/racket

(: fact (Integer -> Integer))
(define (fact n)
  (if (zero? n) 1 (* n (fact (- n 1)))))

註釋

  1. ^ Racket v8.12. 
  2. ^ Typed Racket. [2014-03-05]. (原始内容存档于2020-11-11). 
  3. ^ Lazy Racket. [2014-03-05]. (原始内容存档于2021-04-19). 
  4. ^ Scribble. [2014-03-05]. (原始内容存档于2022-12-11). 
  5. ^ FrTime. [2014-03-05]. (原始内容存档于2023-01-16). 
  6. ^ Strickland, T.S.; Fellesisen, Matthias. DLS 2010: Contracts for First-Class Classes (PDF). 2010 [2014-03-05]. (原始内容 (PDF)存档于2013-05-23). 
  7. ^ Bonnaire-Sergeant, Ambrose. A Practical Optional Type System for Clojure (学位论文). The University of Western Australia. 2012. 
  8. ^ Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; et al. Revised6 Report on the Algorithmic Language Scheme (R6RS). Scheme Steering Committee. August 2007 [2011-09-13]. (原始内容存档于2013-06-25).  引文格式1维护:显式使用等标签 (link)
  9. ^ https://blog.racket-lang.org/2024/02/racket-v8-12.html; 出版日期: 2024年2月8日; 检索日期: 2024年2月9日.
  10. ^ PLT Scheme. [2014-03-05]. (原始内容存档于2014-03-05). 
  11. ^ What does "PLT" stand for?. [2014-03-05]. (原始内容存档于2014-08-21). 
  12. ^ DrRacket. [2014-03-05]. (原始内容存档于2014-03-05). 
  13. ^ Matthias Felleisen; et al. The Racket Manifesto. [March 25, 2015]. (原始内容存档于2015年4月2日).  引文格式1维护:显式使用等标签 (link)
  14. ^ 存档副本 (PDF). [2014-03-12]. (原始内容存档 (PDF)于2013-04-30). 
  15. ^ From PLT Scheme to Racket. Racket-lang.org. [2011-08-17]. (原始内容存档于2013-05-30). 

外部連結

  • 官方网站
特征
 
对象系统
  • Common Lisp对象系统(CLOS)
  • CommonLoops英语CommonLoops
  • Flavors英语Flavors (programming language)
实现英语Programming language implementation
Common
Lisp
  • Allegro Common Lisp英语Allegro Common Lisp
  • Armed Bear Common Lisp英语Armed Bear Common Lisp(ABCL)
  • CLISP
  • Clozure CL
  • CMU Common Lisp(CMUCL)
  • Corman Common Lisp英语Corman Common Lisp
  • Embeddable Common Lisp(ECL)
  • GNU Common Lisp(GCL)
  • LispWorks英语LispWorks
  • Macintosh Common Lisp英语Macintosh Common Lisp
  • Mocl英语Mocl
  • Poplog英语Poplog
  • Steel Bank Common Lisp(SBCL)
  • Symbolics Common Lisp英语Genera (operating system)
  • Bigloo英语Bigloo
  • Chez Scheme
  • Chicken
  • Gambit
  • Gauche英语Gauche (Scheme implementation)
  • GNU Guile
  • Ikarus英语Ikarus (Scheme implementation)
  • IronScheme英语IronScheme
  • JScheme
  • Kawa英语Kawa (Scheme implementation)
  • Larceny
  • MIT/GNU Scheme
  • Racket
  • RScheme英语RScheme
  • Scheme 48
  • SCM
  • SIOD
  • STklos英语STklos
  • TinyScheme
  • Ypsilon英语Ypsilon (Scheme implementation)
  • OpenLisp英语OpenLisp
  • Easy-ISLisp
未标准化
 
  • Arc
  • AutoLISP
  • BBN LISP
  • Clojure
  • Dylan
  • Emacs Lisp
  • EuLisp英语EuLisp
  • Franz Lisp
  • GOAL英语Game Oriented Assembly Lisp
  • Hy
  • Interlisp英语Interlisp
  • 知识工程环境英语Knowledge Engineering Environment
  • LispKit
  • *Lisp英语*Lisp
  • Le Lisp
  • LFE英语LFE (programming language)
  • Lisp Machine Lisp英语Lisp Machine Lisp
  • Maclisp
  • MDL英语MDL (programming language)
  • MLisp英语MLisp
  • MultiLisp英语MultiLisp
  • newLISP
  • NIL英语NIL (programming language)
  • PC-LISP英语PC-LISP
  • PicoLisp
  • Portable Standard Lisp英语Portable Standard Lisp
  • RPL英语RPL (programming language)
  • S-1 Lisp英语S-1 Lisp
  • SKILL
  • Spice Lisp英语Spice Lisp
  • T英语T (programming language)
  • Zetalisp英语Zetalisp
Logo
  • MSWLogo英语MSWLogo
  • NetLogo
  • StarLogo英语StarLogo
  • UCBLogo英语UCBLogo
  • Common Lisp界面管理器英语Common Lisp Interface Manager
  • McCLIM英语McCLIM
  • Genera英语Genera (operating system)
  • Scsh英语Scsh
  • Lisp机器
  • TI Explorer英语TI Explorer
  • Space-cadet键盘英语Space-cadet keyboard
实践
社群
技术标准
  • Scheme实现要求英语Scheme Requests for Implementation
  • Common Lisp HyperSpec英语Common Lisp HyperSpec
  • X3J13英语X3J13
教育
图书
教程
  • ProgramByDesign英语ProgramByDesign
组织
商业
  • 苹果公司
  • BBN
  • Harlequin英语Harlequin (software company)
  • Lucid Inc.英语Lucid Inc.
  • Symbolics英语Symbolics
  • Xanalys英语Xanalys
教育
人士
 
Common
Lisp
  • Scott Fahlman英语Scott Fahlman
  • Richard P. Gabriel英语Richard P. Gabriel
  • Philip Greenspun英语Philip Greenspun
  • David A. Moon英语David A. Moon
  • Kent Pitman英语Kent Pitman
  • Guy L. Steele Jr.
  • Daniel Weinreb英语Daniel Weinreb
Logo
  • 分类 语言
  • 分类 家族
  • 列表级条目 列表英语List of Lisp-family programming languages

范型
过程式
面向对象
多范型
函数式
逻辑式
脚本语言
动态语言
Shell语言
ECMA-262
特定平台
.NET
JVM
特定领域
科学计算
GPU计算
  • Cg/HLSL
  • GLSL
  • Brook英语BrookGPU
  • OpenCL
  • CUDA/PTX英语Parallel Thread Execution
  • Futhark
  • SPIR-V英语Standard Portable Intermediate Representation
数据查询
可视化
传媒设计
 
其它
  • 分类 目录
  • 列表级条目 列表
  • 历史
  • 比较英语Comparison of programming languages
  • 时间线英语Timeline of programming languages