Trace foward

루비 새로운 도약을 시작하다

루비 1.9가 오늘 새벽에 공식 발표됐습니다. 릴리즈 버전은 1.9.1-p0이고, 이곳에서 소스코드를 다운로드 받을 수 있습니다. 1.8에서 1.9로 소수점 아래 숫자가 올라간거니 마이너 업그레이드가 아니냐구요? 절대 그렇지 않습니다! 1.8 버전의 첫 발표 이후로 무려 5년 반만의 메이저 버전 업그레이드랍니다. ;)

레일스 효과(?)로 루비가 2005년 전후부터 갑작스레 인기를 끌면서 가장 많이 받았던 비판이 "속도가 느리다"는 것이었는데요, 루비 1.9는 지난 4년 간 개발된 Yarv 가상머신을 기반으로 만들어졌기 때문에 성능 면에서 비약적인 발전이 있었습니다. 가장 최근의 벤치마크에 따르면, 루비 1.9.1의 실행 속도는 루비 1.8.7에 비해 무려 평균 2.5배가 빠르답니다.

성능 외에 신택스나 기능적으로도 적지않은 변화가 있었습니다. 문자열 단위의 인코딩 지정 기능, 해시키 순서 보존, 새 해시 인자 신택스, 네이티브 쓰레드, 파이버, 블록 인자의 로컬변수화 등이 떠오르네요. 그리고 빌드툴인 rake와 패키지 관리툴인 rubygems가 코어에 포함됐습니다. 전체적으로 바뀐 내용이 궁금한 분은 이곳을 참고하세요.

지난 4년이 루비가 세상에 이름을 알리고 기반을 다지는 시기였다면, 올해는 루비가 본격적인 도약을 시작하는 첫 해가 될 것 같습니다. 저도 앞으로는 루비에 관한 좀더 다양한 내용을 다뤄볼 생각입니다.

팁으로 루비 1.9 컴파일/설치 방법을 첨부합니다. 우선 GNU Readline 라이브러리를 설치해야 합니다. (업데이트: yy님이 댓글에서 지적하셨듯이 맥 OS X 10.5에서 readline 컴파일 문제가 있습니다. 이를 해결하는 패치 적용을 아래 내용에 추가했습니다.)

$ curl -O ftp://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz
$ tar xzvf readline-5.2.tar.gz
$ cd readline-5.2
$ curl -O http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-012
$ patch -p0 < readline52-012
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

다음은 루비 1.9 설치입니다.

$ curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p0.tar.bz2
$ tar xjvf ruby-1.9.1-p0.tar.bz2
$ cd ruby-1.9.1-p0
$ ./configure --enable-pthread --prefix=/usr/local --with-readline-dir=/usr/local
$ make
$ sudo make install

이로써 ruby, irb, ri, rdoc, rake, gem 등의 실행파일이 /usr/local/bin 디렉토리에 설치됐습니다.

루비 컨퍼런스 2008 - 세째날

컨퍼런스 마지막 날은 "Matz Q&A" 세션과 함께 시작됐습니다. "Matz Q&A"는 컨퍼런스 참석자들이 마츠에게 직접 루비에 관해 질문하는 시간인데, "루비를 선물해 주셔서 감사합니다, 마츠"라는 말로 질문을 시작하는 모습들이 인상적이었습니다. "개발자들이 애정을 갖는 프로그래밍 언어를 만들고 싶었다"는 마츠의 말이 무색하지 않을 장면이었죠. 저 역시 2년전 마츠를 처음 만났을때 맨 먼저 건냈던 말이었구요. :)

두번째로 참석한 "Ruby 1.9: What to Expect"는 루비 1.9에서 변화될 내용을 다룬 발표였습니다. 루비 1.9가 궁금하신 분들은 이곳이곳에 자세히 정리된 내용을 참고하시기 바랍니다.

제가 참석한 마지막 발표는 "Dramatis: Actors for Ruby"였습니다. Dramatis는 Erlang의 병렬 프로세싱 모델을 루비 라이브러리로 구현한 것입니다. 얼랭 전도사 석준님이 반가워하실 프로젝트일 것 같습니다. ;)

일주일 정도 후에 발표 동영상이 Confreaks 사이트에 공개될 예정이니, 관심있으신 발표는 동영상을 직접 참고하시면 좋을 듯 합니다. 그럼 마츠와 함께 찍은 기념 사진을 마지막으로 루비 컨퍼런스 2008 리포트를 모두 마치겠습니다.

With Matz

업데이트: 루비 컨퍼런스 2008 동영상이 올라왔습니다.

루비 컨퍼런스 2008 - 첫날

지난 주에는 미국 올랜도에서 열린 "루비 컨퍼런스 2008"에 다녀왔습니다. 플로리다는 휴양지란 이야기만 많이 들었지 직접 가보기는 처음인데요, 11월에도 무려 해수욕이 가능한 날씨더군요. 2006년 덴버 컨퍼런스도 그랬지만 주최측에서 장소 선정에 신경을 많이 쓰는 것 같습니다.

Miami South Beach

2006년 컨퍼런스는 정원 250명에 단일 트랙으로 진행이 됐었는데, 올해는 정원을 500명으로 늘리고 세션도 트랙 3개로 진행하더군요. 발표 수가 늘어나니 주제가 다양해져 좋았습니다.

첫날은 마츠의 기조연설로 컨퍼런스가 시작됐습니다. 연설 주제는 "루비의 존재 이유"였습니다. 마츠가 밝힌 루비의 존재 이유는 바로 "사랑"입니다. 루비 문화에 익숙하지 않은 분들은 조금 뜬금없다고 생각할 지도 모르겠는데요, 마츠가 루비를 설계하는데 있어 가장 고민하는 부분이 바로 개발자들이 애정을 갖는 프로그래밍 언어를 만드는 것이기 때문입니다.

마츠의 기조연설 중 몇가지 인용구를 꼽아봤습니다

"Why do we love Ruby? or: How I learned to stop worrying and love Ruby." (스탠리 큐브릭의 1964년 영화 "Dr. Strangelove"의 패러디)

"Smart people underestimate ordinarity of ordinary people." (일반인들이 Lisp을 어려워하는 이유)

"BASIC gives you no power. Lisp gives you too much power. At both ends, we lose popularity."

"LISP is worth learning for a different reason — the profound enlightenment experience you will have when you finally get it. That experience will make you a better programming language designer for the rest of your days, even if you never actually use LISP itself a lot." (에릭 레이먼드의 에세이 "How To Become A Hacker"의 패러디)

"루비 개발자 수는 현재의 100만명 수준에서 2013년에는 최소 400만명 이상으로 늘어날 전망" ("eWeek 보고서" 인용)

마츠의 기조연설은 늘 그렇듯이 흥미롭고 생각할 거리를 많이 주는 내용이었습니다. 그나저나 마츠는 갈수록 유머가 느는군요. 영어가 유창해지면서 그런 면이 더욱 돋보이는 것 같습니다. :)

기조연설 후에 제가 참석한 첫번째 발표는 코이치 사사다의 "Future of RubyVM"입니다. 현재 루비 1.9의 개발을 이끌고 있는 사사다상은 도쿄 대학교 컴퓨터 공학과에서 교수직을 맡고 있기도 합니다. 코이치는 루비 1.9 VM의 퍼포먼스 개선 전략과 함께 여러 루비 VM 간의 장단점 분석에 관한 내용을 다뤘습니다.

루비 1.9 VM 퍼포먼스 개선 전략은 꽤 기술적인 내용인데, Dynamic code generation, Native compilation, JIT compilation, Polymorphic inline cache, Selective inlining, Online feedback, Hotspot JIT, Tracing JIT 등이 개념들이 다뤄졌습니다.

발표 내용 중 루비 VM 간의 장단점을 표로 정리해 봤습니다.
장점단점
루비 1.9
(Yarv)
C 코드 베이스라 이식성이 우수
익스텐션 개발 용이
기존의 C 라이브러리 활용 가능
단기적 퍼포먼스 최적화 작업 용이
익스텐션 라이브러리가 C로 작성돼야 함
GC 성능의 개선 필요
C 코드는 파스 트리 분석 등이 어려움
JRuby/
IronRuby
이미 최적화된 자바/.Net VM 활용
자본과 개발 인력이 풍부
기존 자바/.Net 라이브러리 활용 가능
자바/.Net의 멀티쓰레딩 활용 가능
자바/.Net VM 사용으로 시맨틱 불일치 발생
기존 C 익스텐션 라이브러리 사용 불가
Rubinius 대부분의 구현 코드가 루비로 작성됨
장기적으로 가장 바람직한 VM 구현 전략
퍼포먼스 개선에 오랜 기간 소요 예정

루비 1.9는 예정보다 한달 늦은 2009년 1월 25일에 공식 릴리즈될 예정이라고 합니다. 루비 1.9는 현재도 꽤 안정적이며, 이곳에서 프리뷰 버전을 다운로드 받을 수 있습니다. 루비 1.9에 내용은 나중에 별도의 글을 통해 자세히 다루겠습니다.

그 외에도 임베디드 환경에 최적화된 루비인 Atomic-Ruby나 효율적인 병렬 처리 지원을 위한 MVM (Multiple VM) 프로젝트 등이 진행되고 있다고 합니다. 개인적으로는 MVM 프로젝트에 많은 기대를 갖고 있습니다.

"Using Git in Ruby Applications", "Building Distributed Application", "Ruby In the Clouds", "Unfactoring From Patterns: Job Security Through Code Obscurity", "Ruby Persistence in MagLev" 등의 발표에 참석했는데, 관심있으신 분들이 계시면 다른 기회에 더 이야기해보도록 하지요.