Racket 입문서가 Lisp 계보와 언어 지향 프로그래밍을 빠르게 설명
- Racket은 1995년 PLT Scheme으로 출발했으며 2010년 이름을 바꾼 Scheme 계열 언어로, 글은 이를 새 프로그래밍 언어를 만드는 도구로 소개함
- 글은 Lisp의 특징으로 가비지 컬렉션, 일급 함수, REPL, 값을 반환하는 조건식, 코드가 데이터 구조인 동형성을 들며 Racket의 매크로와 언어 확장 배경을 설명함
- Racket 프로그램은 첫 줄에
#lang racket을 지정하며, DrRacket은 정의를 작성하는 영역과 즉시 실행해 보는 REPL을 함께 제공함 - 글은 Racket의 기본 호출 형식을
(operator argument1 argument2 ...)로 설명하고define으로 값과 함수를 정의하며lambda로 익명 함수를 만든다고 안내함 - Racket 사용 사례로 언어 연구, Rosette를 이용한 형식 검증, Pollen 기반 출판과 조판, 교육을 제시함
Hacker News opinions
Racket로 만든 흥미로운 앱을 찾아보려 해도 awesome-racket 같은 라이브러리와 개발 도구 목록만 나오더라.
Remember는 Racket으로 만든 앱임. 내부 구조를 설명한 글도 따로 있음.
Racket은 결국 학술용 언어라는 인상이 강함.
내가 아는 꽤 유명한 Racket 출신 앱은 Hacker News임. Arc가 Racket 위에서 시작됐음.
Scheme 계열의 매력은 핫 리로드 말고는 잘 모르겠음.
나는 동형성이 이유라고 봄. 코드가 언어 자체의 데이터 구조라서 다룰 수 있음.
Lisp, Scheme, Racket은 단순하면서도 형태를 바꾸기 쉬움. 매크로로 중위 수식이나 차용 검사기 같은 문법을 만들고, 메타 순환 평가기로 지연 평가를 바꾸며, DSL로 문제 영역에 맞는 언어를 만들 수 있음.
Racket은 좋아하지만 이 글을 친절한 입문서라고 부르긴 어려움. 람다를 안다고 가정하고 문법 규칙부터 빠르게 지나가서 입문자가 따라가기엔 속도가 너무 빠름.
나는 Racket을 전혀 몰랐어도 이 글로 바로 쓸 만한 감은 잡았음. 프로그래밍 언어 입문에 문법 규칙이 없다는 기대는 이해가 안 감.
Racket은 흥미롭지만 실사용 사례가 거의 안 보임. 배포가 번거로운 탓일 수 있고, 독립 실행형 네이티브 바이너리를 만들기 쉬우면 사용이 늘 것 같음.
Racket은 독립 실행 파일을 만든 지 꽤 됐음. raco exe 관련 공식 문서도 있고, 실사용자가 없다는 전제도 맞지 않음.
Rust로 VM, JIT, AOT 백엔드를 갖춘 작은 언어 런타임을 만드는 중인데 Racket의 매크로와 언어 지향 프로그래밍을 계속 참고하게 됨. 이 유연성이 실제 런타임 비용인지, 대부분 컴파일 타임 추상화인지 궁금함.
글의 '특수 문법이 없다'는 말은 너무 단순화한 표현임. 점 표기 쌍, 문자 리터럴, 유리수와 복소수, 준인용과 언인용 스플라이싱 등 리더 문법이 많음.
Racket 수 표기법은 꽤 흥미로움. #e0.1은 정확한 1/10으로 읽고 #i0.1은 부동소수점이며, 8i는 허수 단위, 1@1은 복소수 극좌표 표기임.
처음엔 저 복잡한 수 표기가 부담스러웠는데, Racket 설치 후 REPL에서 직접 보니 리더가 정말 많은 일을 하더라. 오염된 문법인지 멋진 수 파서인지 아직 판단이 안 섬.
Lisp가 AI 겨울 때문에만 주변화됐다는 서술은 역사적으로 부정확함. Lisp는 그보다 앞서 쇠퇴했고 1970년대 후반에는 Prolog가 상징적 AI에서 앞섰으며, 지금도 귀납 논리 프로그래밍 연구는 Lisp보다 Prolog 쪽에 가까움.