라켓(프로그래밍 언어)

Racket (programming language)
라켓
Racket-logo.svg
Drracket.png
Linux에서의 DrRacket
패러다임멀티패러다임: 기능, 명령, 논리, 메타, 모듈러, 객체 지향, 반사성
가족리스프
설계자PLT 주식회사
개발자PLT 주식회사
처음 등장한1995년, 27년(연간)
안정된 릴리스
8.5[1] / 2022년 5월 1일; 2개월 전 (2022년 5월 1일)
타이핑 분야다이내믹, 스태틱, 스트로크
플랫폼x86, PowerPC, SPARC, MIPS, ARM
OS크로스 플랫폼
면허증.MIT 또는 Apache 2[2].0
파일 이름 확장자.rkt[3]
웹 사이트racket-lang.org
사투리
타이핑된 라켓, FrTime, 게으른 라켓, 낙서
영향을 받다
에펠,[4] 스킴
영향받은
클로저,[5] ,[6][7] 스킴[8]

는 라켓 언어, 컴파일러, 큰 표준 라이브러리, IDE, 개발 도구 및 추가 언어의 Typed라켓(라켓의 정적 type-checker 와 남매 아닌 언어), 사기 치다, FrTime, 게으름벵이는 라켓, R5RS &, R6을 포함한 세트를 포함하 라켓은 일반 다중 패러다임 프로그래밍 언어를 배우는 멀티 플랫폼 유통.RSScheme, Scribble, Datalog, Racklog, Algol 60 및 여러 교육 언어.

라켓어는 리스프의 현대 방언이며 스킴의 후손이다.프로그래밍 언어 설계 및 [9]구현을 위한 플랫폼으로 설계되었습니다.핵심 Racket 언어 외에도 Racket은 프로그래밍 언어[10] 패밀리와 [11]Racket 개발을 지원하는 도구 세트를 지칭하는 데 사용됩니다.라켓은 또한 스크립트 작성, 컴퓨터 과학 교육, 연구에도 사용된다.

Racket 플랫폼은 [13]Racket으로 작성된 DrRacket Integrated Development Environment(IDE; 통합 개발 환경)와 함께 Racket 언어(머신 코드, 머신 독립형, 인터프리터, JIT 등 여러 컴파일 모드를 지원하는 런타임 시스템,[12] 라이브러리 컴파일러 포함)를 구현합니다.라켓은 ProgramByDesign 아웃리치 프로그램에 의해 사용되며, 이 프로그램은 컴퓨터 과학을 "문과 커리큘럼에 없어서는 안 될 부분"[14][15]으로 만드는 것을 목표로 하고 있습니다.

핵심 Racket 언어는 임베디드 및 도메인 고유의 언어, 클래스 또는 모듈 의 언어 구성 및 서로 다른 [16][17][18][19]의미론을 가진 Racket의 개별 사투리를 만들 수 있는 광범위한 매크로 시스템으로 알려져 있습니다.

플랫폼 배포는 Apache 2.0 MIT [20]라이센스에 따라 배포되는 무료 오픈 소스 소프트웨어입니다.커뮤니티에 의해 작성된 확장자 및 패키지는 Racket의 패키지 카탈로그에 업로드될 수 있습니다.

역사

발전

Matthias Felleisen은 1990년대 중반에 PLT Inc.를 처음 연구 그룹으로 설립했으며, 곧이어 초보 프로그래머를 위한 교육학 자료(강의, 연습/프로젝트, 소프트웨어)를 제작하기 위한 프로젝트로 설립했습니다.1995년 1월, 그 그룹은 스킴에 근거해 교육학 프로그래밍 환경을 개발하기로 결정했다.Matthew Flatt은 Libscheme,[21] wxWidgets 및 기타 무료 시스템에서 [22]Racket의 원래 가상 머신인 MrEd를 조립했습니다.그 후 Flatt, Robby Findler, Shriram Krishnamurthi, Cormac Flanagan 등의 팀은 스킴 초보 프로그래머를 위한 프로그래밍 환경이자 소프트 [13]타이핑을 위한 연구 환경인 DrScheme를 제작했습니다.DrScheme가 지원하는 주요 개발 언어는 PLT Scheme로 명명되었습니다.

이와 동시에, 팀은 고등학교 교사들을 위한 워크숍을 실시하여 프로그램 설계와 기능 프로그래밍을 교육하기 시작했습니다.이 교사들과 그들의 학생들과의 현장 테스트는 개발을 지시하는 데 필수적인 단서를 제공했다.

이후 수년간 PLT는 DrScheme에 교육 언어, 대수적 스텝퍼,[23] 투명한 읽기 평가 인쇄 루프, 컨스트럭터 기반 프린터 및 기타 많은 혁신을 추가하여 애플리케이션 품질의 교육 프로그램 개발 환경을 만들었습니다.2001년까지 핵심 팀(펠라이젠, 핀들러, 플랫, 크리슈나무르티)도 교육 철학을 바탕으로 첫 번째 교과서인 프로그램 설계 방법을 집필하고 출판했다.

라켓[9] 매니페스토는 라켓 개발을 추진하는 원칙, 설계 프로세스의 배후에 있는 평가 프레임워크, 향후 개선의 기회 등을 상술하고 있습니다.

버전 이력

1세대 PLT Scheme 리비전에서는 모듈 및 클래스를 모두 갖춘 대규모 프로그래밍 기능이 도입되었습니다.버전 42에서는 대규모 [24]개발을 위한 클래스를 보완하기 위해 1등급 모듈 시스템인 유닛이 도입되었습니다.클래스 시스템은 기능(예: Java 스타일 인터페이스)을 얻었으며 이러한 [16]버전 전체에서 여러 기능(예: 다중 상속)을 잃었습니다.이 언어는 다수의 연속 버전을 통해 발전하여 버전 53에서 큰 인기를 끌었고, 이후 버전 100으로 이어지는 광범위한 작업이 이루어졌으며, 이는 현재 널리 사용되는 버전 시스템의 "1.0" 릴리즈에 해당합니다.

다음 주요 리비전은 버전 200으로 명명되었으며 [24]매크로와 연계하는 새로운 디폴트모듈 시스템이 도입되었습니다.특히 모듈 시스템은 [25]"언어의 탑"을 지원하기 위해 런타임 계산과 컴파일 시간 계산이 분리되도록 한다.유닛과 달리 이들 모듈은 퍼스트클래스 객체가 아닙니다.

버전 300에서는 Unicode 지원, 외부 라이브러리 지원 및 클래스 [24]시스템에 대한 개선이 도입되었습니다.이후 300 시리즈는 JIT 컴파일러와 기본 세대 가비지 컬렉션으로의 스위치를 추가하여 언어 런타임의 성능을 향상시켰습니다.

다음 메이저 릴리즈까지 이 프로젝트는 보다 전통적인 시퀀스 기반 버전 번호 부여로 전환되었습니다.버전 4.0에서는#lang모듈을 기술하는 언어를 지정합니다.또한, 개정안은 불변의 쌍과 목록, 세분화된 병렬화 지원 및 정적 유형 [26]사투리를 도입하였다.

2010년 6월 7일, PLT Scheme는 [27]라켓으로 이름을 변경하였다.버전 5.0 출시와 동시에 이름이 변경되었습니다.그 후 Graphical User Interface(GUI; 그래피컬사용자 인터페이스) 백엔드는 모든 [22]플랫폼에서 네이티브 UI 툴킷을 사용하여 버전 5.1의 C++에서 다시 작성되었습니다.버전 5.2에는 백그라운드 구문 검사 도구, 새로운 플로팅 라이브러리, 데이터베이스 라이브러리 및 새로운 확장 [28]REP가 포함되어 있습니다.버전 5.3에는 옵션으로 로드된 모듈,[29] 새로운 최적화 도구, JSON 라이브러리 및 기타 기능을 [30]위한 새로운 서브모듈 기능이 포함되어 있습니다.버전 5.3.1에서는 DrRacket이 대폭 개선되었습니다.기본적으로 백그라운드 구문 체커가 켜져 있고 새로운 문서 미리보기 도구가 추가되었습니다.[31]

버전 6.0에서 Racket은 2세대 패키지 관리 시스템을 출시했다.이 개발의 일환으로 주요 DrRacket 및 Racket 저장소를 재구성하여 대규모 소형 패키지 세트로 분할하여 최소한의 라켓을 설치하고 [32]필요한 패키지만 설치할 수 있게 되었습니다.

버전 7의 Racket은 Chez Scheme 런타임 시스템으로의 이행과 다중 런타임 [33]시스템 지원을 위한 준비의 일환으로 Racket에 작성된 새로운 매크로 익스팬더와 함께 출시되었습니다.[34] 2019년 11월 19일 라켓 7.5가 출시되었다.라켓 7.5의 라이센스는 덜 제한적이었다.이제 Apache 2.0 라이센스 또는 MIT [35][36]라이센스를 사용합니다.

2021년 2월 13일, 라켓 8.0이 출시되었습니다.Racket 8.0은 Chez Scheme 런타임시스템(Racket CS)을 사용한 Racket이 디폴트 실장되어 있는 최초의 릴리스입니다.Racket CS는 기존 Racket 프로그램과의 하위 호환성이 뛰어나고 유지 보수 [37]및 개발이 용이하며 병렬 가비지 수집이 용이합니다.

특징들

Racket의 핵심 언어에는 매크로, 모듈, 어휘 폐쇄, 테일 콜, 구분된 연속성,[38] 매개 변수(유체 변수), 소프트웨어 계약,[39] 녹색 스레드 및 OS [40][41][42]스레드 등이 포함됩니다.또한 이 언어는 리소스 관리를 제어하고 다른 프로그램을 [12]로드 및 관리하기 위한 운영 체제처럼 작동할 수 있는 이벤트 영역 및 관리자와 같은 기본 요소를 제공합니다.이 언어에 대한 추가 확장은 모듈 시스템 및 커스텀 파서와 함께 언어의 [43]모든 측면을 제어할 수 있는 강력한 매크로 시스템으로 작성됩니다.Racket의 언어 구성 요소는 대부분 기본 언어로 매크로로 구현됩니다.여기에는 믹스인 [16]클래스 시스템,[17] ML 모듈 시스템의 불투명한 설명만큼 표현력이 뛰어난 컴포넌트(또는 모듈) 시스템 및 패턴 매칭이 포함됩니다.

또, 이 언어는, 상위 프로그래밍 언어의 [44]제1 계약 시스템을 특징으로 한다.Racket의 계약 시스템은 Effel을 위한 Design by Contract work에서 영감을 받아 First-class 기능, 객체, 레퍼런스 셀 등 고차적인 가치로 기능하도록 확장되었습니다.예를 들어 계약에 의해 체크된 객체는 메서드가 최종적으로 호출될 때 계약을 체크하도록 보장할 수 있습니다.

라켓에는 바이트 코드와 JIT(JIT) 컴파일러가 모두 포함되어 있습니다.바이트코드 컴파일러는 Racket 가상 머신에 의해 실행되는 내부 바이트코드 형식을 생성하고, JIT 컴파일러는 런타임에 바이트코드를 머신코드로 변환합니다.

2004년 이후 이 언어에는 PLaneT도 포함되어 있습니다.PLaneT는 모듈 시스템에 통합되어 있기 때문에 서드파티 라이브러리를 투과적으로 Import하여 사용할 수 있습니다.또한 PLaneT에는 의존성 지옥을 [45]방지하기 위한 내장 버전 정책이 있습니다.

2014년 말, Racket의 코드 대부분은 메인 코드 베이스에서 분리된 새로운 패키징 시스템으로 이동되었습니다.이 새로운 패키징 시스템은 raco라는 이름의 클라이언트 프로그램에 의해 서비스됩니다.새로운 패키지 시스템은 PLaneT보다 적은 기능을 제공합니다.Racket 블로그에 게재된 Jay McCarthy의 블로그 투고에서는 변경 이유와 오래된 시스템을 [46]복제하는 방법에 대해 설명합니다.

통합된 언어의 확장성과 매크로

Lisp 패밀리의 다른 언어와 가장 명확하게 구별되는 기능은 새로운 도메인 고유의 범용 언어 구축을 지원하는 통합 언어 확장성 기능입니다.Racket의 확장성 기능은 문맥에 따라 [18]구문을 모듈 수준에서 제어할 수 있도록 모듈 시스템에 내장되어 있습니다.예를 들어,#%app통사적 형식을 재정의하여 함수 적용의 의미를 변경할 수 있습니다.마찬가지로#%module-beginform을 사용하면 [18]모듈 전체의 임의의 정적 분석이 가능합니다.어떤 모듈도 언어로서 사용할 수 있습니다.#lang표기법, 이것은 사실상 언어의 모든 측면이 프로그래밍되고 제어될 수 있다는 것을 의미한다.

모듈 수준의 확장성 기능은 Lisp의 s-표현 조작 시스템,[47][48] Scheme 84의 위생적인 확장 구문 매크로 또는 R5RS구문 규칙보다 더 많은 기능을 제공하는 Scheme와 같은 위생 매크로 시스템과 결합됩니다.실제로 매크로 시스템은 컴파일러 확장을 위해 신중하게 조정된 애플리케이션 프로그래밍 인터페이스(API)라고 할 수 있습니다.이 컴파일러 API를 사용하여 프로그래머는 기능 및 전체 도메인별 언어를 내장 언어 구성 요소와 완전히 구분할 수 없는 방식으로 추가할 수 있습니다.

라켓의 매크로 시스템은 전체 언어 사투리를 구성하는 데 사용되어 왔습니다.여기에는 타이프되지 않은 [49]코드에서 타이프되지 않은 코드로의 이행을 용이하게 하는 Racket의 점진적인 타입의 방언인 Typeed Racket, 평가가 [50]느린 방언인 Lazy Racket, Haskell과 [51]Racket을 결합한 Hackett 등이 있습니다.교육학 프로그래밍 언어인 파이렛은 원래 [52][53]라켓에서 구현되었습니다.

다른 방언으로는 FrTime(기능 반응형 프로그래밍), Scribble(문서 언어),[54] Slidesshow(프레젠테이션 언어),[55] 교육용 [56][57]여러 언어가 있습니다.

Racket의 핵심 배포는 프로그래밍 [18]언어 개발에 도움이 되는 라이브러리를 제공합니다.이러한 언어는 s-expression 기반 구문에만 제한되지 않습니다.기존의 읽기 테이블 기반 구문 확장과 더불어 명령어는#lang는, 파서 툴 라이브러리를 [58]사용해 실장할 수 있는 임의의 파서의 호출을 netable로 합니다.이러한 언어의 예는 Racket 로직 프로그래밍을 참조하십시오.

프로그래밍 환경

언어 플랫폼은 DrRacket이라는 이름의 자체 호스팅[13] IDE, 연속 기반서버,[59] 그래픽 사용자 인터페이스 [22]및 기타 도구를 제공합니다.일반적인 스크립트 언어와 같은 라이브러리를 갖춘 실행 가능한 스크립트 도구로서 Unix 쉘 스크립트에 사용할 수 있습니다.명령줄 인수를 해석하고 외부 도구를 실행할 수 있습니다.

DrRacket IDE

DrRacket(구 DrScheme)은 Scheme 또는 Racket을 가르치는 입문 컴퓨터 과학 강좌에서 널리 사용되고 있으며, 그 단순성과 초보 프로그래머에게 어필하는 것으로 칭송받고 있습니다.IDE는 원래 TeachScheme!프로젝트(현재의 ProgramByDesign)에 사용하기 위해 구축되었습니다.TeachScheme!프로젝트는 Northistn University와 다수의 부속대학이 고교생을 대학 수준의 컴퓨터 과학 코스로 끌어들이기 위한 지원 활동입니다.

편집기는 구문 및 런타임 오류, 괄호 일치, 디버거 대수적 스테퍼에 대한 강조 표시를 제공합니다.학생 친화적인 기능에는, 복수의 「언어 레벨」(초급 학생, 중급 학생 등)이 서포트되고 있습니다.또한 통합 라이브러리 지원 및 고급 프로그래머를 위한 정교한 분석 도구도 갖추고 있습니다.또한 모듈 브라우저, 윤곽 뷰, 통합 테스트 커버리지 측정 및 리팩터링 지원을 통해 모듈 지향 프로그래밍이 지원됩니다.「헬프 데스크」라고 하는 광범위한 하이퍼 링크 헬프 시스템에의 상황 의존형의 통합 액세스를 제공합니다.

DrRacket은 Windows, MacOS, UnixLinux와 X Window 시스템을 함께 사용할 수 있으며 프로그램은 이러한 모든 플랫폼에서 동일하게 작동합니다.

코드 예시

다음은 간단한 hello world 프로그램입니다.

#실패하다라켓 "안녕, 월드!" 

이 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.

"Hello, World!"

다음은 조금 덜 간단한 프로그램입니다.

이 프로그램의 결과(DrRacket 참조)
#실패하다라켓 (요구하다 2htdp/이미지)  (허락하다 sierpinski ([n 8])   (한다면 (제로? n)     (삼각형의 2 '단단한 '빨간.)     (허락하다 ([t (sierpinski (- n 1))])       (얼다 (위에 t (게다가 t t)))))) 

라켓 웹사이트에서 가져온 이 프로그램은 깊이 8까지 중첩된 시에르핀스키 삼각형을 그립니다.

사용방법#langdirective, 소스 파일은 Racket의 다른 방언으로 쓸 수 있습니다.다음은 Racket의 정적 언어인 Typed Racket의 요인 프로그램의 예입니다.

#실패하다타이핑된/인쇄된  (: 사실 (정수 -> 정수)) (정의하다 (사실 n)   (한다면 (제로? n) 1 (* n (사실 (- n 1))))) 

응용 프로그램 및 실용성

프로그래밍 언어 이론의 기초가 되는 것 외에, 라켓은 생산 시스템의 범용 언어로 설계되었다.따라서 Racket 배포는 시스템과 네트워크 프로그래밍, 웹 개발,[59] 기본 운영체제에 대한 통일된 인터페이스, 동적 외부 함수 인터페이스,[60] 몇 가지 맛의 정규 표현, 렉서/파서 생성기,[58] 로직 프로그래밍완전한 GUI 프레임워크를 특징으로 합니다.

Racket은 상용 언어에 유용한 몇 가지 기능을 가지고 있으며, 그 중 Windows, macOS 및 Unix에서 독립 실행형 실행 파일을 컴파일하는 기능, 통합 개발 환경(IDE)에 포함된 프로파일러 및 디버거, 유닛 테스트 프레임워크 등이 있습니다.

라켓은 상업적인 프로젝트나 웹 어플리케이션에 사용되어 왔다.대표적인 예로 Racket에서 개발된 Arc에서 실행되는 Hacker News 웹사이트가 있습니다.개구쟁이 개는 몇몇 비디오 게임에서 [61]그것을 스크립트 언어로 사용해 왔다.

라켓은 부트스트랩 [62]프로그램에서 게임 디자인을 통해 학생들에게 대수학을 가르치기 위해 사용됩니다.

레퍼런스

  1. ^ "Racket v8.5". 1 May 2022. Retrieved 1 May 2022.
  2. ^ Tobin-Hochstadt, Sam; Gerard, Sage; Dueck, Joel; Flatt, Matthew; Software Freedom Conservancy; Chestek, Pamela (2019-11-15). "Completing Racket's relicensing effort". Retrieved 2019-12-27.
  3. ^ "DrRacket Files". Retrieved 21 July 2019. The standard file extension for a Racket program file is ".rkt". The extensions ".ss", ".scm", and ".sch" are also historically popular.
  4. ^ Strickland, T.S.; Fellesisen, Matthias (2010). "DLS 2010: Contracts for First-Class Classes" (PDF).
  5. ^ Bonnaire-Sergeant, Ambrose (2012). A Practical Optional Type System for Clojure (Thesis). The University of Western Australia.
  6. ^ "Planet2 questions".
  7. ^ "Rust Bibliography".
  8. ^ Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; et al. (August 2007). "Revised6 Report on the Algorithmic Language Scheme (R6RS)". Scheme Steering Committee. Retrieved 2011-09-13.
  9. ^ a b Felleisen, M.; Findler, R.B.; Flatt, M.; Krishnamurthi, S.; Barzilay, E.; McCarthy, J.; Tobin-Hochstadt, S. (2015). "The Racket Manifesto" (PDF). Proceedings of the First Summit on Advances in Programming Languages: 113–128.
  10. ^ "Dialects of Racket and Scheme". Retrieved 2011-08-15.
  11. ^ "Welcome to Racket". Retrieved 2019-05-15.
  12. ^ a b Flatt; Findler; Krishnamurthi; Felleisen (1999). Programming Languages as Operating Systems (or, Revenge of the Son of the Lisp Machine). International Conference on Functional Programming.
  13. ^ a b c Findler; Clements; Flanagan; Flatt; Krishnamurthi; Steckler; Felleisen (2001). "DrScheme: A Programming Environment for Scheme" (PDF). Journal of Functional Programming.
  14. ^ Felleisen; Findler; Flatt; Krishnamurthi (2004). "The TeachScheme! Project: Computing and Programming for Every Student". Journal of Computer Science Education.
  15. ^ "Overview". Program by Design. Retrieved 2011-08-17.
  16. ^ a b c Flatt, M.; Findler, R. B.; Felleisen, M. (2006). "Scheme with Classes, Mixins, and Traits" (PDF). Asian Symposium on Programming Languages and Systems.
  17. ^ a b Flatt, M.; Felleisen, M. (1998). "Units: Cool Modules for Hot Languages". Programming Language Design and Implementation.
  18. ^ a b c d Tobin-Hochstadt, S.; St-Amour, V.; Culpepper, R.; Flatt, M.; Felleisen, M. (2011). "Languages as Libraries" (PDF). Programming Language Design and Implementation.
  19. ^ Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthew; Krishnamurthi, Shriram; Barzilay, Eli; McCarthy, Jay; Tobin-Hochstadt, Sam (2018). "A Programmable Programming Language". Communications of the ACM. 61 (3): 62–71. doi:10.1145/3127323. S2CID 3887010.
  20. ^ "Racket: Software License". Retrieved 2015-10-20.
  21. ^ Benson, Brent W. Jr. (26–28 October 1994). "libscheme: Scheme as a C Library". Written at Santa Fe, NM. Proceedings of the USENIX Symposium on Very High Level Languages. Berkeley, CA: USENIX Association. pp. 7–19. ISBN 978-1880446652. Retrieved 7 July 2013.
  22. ^ a b c "Rebuilding Racket's Graphics Layer". 2010-12-08. Retrieved 2017-12-11.
  23. ^ Clements, J.; Flatt, M.; Felleisen, M. (2001). "Modeling an Algebraic Stepper" (PDF). European Symposium on Programming Languages.
  24. ^ a b c "Racket Core Release Notes". Archived from the original on 2013-07-05. Retrieved 2012-04-15.
  25. ^ Flatt, M. (2002). "Composable and Compilable Macros". International Conference on Functional Programming.
  26. ^ "PLT Scheme version 4.0". 2008-06-12. Archived from the original on 2013-02-02. Retrieved 2012-08-07.
  27. ^ "From PLT Scheme to Racket". Racket-lang.org. Retrieved 2011-08-17.
  28. ^ "Racket 5.2". PLT, Inc. 2011-11-09. Retrieved 2012-06-16.
  29. ^ "Submodules". 2012-06-03. Retrieved 2012-08-07.
  30. ^ "Racket 5.3". PLT, Inc. 2012-08-07. Retrieved 2012-08-07.
  31. ^ "Racket 5.3.1". PLT, Inc. 2012-11-07. Retrieved 2012-11-07.
  32. ^ "Racket 6.0". PLT, Inc. 2014-02-26. Retrieved 2016-02-23.
  33. ^ "Racket-on-Chez Status: January 2018". 2018-01-05. Archived from the original on 2018-06-28. Retrieved 2018-04-13.
  34. ^ "building Racket on Chez Scheme (Experience Report)" (PDF). 2019-08-01. Retrieved 2019-07-25.
  35. ^ "Racket 7.5 release". Packt Hub. Retrieved 2019-11-28.
  36. ^ "Racket v7.5". Racket Blog. Retrieved 2019-11-28.
  37. ^ "Racket v8.0".
  38. ^ Flatt, M.; Yu, G.; Findler, R. B.; Felleisen, M. (2007). "Adding Delimited and Composable Control to a Production Programming Environment" (PDF). International Conference on Functional Programming.
  39. ^ "Contracts".
  40. ^ "Threads".
  41. ^ "Futures".
  42. ^ "Places".
  43. ^ Flatt, Matthew (2012). "Creating Languages in Racket". Communications of the ACM. Retrieved 2012-04-08.
  44. ^ Findler, R. B.; Felleisen, M. (2002). "Contracts for Higher-Order Functions" (PDF). International Conference on Functional Programming.
  45. ^ Matthews, J. (2006). "Component Deployment with PLaneT: You Want it Where?". Scheme and Functional Programming Workshop.
  46. ^ "The Racket package system and Planet".
  47. ^ Flatt, Matthew (2002). "Composable and Compilable Macros, You Want it When?" (PDF). International Conference on Functional Programming.
  48. ^ 플랫, Culpepper, Darais, Findler, 함께 동작하는 매크로; 컴파일 타임바인딩, 부분 확장 및 정의 컨텍스트
  49. ^ Tobin-Hochstadt, S.; Felleisen, M. (2008). "The Design and Implementation of Typed Scheme". Principles of Programming Languages.
  50. ^ Barzilay, E.; Clements, J. (2005). "Laziness Without All the Hard Work: Combining Lazy and Strict Languages for Teaching". Functional and Declarative Programming in Education.
  51. ^ "The Hackett Programming Language". Alexis King's Blog. Retrieved 16 June 2019.
  52. ^ The Pyret Crew (24 May 2011). "The Pyret Code; or A Rationale for the Pyret Programming Language". Pyret. Retrieved 16 June 2019.
  53. ^ "Programming and Programming Languages". Index of /. 20 September 2017. Retrieved 16 June 2019.
  54. ^ Flatt, M.; Barzilay, E.; Findler, R. B. (2009). "Scribble: Closing the Book on Ad Hoc Documentation Tools". International Conference on Functional Programming.
  55. ^ Findler, R. B.; Flatt, M. (2004). "Slideshow: Functional Presentations". International Conference on Functional Programming.
  56. ^ Felleisen, M.; Findler, R. B.; Flatt, M.; Krishnamurthi, S. (2009). "A Functional I/O System (or Fun for Freshman Kids)" (PDF). International Conference on Functional Programming.
  57. ^ Felleisen, M.; Findler, R. B.; Flatt, M.; Krishnamurthi, S. (2004). "The Structure and Interpretation of the Computer Science Curriculum" (PDF). Journal of Functional Programming. 14 (4): 365–378. doi:10.1017/S0956796804005076.
  58. ^ a b "Parser Tools: lex and yacc-style Parsing". Retrieved 2011-08-16.
  59. ^ a b Krishnamurthi, Hopkins; McCarthy; Graunke; Pettyjohn; Felleisen (2007). "Implementation and Use of the PLT Scheme Web Server" (PDF). Journal of Higher-Order and Symbolic Programming. 20 (4): 431–460. doi:10.1007/s10990-007-9008-y. S2CID 17731194.
  60. ^ Barzilay, E.; Orlovsky, D. (2004). "Foreign Interface for PLT Scheme" (PDF). Scheme and Functional Programming.
  61. ^ "Functional mzScheme DSLs in Game Development". Retrieved 2012-05-08.
  62. ^ "Bootstrap". bootstrapworld.org. Retrieved 2015-08-11.

추가 정보

외부 링크

1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
LISP 1, 1.5, LISP 2(abandoned)
마클리스프
인터리스크
MDL
리스프 기계 리스프
스킴 R5RS R6RS R7RS 소형
없음
ZIL(Zork 구현 언어)
프란츠 리스프
일반적인 리스프
르 리스프
MIT 스킴
T
체즈 스킴
Emacs 리스프
자동 LISP
피코리스프
EuLisp
ISLISP
오픈리스프
PLT 방식 라켓
GNU Guile
비주얼 LISP
클로쥬르
LFE
하이