Racket
#lang racket(println 'Hello, world!')
1. 개요
LISP/Scheme 계열 언어 중 하나인 범용 프로그래밍 언어이다. Racket 은 프로그래밍 언어 생성, 구현, 및 디자인에 최적화 된 언어이다. Racket은 스크립팅, GUI 애플리케이션을 포함한 범용 애플리케이션 프로그래밍, 교육용 및 연구용 언어로 많이 쓰인다.
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 을 쓴다.
피보나치 숫자를 리턴하는 재귀함수를 구현하면:
(define fib (n)
(cond
[(< n 2) 1]
[else (+ (fib (- n 1)) (fib (- n 2)))]))
[else (+ (fib (- n 1)) (fib (- n 2)))]))
5. DrRacket
Racket언어 전용 IDE로 처음엔 C++로 구현되었으나 버전 5.0부터는 Racket으로 다시 쓰여졌다.
윈도, macOS, Linux 등 거의 모든 플랫폼을 지원한다.
익숙해지면 꽤 쓸만하다. 특히 이 IDE의 가장 편한 점 중 하나는 괄호를 자동으로 닫아준다. Scheme계열 언어에서는 대괄호, 중괄호, 소괄호 모두가 쓰이는데 그게 여러개 쌓일 경우 불가능하다. 이렇게 써놓으니까 무슨 소린지 잘 모르겠지만 일단 써보면 안다 (...)
6. 외부 링크
라켓 공식 홈페이지 https://racket-lang.org/