스칼라의 기원 (2009)

발행: (2025년 11월 30일 오전 04:59 GMT+9)
8 min read

Source: Hacker News

by Bill Venners and Frank Sommers – May 4 2009

Summary

Martin Odersky가 Bill Venners와 함께 Scala 프로그래밍 언어가 탄생하게 된 역사를 이야기합니다.

Discovering a fascination with compilers

Bill Venners: 시작부터 말씀해 주세요. 프로그래밍 언어에 처음 관심을 갖게 된 계기는 무엇인가요?

Martin Odersky: 제가 가장 좋아했던 과목은 언제나 컴파일러와 프로그래밍 언어였습니다. 1980년 학부생이었을 때 컴파일러가 무엇인지 처음 알게 되자 바로 하나 만들고 싶었습니다. 그때 제가 겨우 감당할 수 있었던 컴퓨터는 1KB RAM을 가진 Sinclair ZX 80 정도였을 겁니다. 다행히 곧 더 강력한 머신, Osborne‑1—세계 최초의 “휴대용”(라거블) 컴퓨터—에 접근할 수 있게 되었습니다. 이 컴퓨터는 5인치 화면에 한 줄에 52자를 표시하고, 사용 가능한 RAM이 56 KB이며, 90 KB 플로피 디스크 두 개를 장착하고 있었습니다.

그 시절 저는 또 다른 학생인 Peter Sollich와 함께 8‑bit Z80 컴퓨터용 Modula‑2 컴파일러를 작업했습니다. Osborne에는 Microsoft BASIC만 들어 있었는데, 이 BASIC은 매개변수가 있는 프로시저를 지원하지 않았습니다. 그래서 우리는 고전적인 부트스트래핑 기법을 사용했습니다: Peter가 Z80 어셈블리로 아주 작은 Pascal 서브셋 컴파일러를 작성하고, 이를 이용해 약간 더 큰 언어를 컴파일한 뒤, 다시 그 결과물을 이용해 전체 Modula‑2를 컴파일할 수 있을 때까지 과정을 반복했습니다. 최종 시스템은 인터프리터 바이트코드(당시 가장 압축된 형태)와 네이티브 Z80 바이너리를 모두 생성할 수 있었습니다.

우리가 막 컴파일러를 완성하려던 순간, Borland가 Turbo Pascal을 출시하고 Modula‑2 제품을 고려하고 있었습니다. 그들은 우리 컴파일러를 Turbo Modula‑2라는 이름으로 CP/M용으로 판매하기 위해 구매했고, IBM‑PC 버전도 계획했습니다. PC 버전은 지연되었고, 결국 몇 년 뒤 TopSpeed Modula‑2라는 이름으로 나오긴 했지만 Borland의 마케팅 지원이 없었기 때문에 크게 알려지지 않았습니다.

컴파일러가 완성되자 Borland는 Peter와 저에게 모두 채용 제의를 했습니다. Peter는 수락했고, 저는 대학에 남아 수업과 증분 파싱에 관한 석사 프로젝트를 마무리했습니다. 그 연구 경험이 저를 ETH Zurich에서 Pascal과 Modula‑2의 창시자 Niklaus Wirth와 함께 박사 과정을 밟게 만들었습니다.

Working to improve Java

Bill Venners: Scala는 어떻게 탄생했나요? 그 역사는 어떻게 되나요?

Martin Odersky: 1988/89년 즈음, 취리히에 있을 때 함수형 프로그래밍에 매료되었습니다. 이후 독일 카르스루에 있는 카를스루에 대학교에서 교수로 재직하면서 Phil Wadler(University of Glasgow)와 함께 call‑by‑need 람다 계산과 같은 이론적 주제를 연구했습니다. Phil은 저에게 Java라는 새로운 언어에 대해 이야기해 주었는데, 이 언어는 이식성이 높고 바이트코드 기반이며 웹 친화적이고 가비지 컬렉션을 지원했습니다. 그는 Java가 우리를 “묻어버릴” 수도 있다고 경고했습니다.

Phil과 저는 Java 세계에 함수형 아이디어를 도입하기로 결심했고, Pizza(1996)를 만들었습니다. Pizza는 Java에 세 가지 함수형 기능—제네릭스, 고차 함수, 패턴 매칭—을 추가했습니다. 이를 통해 함수형 언어 기능이 JVM 위에서도 구현될 수 있음을 보여주었습니다.

그 후 우리는 Sun의 핵심 팀에 있던 Gilad Bracha와 David Stoutamire와 협업하여 **GJ (Generic Java)**를 1997/98년에 만들었습니다. 6년 뒤 GJ의 아이디어는 Java 5 제네릭스로 구현되었고, 이후 와일드카드와 같은 추가 기능도 (Aarhus 연구자들과 Bracha가 독립적으로 개발) 도입되었습니다.

Sun은 우리가 만든 GJ 컴파일러를 마음에 들어 했습니다; 이 컴파일러는 기존 javac보다 더 안정적이었습니다. 그래서 Sun은 Java 1.3(2000) 릴리스부터 GJ 컴파일러를 표준 javac로 채택했습니다.

Designing a language better than Java

Martin Odersky: Pizza와 GJ 작업을 하면서 종종 좌절감을 느꼈습니다. Java의 기존 제약 때문에 제가 구현하고 싶었던 많은 설계가 불가능했거든요. Java를 개선하는 데 집중한 뒤, JVM과 그 라이브러리를 계속 활용하면서도 완전히 새로운 시작을 하고 싶었습니다—아무것도 없는 상태에서 부트스트래핑하는 것은 현실적이지 않았습니다.

EPFL에서 교수가 되면서 끊임없는 연구비 확보에 쫓기지 않고 작은 연구 그룹을 꾸릴 자유를 얻었습니다. 처음에는 join calculus라는 아름다운 동시성 모델을 기반으로 급진적인 접근을 시도했습니다. 우리는 Functional Nets라는 객체지향 버전과 Funnel이라는 언어를 만들었습니다. 하지만 곧 Funnel의 순수성이 실용적인 사용에 부적합하다는 것을 깨닫고 방향을 재고하게 되었습니다…

Back to Blog

관련 글

더 보기 »

core.async: 심층 탐구 — 온라인 밋업

이벤트 개요: 12월 10일 GMT+1 기준 18:00에 Health Samurai가 온라인 밋업 “core.async: Deep Dive”를 주최합니다. 이번 강연은 clojure.core의 내부를 파헤칩니다....