- Racket은 언어 지향 프로그래밍을 중심에 둔 성숙한 언어로, 일반 애플리케이션 개발과 새 언어 제작을 같은 생태계 안에서 다룸
- 핵심은 매크로와
#lang이며, 새 구문·도메인 특화 언어·기존 표면 문법을 라이브러리처럼 만들고 모듈 단위로 사용할 수 있음 - 웹 서버, 데이터베이스, 수학·통계, GUI, 과학 시뮬레이션까지 포함하는 표준 라이브러리와 수천 개 패키지가 일반 목적 개발 범위를 넓힘
- Typed Racket, 계약, 객체 시스템, DrRacket IDE가 함께 제공되어 함수형 코드와 객체 지향 구성요소, 점진적 타입을 필요에 맞게 조합할 수 있음
- Racket은 단순한 Lisp 계열 언어가 아니라, 각 문제 영역에 맞는 언어를 만들고 실행·편집·도구 지원까지 연결하려는 개발 환경에 가까움
언어 지향 프로그래밍을 위한 Racket
- Racket은 “Racket, the Programming Language”와 “Racket, the Language-Oriented Programming Language”를 함께 내세우는 프로그래밍 언어임
- Racket version 9.2가 사용 가능함
- 초기부터 Windows, macOS, Linux에서 크로스플랫폼 그래픽 프로그래밍을 지원해 온 성숙한 제품임
- 기본 개발 기능은 패키지 관리, GUI, 독립 실행 바이너리, 외부 인터페이스까지 포함함
일반 애플리케이션 개발 범위
- Racket은 웹 서버 애플리케이션부터 수학, 과학 시뮬레이션 소프트웨어까지 다루는 라이브러리 묶음을 갖춤
- 대표 문서와 라이브러리 범위는 다음과 같음
- 크로스플랫폼 GUI 툴박스와 웹 서버가 기본 생태계에 포함됨
- 수천 개 추가 패키지는 단일 명령으로 설치할 수 있음
- 예시로 3D graphics, Bluetooth socket connector, color maps, data structures, educational software, games, quantum-random number generator, scientific simulations, web script testing 등이 있음
#lang racket/gui예시는 GUI 방언으로 작은 숫자 맞히기 게임을 구현하며, 여러 언어 기능을 함께 사용함
매크로로 확장되는 언어
- Racket 프로그래머는 매크로로 자체 반복문과 새 구문을 정의할 수 있음
- 새 구문은 절차, 메서드, 클래스처럼 추가되며, 커스텀 구문을 Racket 표현식이나 정의로 다시 쓰는 규칙을 만들면 됨
- 작은 매크로는 다른 기능으로 처리하기 어려운 반복 코드 제거에 도움을 줌
- 작업 실행 시간을 재는
time-it구문을 정의할 수 있음 - 반복적인
lambda사용을 피할 수 있음 - 매크로는 일반 함수처럼 모듈에서 export됨
- 작업 실행 시간을 재는
- 전체 매크로 시스템은 여러 매크로가 협력하는 구조도 만들 수 있음
- Racket은 함수형 언어이지만 처음부터 classes and objects, mixins and traits 하위 언어를 제공함
- Java와 유사한 클래스 시스템은 매크로 기반 라이브러리로 구현되어, 핵심 언어의 별도 지원 없이 동작함
#lang와 도메인 특화 언어
- Racket은 프로그래머가 각 모듈을 알맞은 언어로 작성할 수 있도록 언어를 만드는 언어를 지향함
#lang typed/racket예시는String과Number의 union type, occurrence typing, 리스트 필터링을 사용함#lang scribble/base예시는 PDF 또는 HTML 문서를 생성하는 문서 언어를 다룸#lang datalog예시는parent와ancestor관계를 정의하고 질의하는 Datalog 문법을 사용함- 새 언어는 IDE 창에서 만들고 다른 IDE 창에서 해당 언어의 모듈을 실행할 수 있으며, 설정·프로젝트 파일·외부 도구가 필요 없음
- Racket 사용자는 괄호 문법을 주로 쓰지만, Datalog처럼 쉼표와 중괄호가 필요한 기존 표면 문법도 만들 수 있음
- parsing packages를 사용하면 임의 문법을 괄호 기반 언어로 매핑하고, Racket 매크로 시스템으로 일반 Racket에 컴파일할 수 있음
DrRacket과 개발 생태계
- Racket은 자체 IDE인 DrRacket을 제공하며, 식별자 위에 마우스를 올리면 정의 위치로 화살표를 그리는 기능이 있음
- Typed Racket 같은 대체 언어를 사용할 때도 DrRacket의 편집 지원을 활용할 수 있음
- Racket 매크로는 복잡한 매크로나 새 언어를 만드는 매크로에서도 충분한 소스 정보를 기록·전파해, DrRacket이 새 언어 기능을 이해하는 것처럼 동작할 수 있음
- 주요 개발 지원은 다음과 같음
- 생태계 리소스는 다운로드, 소스 코드, 버그 리포트, nightly snapshot builds, 패키지 저장소를 포함함
- 학습 자료와 문서는 Quick Introduction, The Racket Guide, The Racket Reference, All Documentation를 제공함
- 커뮤니티 채널로 Discourse, Discord, Slack, Reddit, mailing lists, Mastodon, Twitter, Blog, Wiki, YouTube가 있으며, Team과 Contributing 문서도 제공됨