래킷 (프로그래밍 언어)
패러다임 | 다중 패러다임: 함수형, 명령형, 논리형, 메타, 모듈성, 객체 지향, 반영 |
---|---|
계열 | 리스프 |
설계자 | PLT Inc. |
개발자 | PLT Inc. |
발표일 | 1995년 |
최근 버전 | 8.15[1] |
최근 버전 출시일 | 2024년 11월 5일 (3일 전) |
자료형 체계 | 동적, 정적, 스트롱 |
플랫폼 | x86, 파워PC, SPARC, MIPS, ARM |
운영 체제 | 크로스 플랫폼 |
라이선스 | 다중 라이선스 (아파치 라이선스 또는 MIT 허가서). 링크되는 라이브러리로 인한 LGPLv3의 바이너리 배포.[2] 버전 7.5 이전: LGPL |
파일 확장자 | .rkt[3] |
웹사이트 | racket-lang |
방언 | |
FrTime, Lazy Racket, Typed Racket, Scribble | |
영향을 받은 언어 | |
에펠,[4] 스킴 | |
영향을 준 언어 | |
클로저,[5] 러스트,[6][7] 스킴[8] |
래킷(Racket, 이전 이름: PLT Scheme)은 리스프-스킴 계열의 범용 프로그래밍 패러다임이다. 설계적 목표 중 하나는 언어 제작, 설계, 구현의 플랫폼의 역할을 하는 것이다.[9][10] 이 언어는 스크립팅, 범용 프로그래밍, 컴퓨터 과학 교육, 연구와 같은 다양한 문맥에 사용된다.
플랫폼은 래킷 언어의 구현체(복잡한 런타임 시스템,[11] 다양한 라이브러리, JIT 컴파일러 등)를 제공하며 이 외에도 래킷 자체에서 작성되는 닥터래킷(DrRacket, 이전 이름: DrScheme)이라는 개발 환경도 함께 제공된다.[12] IDE 및 이와 동반되는 프로그래밍 커리큘럼은 프로그램바이디자인(ProgramByDesign) 아웃리치 프로그램에 사용되는데, 이는 컴퓨팅과 프로그래밍을 필수적인 교양 교육 과정의 일부로 전환하려는 시도이다.[13][14] 중심 언어는 확장 매크로 시스템으로 잘 알려져 있으며, 임베디드 및 도메인 특화 언어, 또 클래스나 모듈과 같은 언어 구성체, 각기 다른 시맨틱스를 갖춘 구별된 래킷 방언들의 제작을 가능케 한다.[15][16][17][18]
플랫폼 배포의 경우 GNU 약소 일반 공중 사용 허가서(LGPL) 라이선스 하에서 자유-오픈 소스 소프트웨어로 배포된다.[19] 공동체가 만든 확장 기능과 패키지들은 래킷의 중앙 패키지 카탈로그에 업로드된다.
코드 예제
[편집]다음은 사소한 헬로 월드 프로그램이다:
#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.15”. 2024년 11월 5일. 2024년 11월 7일에 확인함.
- ↑ 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