Christmas — 15년 뒤의 최초 안정판, 그리고 릴리스란 약속이다

「Perl 6은 크리스마스에 나온다」는 오랜 농담이었다. 어느 해의 크리스마스인지는 말하지 않는다, 는 것이 핵심이다. 2015년, Larry Wall은 그 해를 지정했다. 그리고 12월 25일, Perl 6.c Christmas가 릴리스된다. 기술적으로는 전부터 돌아가고 있었다. 바뀐 것은 약속이었다 — 여기서부터는 이 동작을 깨뜨리지 않는다, 는.

perlrakuhistoryreleaseversioningprogramming-languages

해를 말하지 않는 농담

Perl 6에는 오랜 농담이 있었다.

「Perl 6은 크리스마스에 나온다」

핵심은, 어느 해의 크리스마스인지를 말하지 않는 것이다.

15년 동안, 이 농담은 계속 작동했다. 계속 작동했다는 것은, 나오지 않았다는 것이기도 하다.

2015년 2월, FOSDEM 기조강연에서 Larry Wall이 그 해를 지정했다. 강연 제목은 “Get Ready to Party!”. 2015년 크리스마스에, Perl 6을 production ready로 낸다.

같은 해 10월의 개발판 릴리스 때, 그는 이렇게 말했다.

오래된 농담대로, Perl 6은 이번 크리스마스에 나옵니다. 다만 이번에는, 진심입니다.

2015년 12월 25일 — Perl 6.c “Christmas”

나왔다. 발표로부터 15년 5개월이다.

무엇이 릴리스되었는가

여기는 정확히 쓸 필요가 있다. 릴리스된 것은, roast의 동결점이다.

7화에서 쓴 대로, Perl 6의 사양의 정본은 테스트 스위트 roast에 있다. 「6.c」란, 2015년 12월 시점의 roast를 동결한 것을 가리킨다.

처리계(Rakudo)는 그 전부터 돌아가고 있었다. Rakudo Star는 2010년부터 배포되고 있었고, 실용적으로 Perl 6을 쓰고 있는 사람은 이미 있었다.

그렇다면, 무엇이 바뀌었는가.

릴리스란 기능이 아니라 약속이다

여기가, 이 회에서 가장 쓰고 싶은 점이다.

6.c의 릴리스로 기술적으로 늘어난 기능은 거의 없다. 늘어난 것은 약속이다.

여기서부터, 6.c의 roast가 통과하는 동작은 깨뜨리지 않는다.

이것이 안정판 릴리스의 의미다.

  • 그때까지: 사양은 움직인다. 오늘 쓴 코드가 다음 달 돌아가지 않을 수 있다
  • 그 이후: 6.c를 선언한 코드는, 미래의 Rakudo에서도 돌아간다

4화에서 쓴 use v6.c;라는 버전 프라그마가, 이 약속의 구현이다. 하나의 처리계가 여러 언어판을 동시에 지원한다.

여기에, 이 연재의 아홉 번째 형이 있다.

릴리스란 기능의 추가가 아니라, 바꾸지 않겠다는 약속의 시작이다.

그래서 「더 기능이 갖춰지고 나서 냈으면 좋았다」는 비판은 과녁을 빗나간다. 약속을 시작하는 것이 늦어질수록, 약속이 시작되지 않는 기간이 늘어날 뿐이기 때문이다.

그리고 뒤집어 말하면, 약속을 시작한 순간부터, 하위 호환성이라는 짐이 시작된다. 2화에서 Perl 5에 대해 쓴 것이, Perl 6에도 적용되기 시작했다.

15년이란 무엇이었는가

여기서 한 번, 이 연재의 전반을 정리해 두고 싶다. 3화에서 「이유는 넷 있다」고 예고한 것이다.

1. 설계가 너무 웅대했다(4화)

시길 불변성, grammar, 다중 디스패치, 메타 연산자, Junction, 지연 평가, 점진적 타이핑, MOP, 유리수의 수치 타워. 어느 하나만 해도 언어 하나 분량의 일이고, 게다가 서로 독립적이지 않았다.

2. 구현 기반의 내기를 빗맞혔다(6화)

Parrot에 오래 투자했고, 최종적으로 쓰이지 않았다. 범용 VM의 전제(여러 언어가 올라탄다)가 성립하지 않았다. 2013년에 MoarVM으로 옮겼고, 거기서 2년 반 만에 6.c에 닿았다. 즉, 기반이 정해지고 나서는 빨랐다.

3. 사양이 계속 움직였다(5 · 7화)

구현이 사양을 따라잡으면 사양이 움직이는 왕복이 길었다. 이것 자체는 건전한 기구다(Pugs가 시작한 것이다). 그러나 그 왕복이 VM 층까지 닿으면, 비용의 자릿수가 달라진다.

4. 전임 담당자가 얇았다

Pugs의 감속이 그 가장 선명한 예였다. 한 사람의 이탈이, 전체의 속도를 바꿨다.

정리하면

태만도 혼란도 아니다. 스코프와, 기반 선정의 한 번의 실패와, 인원의 얇음이다.

그리고 이 넷 중, 두 번째만이 「다시 할 수 있었던」 것이었다. MoarVM으로의 이행은 2013년, 6.c는 2015년. 기반이 정해지고 나서의 2년 반이, 이 언어의 실질적인 완성 기간이었다고도 할 수 있다.

무엇을 얻고, 무엇을 잃었는가

나온 것 자체는 달성이다. 15년을 들여, 하려고 한 것은 대체로 실현되었다. 4화에서 늘어놓은 9항목은, 거의 전부가 돌아가는 언어로서 존재한다.

그러나 이 15년으로 잃은 것도 있다. 정직하게 쓴다.

잃은 것 1 — 평판

「Perl 6은 느리다」는 평가는, 주로 Parrot 시대의 것이었다(6화). 기반이 갈아 끼워져도, 평판은 기반보다 오래 살았다.

잃은 것 2 — 기다리고 있던 사람

2000년에 「몇 년 안에 나온다」고 들은 사람들은, 15년 사이에 다른 언어로 옮겼다. Ruby on Rails가 나오고, Python이 과학 계산에서 뻗고, JavaScript가 서버 쪽에도 오고, Go나 Rust가 나타났다.

Perl 6이 나왔을 때, 그것을 기다리던 사람의 대부분은, 이미 기다리고 있지 않았다.

잃은 것 3 — Perl 5와의 관계

이것이 가장 무겁다.

Perl 5는 15년간, 기다리고 있지 않았다(2화 · 4화). Moose가 나오고, 5.10이 나오고, 연차 릴리스 체제가 되어, 독자적으로 진화하고 있었다.

그리고 밖에서 보면, **「6이 나왔는데 5를 쓰고 있다」**는 기묘한 상태가 15년 이어졌다. Perl 5의 사용자는, 존재하지 않는 후계에 계속 쫓겼다.

이 15년에 가장 손해를 본 것은, Perl 6이 아니라 Perl 5였을지도 모른다.

6.d “Diwali”(2018년)

두 번째 언어 버전이 2018년에 나온다. 이름은 Diwali — 힌두의 등명제다.

Christmas, Diwali로, 판의 이름이 문화를 넘나드는 것은 의식적일 것이다. 2026년 9월 시점에서는 6.d가 기본값이고, 6.e가 책정 중이다(12화에서 다룬다).

그리고, 이름의 문제가 남았다

6.c가 나온 것으로, Perl 6은 「완성되지 않은 언어」가 아니게 되었다. 기술적인 물음에는 답이 나왔다.

그러나, 이름의 문제는 아무것도 해결되지 않았다.

  • Perl 5는 여전히 「6이 나왔는데 5」로 보인다
  • Perl 6은 여전히 「Perl의 새 버전」으로 소개된다
  • Perl 5는 여전히 버전 번호를 진행할 수 없다

그리고 중요하게도, 6.c가 나온 것으로, 비로소 개명이 가능해졌다.

미완성인 채로 이름을 바꾸면 「실패했으니 도망쳤다」고 읽힌다. 완성된 언어가 이름을 바꾸는 것은, 독립의 선언이 된다.

개명이 2019년인 이유의 일부는, 여기에 있다.


다음 회(9화): 이름이 기술 부채가 될 때. 「Perl 6」이라는 이름은, 19년간, 검증되지 않은 주장을 계속 실어 날랐다. 삼자가 손해를 보는 구조와, 이름이 부채가 되는 조건의 이야기를 한다.

← Back to Perl과 Raku의 계보