Hacker News는 이제 Common Lisp 위에서 구동됨
(lisp-journey.gitlab.io)- Hacker News는 기존에는 Arc라는 Lisp 계열 언어로 구현되었으나 최근 몇 달간 SBCL(Steel Bank Common Lisp) 로 전환됨
- 이번 전환의 주요 목적은 성능 향상과 멀티코어 지원 가능성 확보
- Arc-to-JS 변환기인 Lilt와 Arc-to-Common Lisp 변환기인 Clarc 개발로 인해 구조가 더욱 체계화됨
- Clarc의 소스코드 공개는 비교적 용이하나, HN 전체 코드베이스는 보안상의 이유로 공개가 어려움
- 새로운 구조로 HN이 부드럽게 전환되어 사용자 경험이 개선
개요
- Hacker News는 원래 Paul Graham이 만든 Arc라는 Lisp 계열 언어로 개발되었음
- Arc는 Racket 위에서 구현되었으나, 최근 몇 달간 SBCL(Steel Bank Common Lisp) 로 전환됨
- 그 이유는 성능 향상을 위해서임
성능 및 기능 변화
- 페이지 분할이 없어지는 등, 실사용 관점에서 성능 개선이 확인됨
- 과거에는 긴 댓글 스레드에서 페이징이 필요했으나, 지금은 한 번에 모두 로드되는 방식으로 변화함
- 이러한 변화는 Clarc의 도입으로 가능함
- Clarc는 멀티코어 환경에서 HN이 원활하게 구동될 수 있게 해줌
- Clarc 개발은 여러 해 동안 진행되어왔으며, 최근 마무리 단계에 가까워짐
구현 방식 및 구조
- Arc를 JS로 변환해주는 Lilt, 그리고 Arc를 Common Lisp으로 변환하는 Clarc가 존재함
- 기존 Arc 구현의 하위 구조를 재설계하여 Arc를 여러 단계로 나눠 개발함
- arc0는 시스템 언어(Racket, JS, CL)로 작성
- arc1은 arc0 위에서, arc2는 arc1 위에서 작성
- 상위 단계(arc2)에서 전체 기능 구현, 하위 단계는 최소화
- 이러한 구조 덕분에 다양한 런타임에서 Arc를 재구현하기가 쉬워짐
소스코드 공개 관련 이슈
- Clarc(Arc의 Common Lisp 구현체)의 오픈소스 공개는 상대적으로 쉬움
- 기존 Arc 릴리스를 Clarc로 포팅하면 가능
- 초기 버전 HN 샘플 앱은 이미 포함되어 있어, HN이나 YC-specific 부분은 없음
- 그러나 HN 전체 코드베이스는 악용 방지를 위한 여러 보안 메커니즘이 내장되어 있음
- 코드가 공개되면 이 부분이 무력화될 위험이 있음
- 보안 관련 부분을 분리하는 작업은 큰 부담임
Hacker News 의견
-
Hacker News는 "Worse is better"라는 철학이 소셜 엔지니어링에 적용된 완벽한 예시라는 생각, 90년대 말 Slashdot이 훨씬 더 다양한 기능과 풍부함을 가지고 있었지만 HN의 성공 요인은 극도로 집중된 포커스와 강력한 중재 시스템이라는 평가
- 드디어 Lisp 시스템이 "Worse is better"의 대표 주자가 된다는 농담스러운 감탄
- 가능한 한 최소한의 기술 위에서 플랫폼을 운영하고, 인간의 개입에 의존하는 HN 운영진의 아이러니함에 주목, '기술이 많다고 모두에게 도움이 되는 건 아니다'라는 본능적인 인지
- HN은 기능은 적지만 정말 우리가 더 많은 기능이 필요한지에 대한 의문, 적은 기능 덕분에 오히려 미니멀리즘적이라는 긍정 평가, 'less is more'라는 말을 떠올림
- HN이 수익을 내야 할 필요가 없는 점이 큰 도움이 된다는 생각
- 완벽함이란 새로운 걸 추가할 때가 아니라 더는 뺄 게 없을 때 달성된다는 Antoine de Saint-Exupéry의 명언 언급
-
Hacker News가 Common Lisp로 전체가 다시 작성된 게 아니라 Arc Runtime이 Common Lisp에서 다시 구현된 사실
- 이런 부분이야말로 Lisp가 가장 잘하는 부분이라는 감탄
-
Arc는 Racket 위에 구현됐으며, 원래는 MzScheme(처음엔 PLT Scheme의 코어, 나중에 Racket으로 이름 변경)에서 시작했다가 kogir라는 개발자의 기여로 Racket으로 옮겨졌다는 배경 지식 공유
- MzScheme이 PLT Scheme(현 Racket)의 핵심(non-GUI) 부분으로, pg가 옛날 메일링 리스트 작성 내역상 Scheme48 위에서 Arc 개발을 시작했다가 PLT로 옮겼다는 점이 항상 궁금했다는 의견
- 우리는 모든 Lisp 구현체를 한 바퀴 돌고 있는 건지 의문, '이상한 테세우스의 배' 버전이라는 유쾌한 비유
- MzScheme, PLT Scheme, Racket이 사실상 동일한 것 아니냐는 의문
-
Dang이 코드베이스에도 기여하는 것으로 들리고, 그 외에도 HN을 위해 오랜 시간 헌신하고 있는 사람이 있을 거라는 생각, HN 커뮤니티가 자신에게 가장 오래, 그리고 가장 즐겁게 남아 있는 인터넷 커뮤니티라는 경험, 단순한 참여자여도 Dang에게 뭔가 도움을 주고 싶거나 커피라도 사주고 싶은 마음
- 기억해야 할 점으로, Hacker News(이전에는 Startup News)가 사실상 Y Combinator라는 세계적으로도 가장 성공한 투자사의 마케팅 부서 역할이라는 사실, 그리고 HN 창업자이자 원 저자 Paul Graham이 현재는 최소 억만장자라는 사실, 그럼에도 불구하고 자체적으로 재정적 자립을 계속 추구하고, 기부도 받고 있다는 점
-
Clarc가 훨씬 빠르고 멀티코어 지원이 잘 된다는 설명을 보고, HN이 기존엔 전부 싱글코어에서 돌아갔다는 사실에 놀라움 표출
- 최신 CPU가 워낙 빨라서 4chan도 10년 된 PHP 스파게티 코드 1만 줄, 서버 1대로 4백만 사용자를 처리했다는 이야기, 최소한의 코드 품질과 프로파일링, 최적화만 되어 있으면 CPU 코어의 극히 일부로도 엄청난 트래픽 처리 가능, 병목은 대부분 디스크와 네트워크 I/O라는 현실 지적, HN이 텍스트만 서빙하기 때문에 상대적으로 쉽다는 설명
- 개발자가 현대 소프트웨어가 얼마나 비대하고 느린지 깨달을 때마다 천사가 날개를 얻는다는 재치있는 코멘트
- HN이 실제로 한 프로세스, 한 코어, 한 서버에서 돌았다는 점에 대한 충격, 관련 HN 토론 링크 첨부
- 최신 CPU를 제대로 활용하면 성능이 정말 뛰어나서, 규모 확장(scale-out) 전에도 많은 처리량을 감당 가능하다는 실전적 조언
- 다양한 과거 토론 링크 링크1, 링크2, 링크3, 링크4 제공
-
오픈소스 Arc 코드로 만든 웹사이트 운영자로서 Clarc 사용을 간절히 바라는 마음
- 그 사이트가 어디냐는 질문
-
sbcl(Steel Bank Common Lisp)이 진짜 실전용이라는 감탄, Racket 진영에서는 Arc의 실전 활용을 고려하지 않아 버그 수정을 안 했던 거 아닌가라는 추측, Racket을 실전에서 쓰는 다른 프로젝트를 못 들어봤다는 평, Armed Bear에 대한 애정(강력한 JVM 라이브러리 생태계)과 함께 Armed Bear Common Lisp 링크 공유
- Racket 커뮤니티는 항상 굉장히 친절했고, 요청하는 모든 버그를 잘 고쳐줬다는 경험 공유
-
"HN runs on top of SBCL since a few months"라는 문장에 언어적 어색함 지적, 올바른 영어는 "HN has been running on top of SBCL for a few months now."라는 제안
- "since"가 시점(at a point in time)과 함께 써야 맞는데 "a few months"는 기간(length of time)이라 어색하다는 설명, "since a few months ago" 혹은 "as of a few months ago" 등이 더 자연스러움, 또한 첫 문단이 시제도 혼용하고 있어서 더 눈에 띈다고 분석
-
아직도 Paul Graham이나 Robert Morris가 개발에 참여하고 있는지 궁금, 기사 전체를 훑어봤지만 언급을 확인하지 못했고, CL(Common Lisp)에 Arc가 더하는 부분을 살펴보고 싶다는 호기심, arclanguage.org 링크 제공
- 이미 두 개발자는 오래 전에 프로젝트에서 떠났다는 답변
-
Racket보다 Common Lisp가 훨씬 더 실용적이고, SBCL이 마치 마법 같은 느낌이라는 긍정적 평가