#lang racket (println 'Hello, world!')
1 개요
LISP/Scheme 계열 언어 중 하나인 범용 프로그래밍 언어이다. Racket 은 프로그래밍 언어 생성, 구현, 및 디자인에 최적화 된 언어이다. Racket은 스크립팅, GUI 애플리케이션을 포함한 범용 애플리케이션 프로그래밍, 교육용 및 연구용 언어로 많이 쓰인다. 이 언어를 만든 사람 중 하나인 Robby Findler는 이걸 써서 Lecture에 쓰는 Slide를 만든다
2 역사
1990년대 중반에 미국 라이스 대학의 교수 Matthias Felleison과 박사학위 학생들이었던 Matthew Flatt, Robby Findler, 및 Shriram Krishnamurthi가 교육용 언어로 쓰기 위해 Scheme을 기반으로 한 새 언어를 개발하기로 한다. 그리고 이 언어를 위한 전용 IDE인 DrRacket을 개발하게 된다. 처음 개발을 시작하고 만든 언어의 이름은 PLT Racket이었으나 2010년 6월에 현재 언어인 Racket으로 변경되었다.
3 특징
Racket이 다른 LISP 계열 언어와 비교해서 다른 점은 특유의 유연한 마크로와 확장성이라고 할 수 있다. 이렇게 만들어진 모듈들은 Racket 기본 언어의 syntax를 override하게 된다. 일단 모듈은 그 자체가 한 언어로 볼 수 있으므로 그걸 #lang ____ 이런 형식으로 가져와서 쓰게 될 경우 언어 자체를 바꿔버리는 게 가능하다. (극단적인 예시로, 이를 이용하여 racket에서 python 코드를 돌리게 해주는 모듈도 있다!)
4 예제
문법 자체는 Common Lisp/ Scheme 등을 크게 벗어나지 않는다.
모든 언어는 일단 헬로월드부터 출력한다.
(print "Hello World\n")
Common Lisp 에서의 함수를 정의하는 키워드인 defun 대신 define 을 쓴다. 이런것까지 바꿀 필요야.. C 프로그래머들이 좋아합니다
피보나치 숫자를 리턴하는 재귀함수를 구현하면:
(define fib (n)
- (cond
- [(< n 2) 1]
- [else (fib (- n 1))]))
- (cond
5 DrRacket
Racket언어 전용 IDE로 처음엔 C++로 구현되었으나 버전 5.0부터는 Racket으로 다시 쓰여졌다. 한 언어로 그 언어의 컴파일러를 만들 수 있다는 것의 예 중 하나.
윈도, macOS, Linux 등 거의 모든 플랫폼을 지원한다.
익숙해지면 꽤 쓸만하다. 특히 이 IDE의 가장 편한 점 중 하나는 괄호를 자동으로 닫아준다. Scheme계열 언어에서는 대괄호, 중괄호, 소괄호 모두가 쓰이는데 그게 여러개 쌓일 경우 불가능하다. 이렇게 써놓으니까 무슨 소린지 잘 모르겠지만 일단 써보면 안다 (...)