래킷 (프로그래밍 언어)

래킷(Racket, 이전 이름: PLT Scheme)은 리스프-스킴 계열의 범용 프로그래밍 패러다임이다. 설계적 목표 중 하나는 언어 제작, 설계, 구현의 플랫폼의 역할을 하는 것이다. 이 언어는 스크립팅, 범용 프로그래밍, 컴퓨터 과학 교육, 연구와 같은 다양한 문맥에 사용된다. 플랫폼은 래킷 언어의 구현체(복잡한 런타임 시스템, 다양한 라이브러리, JIT 컴파일러 등)를 제공하며 이 외에도 래킷 자체에서 작성되는 닥터래킷(DrRacket, 이전 이름: DrScheme)이라는 개발 환경도 함께 제공된다. IDE 및 이와 동반되는 프로그래밍 커리큘럼은 프로그램바이디자인(ProgramByDesign) 아웃리치 프로그램에 사용되는데, 이는 컴퓨팅과 프로그래밍을 필수적인 교양 교육 과정의 일부로 전환하려는 시도이다. 중심 언어는 확장 매크로 시스템으로 잘 알려져 있으며, 임베디드 및 도메인 특화 언어, 또 클래스나 모듈과 같은 언어 구성체, 각기 다른 시맨틱스를 갖춘 구별된 래킷 방언들의 제작을 가능케 한다. 플랫폼 배포의 경우 GNU 약소 일반 공중 사용 허가서(LGPL) 라이선스 하에서 자유-오픈 소스 소프트웨어로 배포된다. 공동체가 만든 확장 기능과 패키지들은 래킷의 중앙 패키지 카탈로그에 업로드된다. 다음은 사소한 헬로 월드 프로그램이다: #lang racket "Hello, World!" 이 프로그램을 실행하면 다음과 같이 출력된다: "Hello, World!" 다음은 조금 덜 사소한 프로그램이다: #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까지 네스트(nested)된 시에르핀스키 삼각형을 그린다. #lang 디렉티브를 사용하여 각기 다른 래킷으로 소스 파일을 생성할 수 있다. 다음은 래킷의 정적 타이핑 변종인 Typed Racket에서의 팩토리얼 프로그램의 예시이다. #lang typed/racket (: fact (Integer -> Integer)) (define (fact n) (if (zero? n) 1 (* n (fact (- n 1))))) “Racket v8.14”. 2024년 8월 19일. 2024년 8월 12일에 확인함.  Tobin-Hochstadt, Sam; Gerard, Sage; Dueck, Joel; Flatt, Matthew; Software Freedom Conservancy; Chestek, Pamela (2019년 11월 15일). “Completing Racket's relicensing effort”. 2019년 12월 27일에 확인함.  “DrRacket Files”. 2019년 7월 21일에 확인함. The standard file extension for a Racket program file is ".rkt". The extensions ".ss", ".scm", and ".sch" are also historically popular.  Strickland, T.S.; Fellesisen, Matthias (2010). “DLS 2010: Contracts for First-Class Classes” (PDF).  Bonnaire-Sergeant, Ambrose (2012). 《A Practical Optional Type System for Clojure》 (학위논문). The University of Western Australia.  “Planet2 questions”. 2021년 6월 25일에 원본 문서에서 보존된 문서. 2020년 2월 16일에 확인함.  “Rust Bibliography”.  Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; 외. (August 2007). “Revised6 Report on the Algorithmic Language Scheme (R6RS)”. Scheme Steering Committee. 2013년 8월 12일에 원본 문서에서 보존된 문서. 2011년 9월 13일에 확인함.  “Welcome to Racket”. 2011년 8월 15일에 확인함.  “Dialects of Racket and Scheme”. 2011년 8월 15일에 확인함.  Flatt; Findler; Krishnamurthi; Felleisen (1999). 《Programming Languages as Operating Systems (or, Revenge of the Son of the Lisp Machine)》. International Conference on Functional Programming.  Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen (2001). “DrScheme: A Programming Environment for Scheme” (PDF). 《Journal of Functional Programming》.  Felleisen; Findler; Flatt; Krishnamurthi (2004). “The TeachScheme! Project: Computing and Programming for Every Student”. 《Journal of Computer Science Education》.  “Overview”. Program by Design. 2013년 5월 20일에 원본 문서에서 보존된 문서. 2011년 8월 17일에 확인함.  “Macros Matter”. 2007년 5월 3일. 2011년 8월 8일에 확인함.  Flatt, M.; Findler, R. B.; Felleisen, M. (2006). 〈Scheme with Classes, Mixins, and Traits〉 (PDF). 《Asian Symposium on Programming Languages and Systems》.  Flatt, M.; Felleisen, M. (1998). 〈Units: Cool Modules for Hot Languages〉. 《Programming Language Design and Implementation》.  Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). 〈Languages as Libraries〉 (PDF). 《Programming Language Design and Implementation》.  “Racket: Software License”. 2015년 10월 20일에 확인함.  래킷 - 공식 웹사이트 (영어) Racket source code repository - 깃허브 Package management system