ICFP 2025에서 열린 OxCaml 튜토리얼이 어떻게 준비되었고 어떤 피드백이 나왔는지, 그리고 지금 OxCaml을 써야 하는지에 대한 소감.
URL: https://anil.recoil.org/notes/icfp25-oxcaml
Title: ICFP/SPLASH 2025에서 OxCaml 튜토리얼을 진행하다
이 글은 ICFP 2025에 대한 글 시리즈의 5편 중 2편이다[1].
OCaml을 “산화(oxidize)”하여(ML의 인체공학은 유지하면서 Rust급 성능을!) 확장하려는 여러 기능이 OxCaml이라는 포크에서 빠르게 개발되고 있다. 나는 Jane Street, IIT-M, Tarides, Brown, Cambridge의 대담한 팀이 ICFP 2025에서 정말 재미있는 튜토리얼을 함께 만들 수 있도록 도왔고, 여러분도 이를 직접 해볼 수 있다! TL;DR: 온라인 슬라이드를 따라가고, 활동을 해본 뒤, 피드백을 위해 퀴즈를 풀어 달라.
튜토리얼 저장소를 클릭하기만 하면 온라인 환경이 열린다
OCaml 5로의 전환에 관한 Yaron Minsky의 발표를 보면, 끝부분에서 그는 안전한 함수형 OCaml 스타일로 코드를 작성하면서도 성능을 한 방울이라도 더 짜내기 위해 Jane Street가 필요로 하는 언어 확장들을 이야기한다. 이러한 확장들은 현재 메인라인 OCaml 컴파일러의 포크 버전에 구현되어 있다. 올해 초, Cambridge와 Tarides의 여러 사람이 Jane Street가 첫 공개 릴리스를 내놓고, opam 저장소와 튜토리얼을 구축해 이 포크가 공개적으로 개발될 수 있도록 도왔다.
한여름의 더운 날, 제멋대로인 군중이 ‘산화 중인’ 컴파일러를 문밖으로 밀어낸다
Yaron Minsky는 OxCaml 릴리스를 이렇게 요약했다:
OxCaml의 확장들은 OCaml을 성능 엔지니어링에 더 좋은 언어로 만들어준다. 또한 데이터 레이스가 없는 병렬 프로그래밍과 그 밖의 여러 가지 좋은 것들을 지원한다.
OxCaml은 흥미로운 위치에 있다. 확장들이 빠르고 가차 없이 바뀔 실험적 언어다.
하지만 동시에 생산(프로덕션) 품질의 컴파일러이기도 하다. 실제로 우리는 매일 프로덕션에서 이 컴파일러를 쓴다.
그럼 왜 이걸 하고 있을까? 우리의 주된 바람은 이 작업에 대한 인지도를 높이고, 이 확장들이 메인라인 OCaml에 업스트림되는 길을 닦는 것이다.
하지만 우리는 또한, 빠르게 변하는 언어를 발밑에서 느끼면서도 함께 작업하는 것을 개의치 않는 열성가와 연구자들이 채택해 주는 것에도 관심이 있다. 우리는 그 협업에서 배울 것이 엄청나게 많다고 생각한다. -- BlueSky의 Yaron Minsky, 2025년 6월
즉 2025년 여름 시점에서 OxCaml의 오픈소스 코드 드롭은 존재했지만, 거친 부분이 많았고 Jane Street의 벽 밖에서 쓸 수 있게 만들려면 꽤 노력이 필요했다.
OxCaml의 언어 확장들은 대략 세 부류로 나눌 수 있다. 즉,
현재 이 모든 것들은 점점 늘어나는 Jane Street 내부 개발자들이 OxCaml 모노레포에서 개발하고 있다. Jane Street의 내부 개발자 리소스에 접근할 수 없는 상황에서, KC Sivaramakrishnan과 나는 Richard Eisenberg, Chris Casinghino와 함께 ICFP에 튜토리얼 제안을 내기 시작했다. 무언가를 배우는 데 마감이 머리 위에 걸려 있는 것만큼 좋은 방법은 없으니까!
튜토리얼을 쓰는 일은 예상보다 훨씬 어려웠다. OxCaml에는 (모드, 카인드 같은) 확장이 매우 많고, 빠르게 진화할 뿐 아니라 조합했을 때 상호작용이 다르게 나타나는 경우도 있었다. 컴파일러 확장만 배우는 게 아니라, 그것들을 유용한 인터페이스로 구성하는 OxBase 라이브러리의 변화도 따라가야 했다. KC Sivaramakrishnan과 나는 다양한 개념을 모두 담아내려 고군분투했고, 나는 병렬 퀵소트를 컴파일시키려다 주말을 통째로 써버리기도 했다!
다행히 Richard Eisenberg가 프로그래밍 언어 교육(PL pedagogy) 전문가들인 Shriram Krishnamurthi, Will Crichton, Gavin Gray를 투입하자는 아이디어를 냈고, 그들이 문제를 해결해줬다. Gavin은 예제를 과감하게 단순화하도록 슬라이드를 완전히 다시 설계했는데(정렬 알고리즘이 아니라 gensym부터 시작), 사용자 지식을 사전/사후로 측정하는 퀴즈도 설계했다. Jane Street의 Max Slater, Megan Del Vecchio, Nadia Razek도 합류해 최신 개발 동향에 대한 내부 정보를 공유해 줬다.
이 협업 덕분에 역할 분담도 좋아졌다. KC Sivaramakrishnan, Patrick Ferris, 나는 더 긴 실습 활동 예제들에 집중했고, Gavin은 발표 자체를 위한 Slipshow 기반 슬라이드를 마무리했다. 나는 참가자들이 몇 분 만에 완전한 OxCaml 환경을 띄울 수 있도록 OxCaml GitHub DevContainer를 구성해, 컨퍼런스 중 가능한 많은 사람이 참여할 수 있게 했다.
우리가 깨달은 사실은, 올해 초 첫 공개 릴리스 이후로 OxCaml 패키지의 공개 릴리스가 한 번도 없었다는 점이었다! 그 사이 업스트림에는 수백 가지 개선이 쌓였고, 상당한 인터페이스/타입 시스템 변경도 여럿 포함되어 있었다. 까다로운 ICFP 청중에게 낡은 버전의 튜토리얼을 보여주는 건 퇴보처럼 느껴졌다.
그래서 싱가포르에 도착한 후 늦은 밤 통화에서, 뉴욕에서 Diana Kalichenko가 컴파일 수정 작업을 쉬지 않고 진행해 주는 가운데, 우리는 모든 튜토리얼 예제를 새로 고치고 4개월치 개발분을 담은 최신 minus19 컴파일러 버전을 릴리스했다! 슬라이드에서 생긴 컴파일 문제를 해결했고, 새 Devcontainer 이미지도 튜토리얼 시작 약 10초 전에 마침내 다시 빌드됐다. 식은 죽 먹기지.

Gavin, KC 그리고 나는 튜토리얼을 살리기 위해 하늘에 영감을 구한다
NUS에서 열린 튜토리얼은 정말 훌륭했다! 두 세션 모두 완전히 만석이었고 온라인 참가자도 있었다(특히 Edwin Torok이 Discord에서 전 과정을 꼼꼼히 테스트해 줬는데, 고마웠다!).
청중 피드백을 크게 묶으면 대략 이런 내용이었다:
local과 stack_은 추론되느냐? 컴파일러는 기본적으로 이 분석을 수행하고 가능하면 로컬 할당을 하지만, 튜토리얼 참가자들에게 이 점이 명확히 전달되지 않았다.
NUS 컴퓨터공학과의 튜토리얼 룸이 가득 찼고, 청중도 집중하고 있다!
답은, 여러분이 컴파일러/언어 설계에 깊이 들어가고 싶은지에 달려 있다! OxCaml 컴파일러의 모드 축(mode axes)은 더 많은 사용 사례를 커버하면서 빠르게 늘고 있으니, 이 튜토리얼도 더 발전시켜야 할 게 분명하다. 그리고 OxCaml의 “최종 형태”는 아직 결코 안정적이지 않다. Jane Street는 자신들의 모노레포 안에서 이를 사용하는 모든 코드를 통제하고 있고, 방대한 프로덕션 엔지니어링 인프라를 갖추고 있기 때문에 언어 변경을 빠르게 반복할 수 있다. 외부에서는… 당분간 큰 코드베이스를 동기화해 유지하기가 어려울 것이다.
개발자들과의 논의에서 얻은 큰 결론은, 앞으로도 12~24개월 정도는 언어가 적극적으로 진화할 것이라는 점이다. 즉 한동안은 계속 표적이 움직일 것이다. 다만 local 같은 일부 기능은 다른 기능들보다 더 오래 존재해 왔고 더 안정적이다. 이런 점을 알면, 외부에서 OxCaml을 어떻게 사용할지 계획하는 데 큰 도움이 된다.
또한 Jane Street가 언어 교육 리소스에도 진지하게 투자하고 있다는 점은 고무적이다. Yaron Minsky는 이렇게 글을 올렸다:
지난 몇 주는 OxCaml의 (흥미롭지만 약간은 어리둥절하게 만드는) 기능들을 사람들에게 가르칠 기회로 가득한, 정말 신나는 시간이었다. 그리고... 이 일을 도와줄 경험 많은 교육자를 채용하려고 한다. 잘 맞을 것 같은 사람이 있다면 꼭 공유해 달라! -- Bluesky의 Yaron Minsky, 2025년 10월

질문에 답해 줄 Jane Street의 OxCaml 개발자들도 충분히 많이 있었다.
튜토리얼을 직접 해보고 퀴즈로 스스로 테스트해 보고 싶다면, 모든 자료는 지금도 공개되어 참여할 수 있다! 슬라이드를 따라간 뒤 퀴즈를 풀어보자. 그리고 가장 중요한 건, 여러분이 해낸 말도 안 되는 스턴트들을 온라인에 공유해서 우리에게 무슨 일이 벌어지는지 보여주는 것이다. 나는 io_uring 기반 oxhttpserver를 해킹 중이고, KC Sivaramakrishnan이 eBPF 소스를 들여다보고 있다는 소문도 들었다...