레일스 1.2.3

Posted by 大山 Wed, 14 Mar 2007 00:40:00 GMT

레일스 1.2.3이 릴리즈되었습니다. 루비 1.8.6과 호환된다는 반가운 소식이네요. :)

웹 개발 2.0 루비 온 레일스에서는 레일스와의 호환 문제 때문에 루비 1.8.4를 사용할 것을 추천했었습니다만, 이제 루비 1.8.6을 사용하시면 될 것 같습니다.

업데이트(3/22): 루비 1.8.6 윈도우 인스톨러, 루비 1.8.6 소스 다운로드

Posted in  | Tags ,  | 5 comments | no trackbacks

[알림] "웹 개발 2.0 루비 온 레일스" 출간 예정

Posted by 大山 Mon, 05 Mar 2007 21:44:00 GMT

그동안 작업해온 원고가 이제 웹 개발 2.0 루비 온 레일스란 이름을 달고 책으로 나옵니다. 안도와 설레임 그리고 긴장감이 교차하네요. :O

멋진 몇몇 분들께서 서문/리뷰를 써주셨습니다~ :)

덴마크에서 시작된 작은 오픈소스 프로젝트 하나가 이제는 전 세계 웹 개발자들의 삶을 뒤바꾸고 있습니다. 이제는 제 고향에서 지구 반 바퀴만큼이나 떨어진 한국에서도 레일스에 관심이 있는 분들이 많다는 이야기를 들으니 무척 뿌듯합니다.

또한 황대산님이 쓴 한국의 첫 루비/레일스 저서인 『Easy Start! 웹 개발 2.0 루비 온 레일스』에 축하의 인사를 전할 수 있게 되어 매우 영광입니다.

- 데이빗 해너마이어 한슨, 레일스 프레임워크의 창시자

원고를 탈고하기까지 이 책의 저자인 황대산님은 주변사람들이 만류해야 할 정도의 뜨거운 열정을 보여줬다. 해외에서 열린 여러 컨퍼런스에 자비를 들여 적극적으로 참여하면서 얻은 노하우를 독자들에게 전하기 위해 혼신의 힘을 다해 한 편의 명저를 만들어 냈다.

- 박 수 만, 더블트랙 대표이사

마지막에는 다소 복잡한 블로그 애플리케이션을 만들어 본다. 그런데 처음부터 차근차근 따라오면서 공부한 사람이라면 블로그 애플리케이션이 결코 복잡하게 느껴지지 않는다. 그만큼 이 책은 처음부터 끝까지 쉽고 체계적으로 설명하고 있다. 이 책의 가장 큰 매력이다.

- 박 상 길, 다음커뮤니케이션 기술혁신센터, likejazz.com 블로그

아끼는 후배 개발자를 옆에 앉혀 놓고 자상하게 가르쳐주는 선배처럼 레일스를 기초부터 학습할 수 있도록 꼼꼼하고 친절하게 가이드 해주고 있다. 불필요한 기능과 작업을 최소화하고 핵심에 집중할 수 있게 해주는 레일스와 이 책은 그런 면에서 꼭 닮았다.

- 이 일 민, 이프릴 대표 컨설턴트, toby.epril.com 블로그

『Easy Start! 웹 개발 2.0 루비 온 레일스』는 루비 온 레일스의 입문자들이 루비와 레일스를 이해하고 자신만의 애플리케이션을 손쉽게 만들어 볼 수 있도록 친절한 가이드 역할을 해주고 있습니다. 그리고 책을 읽으면서 초심자들이 중급자로 성장할 수 있도록 도와줍니다. 곳곳에서 보이는 저자의 세심한 배려는 이 책이 지닌 여러 가지 장점 중 하나입니다.

- 장 정 환, NHN㈜ Ajax UI 팀장

모쪼록 많은 분들께 도움이 되었으면 좋겠습니다. 궁금한 점이 있으시면, 댓글로 물어봐주세요.

지금 Yes24강컴에서 예약 판매 중입니다.

Posted in  | Tags ,  | 32 comments | no trackbacks

함수형 프로그래밍 2 - 커링

Posted by 大山 Sat, 24 Feb 2007 07:20:00 GMT

[참고: 이 글은 함수형 프로그래밍 1 - 함수 합성에 이어지는 시리즈임.]

앞 글에서는 두개 이상의 함수를 합성하여 새로운 함수를 만드는 방법을 살펴보았다. 이번 글에서는 함수에서 일부 인자의 값을 고정하여 새로운 함수를 만드는 커링(Currying) 기법을 다뤄본다. 우선 다음의 함수를 살펴보자.

f(x, y) = x^2 + y^2
g(y) = f(0, y) = y^2
 

위에서 함수 f는 x, y 두개의 인자를 가지는 함수이다. 함수 g는 함수 f에서 첫번째 인자의 값을 상수로 고정시켜 만든 새로운 함수이다. 이처럼 함수 f에서 일부 인자의 값을 상수로 고정시켜 새로운 함수 g를 만드는 과정을 커링이라고 부른다. (그래프로 보면, z = y^2 그래프의 모습은 z = x^2 + y^2 그래프와 x = 0 그래프가 만나는 단면의 모습이다.)

루비에서 함수 f, g는 다음과 같이 정의할 수 있다.

f = lambda {|x, y| x**2 + y**2}
g = f[0]
 

하지만 실제로 위의 코드를 실행하면, 두번째 줄에서 함수 f의 인자 개수가 틀리다는 에러가 발생하게 된다. 루비의 함수 호출은 커링 기능을 지원하지 않기 때문이다. 루비에 커링 기능을 추가하기 위해서는 다음의 코드가 필요하다. (이 코드는 Proc 클래스의 [ ] 메소드를 새롭게 정의하고 있다.)

class Proc
  def [](*a)
    if arity > a.size
      lambda {|*b| self[*(a+b)]}
    else
      self.call(*a)
    end
  end
end
 

이제 irb에서 실제로 코드를 입력해보자.

>> class Proc
>>   def [](*a)
>>     if arity > a.size
>>       lambda {|*b| self[*(a+b)]}
>>     else
?>       self.call(*a)
>>     end
>>   end
>> end
=> nil
>> f = lambda {|x, y| x**2 + y**2}
=> #<Proc:0x010abc10@(irb#1):10>
>> g = f[0]
=> #<Proc:0x010af310@(irb#1):4>
>> f[0, 5]
=> 25
>> g[5]
=> 25
 

Posted in  | Tags , ,  | 6 comments | no trackbacks

함수형 프로그래밍 1 - 함수 합성

Posted by 大山 Sun, 04 Feb 2007 14:20:00 GMT

함수형 프로그래밍이란 함수를 연산의 대상으로 삼는 프로그래밍 패러다임을 말한다. 수학의 함수를 떠올리면 되는데, 우선 다음의 예를 살펴보자.

f(x) = x + 3
g(x) = x^2
h = g * f
 

위에서 함수 h는 함수 f와 g를 합성한 새로운 함수이다. 이제 함수 h는 다음과 같게 정의된 것이나 마찬가지이다.

h(x) = g(f(x)) = (x + 3)^2 = x^2 + 6x + 9
 

루비는 객체지향 언어지만, 동시에 함수형 프로그래밍 언어이기도 하다. 이제 루비에서 함수 f와 g를 정의한 후, 이를 합성하여 함수 h를 만드는 과정을 살펴보도록 하자. 루비에서 함수를 정의할때는 lambda란 메소드를 사용한다. (여기에서 말하는 함수란 물론 Proc 객체를 말한다. 일반 메소드와 구분하기 위해 여기에서는 함수라는 표현을 사용하고 있다.)

f = lambda {|x| x + 3}
g = lambda {|x| x ** 2}
 

이제 함수 f와 g를 결합할 차례인데, 이를 위해서는 다음의 코드를 먼저 선언해 주어야 한다. [1]

class Proc
  def *(func)
    lambda {|*a| self[func[*a]]}
  end
end
 

위의 코드는 함수 간의 연산인 *를 정의하는데, 이 연산이 바로 함수를 합성하는 연산이다. (위의 코드는 Proc 객체에 * 메소드를 추가하고 있다.) 이제 루비에서 다음과 같은 코드를 작성할 수 있게 된다.

h = g * f
 

이제 irb에서 실제로 코드를 입력해보자.

>> class Proc
>>   def *(func)
>>     lambda {|*a| self[func[*a]]}
>>   end
>> end
=> nil
>> f = lambda {|x| x + 3}
=> #<Proc:0x0051d3f8@(irb):6>
>> g = lambda {|x| x ** 2}
=> #<Proc:0x0051a978@(irb):7>
>> h = g * f
=> #<Proc:0x0051ff2c@(irb):3>
>> f[2]
=> 5
>> g[5]
=> 25
>> h[2]
=> 25
 

위에서 'f[2]'는 루비에서 함수를 호출할때 사용하는 방식이다. 이 표현 대신 'f.call(2)'를 사용하는 것 또한 가능하다.

  1. Proc 클래스의 * 메소드의 구현은 Ruby Facets 라이브러리를 참고하고 있음.

관련글: 함수형 프로그래밍 2 - 커링

Posted in  | Tags ,  | 12 comments | no trackbacks

프로그래밍 루비

Posted by 大山 Mon, 29 Jan 2007 13:04:00 GMT

드디어 프로그래밍 루비가 국내에서 번역되어 출간되었습니다!

프로그래밍 루비의 영문판 출간이 영어권에서 루비가 널리 알려진 계기였듯이, 이번 한글 번역판의 출간이 국내에서 루비가 널리 확산되는 계기가 되리라고 생각합니다. 루비에 관심은 있는데 책이 없어 망설이시던 많은 분들께 희소식이 될 것 같습니다.

제가 집필하고 있는 레일스 책도 곧 마무리지어 선보이도록 하겠습니다. 아마 책이 출간되면, 이 블로그도 다시 활발해질 것 같네요. 글이 뜸하다고 뭐라하시는 분들 조금만 기다려 주세요. ;)

Posted in  | Tags ,  | 9 comments | no trackbacks

루비 세미나 후기

Posted by 大山 Sun, 26 Nov 2006 17:42:00 GMT

어제는 첫 루비 세미나 모임오픈마루 회의실에서 열렸다. 첫 발표를 맡으신 Ias님은 JRuby에 대한 상세한 내용을 다루어 주셨다. 특히 JRuby의 설정, 사용법, 용도 등과 관련한 내용을 많이 짚어주셔서, JRuby 사용을 염두에 두고 있는 분들에게 많은 도움이 되었을듯.

두번째 발표는 정목님Capistrano 발표였는데, 깔끔한 프레젼테이션 스킬이 돋보이는 발표였다. Capistrano는 레일스 Deployment를 자동화시켜주는 툴인데, 덕분에 Capistrano를 사용하는 과정 전체를 잘 들여다 볼 수 있었다.

세번째 발표는 내가 준비한 루비 메타 프로그래밍이었다. 메타 프로그래밍은 루비에서 런타임에 동적으로 메소드를 추가하는 프로그래밍 기법으로, 레일스 등에서 널리 응용되고 있는 기능이다.

예를 들어, 다음처럼 Base 클래스에 'my_attr_accessor'이란 클래스 메소드가 정의되어 있다고 가정해보자.

class Base
  def self.my_attr_accessor(str)
    class_eval "def #{str}; @#{str}; end"
    class_eval "def #{str}=(value); @#{str}=value; end"
  end
end
 

위에서 'my_attr_accessor' 클래스 메소드는 'class_eval' 메소드를 호출하여 문자열로 작성된 루비 코드를 실행시킴을 알 수 있다. 이 때문에 Base 클래스를 상속받는 모든 클래스는 단지 'my_attr_accessor' 메소드를 호출함으로써 특정 인스턴스 변수에 대한 접근자 메소드를 동적으로 정의할 수 있다. 즉, 다음 두개의 Person 클래스 정의는 논리적으로 동일하다.

class Person < Base
  my_attr_accessor "name"
end

class Person
  def name
    @name
  end
  def name=(value)
    @name=value
  end
end
 

실제로 루비에는 'my_attr_accessor'와 비슷한 기능을 하는 'attr_accessor'라는 메소드가 이미 정의되어 있어 새로운 클래스를 정의할때 사용할 수 있다.

막상 발표를 끝내고 보니 구체적인 예를 더 준비하지 못한게 아쉬웠는데, 마침 deepblue님루비를 즐겨요 발표가 내용적으로 이어지는 발표가 되어 좋았다. 이 발표는 과연 '루비스러운 코드는 무엇인가'에 관한 내용이었는데, 다소 형이상적일수도 있는 이 물음에 deepblue님은 다음과 같은 답을 제시했다.

루비스러운 코드는 개발자가 고민한 시간이 묻어있는 사람 냄새나는 코드입니다.

위의 구절에서도 deepblue님의 고민과 사람 냄새가 느껴지는 듯. :)

다섯번째 발표는 seradin님의 Groovy/Grails에 관한 내용이었다. seradin님의 세련된 말솜씨가 돋보이는 발표였는데, 덕분에 Groovy/Grails에 대한 내용을 쉽게 파악할 수 있어 좋았다. Groovy는 자바의 스크립팅 언어 지원 정책과 관련해서도 유심히 지켜봐야할 언어일듯 싶다.

아쉽게도 저녁에 다른 약속이 잡혀있어 끝까지 참석하지는 못했지만, 다른 분들의 후기와 발표자료를 읽어보니 모두 유익하고 흥미로운 발표였던 것 같다.

다소 아쉬웠던 점은 아무래도 발표가 중심이다보니 토론이 쉽게 이루어지지는 않는 면이 있었다. 다음부터는 세미나 주제를 두어개로 고정해서, 조금 더 토론 중심적인 모임을 가져보면 어떨까하는 생각도 든다.

Posted in  | Tags , , ,  | 11 comments | no trackbacks

루비 vs PL/I

Posted by 大山 Fri, 17 Nov 2006 17:53:00 GMT

최근에 한 시중 은행의 전산망을 총괄하시는 부장님을 만나뵐 기회가 있었다. 일반 엔터프라이즈 환경이야 특별히 궁금할 것도 없지만, 엔터프라이즈 중에서도 가장 보수적이라는 은행의 전산망 인프라는 예전부터 궁금해했던 참이라 신나게 이것저것을 여쭤볼 수가 있었다.

여기서 질문 하나. 은행의 전산실에서 주로 쓰이는 프로그래밍 언어는 무엇일까?

자바? 땡!

C++? 땡!

정답은 PL/I과 COBOL이다.

올해 초에 한 네덜란드 PL/I 개발자와 작업을 같이 한적이 있는데, 사실 그전까지는 나도 PL/I이라는 언어가 있는지도 몰랐었다. PL/I은 1960년대 초에 COBOL과 Fortran의 역할을 하나의 언어에서 해결하기 위해 IBM에서 만든 언어로, 은행의 전산실에서 PL/I이 많이 쓰이는 것은 아마도 IBM 메인프레임이 아직도 많이 사용되기 때문인 듯.

여기서 질문 하나 더. 왜 은행에서는 아직도 유닉스 서버 대신에 메인프레임이 사용되는 것일까?

답: 유닉스 서버는 다운이 잘되서.

윈도우에 비하면 철옹성같아 보이는 유닉스도 은행의 기준에서는 다운이 잘되는 편이라니, 할말을 잃었음. 최근에는 유닉스도 충분히 안정적이라는 판단이지만, 아직은 업체들의 지원 수준이 미덥지 못하다고 한다.

이번에는 다소 쉬운 질문. 은행에서 주로 사용되는 데이터베이스 서버는?

답: 오라클이 대세. Sybase도 가끔 눈에 띄는 정도. DB2는 찾아보기도 힘들다고.

1959년에 나온 COBOL과 1964년에 나온 PL/I이 아직도 지배하는 은행의 전산실, 과연 이곳에 변화의 기미는 없을까? 그렇지만은 않다고 한다. 요새는 PL/I 인력이 전혀 양성되지 않는 이유로 신규 인력은 모두 내부적으로 교육을 하는데, 요즘의 젊은 개발자들은 PL/I을 배우길 꺼려한다고.

Web 2.0이다 Ajax다 해서 나날이 변해가는 웹 개발에 비하면, 조선시대 만큼이나 먼 옛날의 기술이 아직도 점령하고 있는 은행의 전산실이지만, 시스템 안정성을 최우선하는 그곳의 보수적인 문화에서 배울 점도 적잖이 있었다. 데스크톱 애플리케이션이 다운되듯이 전산망이 다운된다면 큰일일테니 말이다. ;)

나의 루비 이야기에 아직도 프로그래밍 언어에 그만한 발전의 여지가 남아 있었냐고 놀라워 하시던 그분도 루비의 계보가 Lisp과 Smalltalk로 이어진다는 말에는 곧 고개를 끄덕이셨다. 언어는 달라도 SQL을 사용해서 데이터베이스 프로그래밍을 하는 것은 크게 다르지 않아, 레일스의 생산성이 어떻게 가능한지를 설명하는 것도 생각보다 어렵지는 않았다.

반세기에 가까운 기술의 간극에서 이런 대화가 가능하다는 것이 기술이 얼마나 빨리 변하는지를 웅변해 주는 듯한 느낌이다. 뭐 이미 루비로 구현된 신용카드 결제 모듈도 여럿 있는데, 언젠가는 은행의 전산실에서 루비가 쓰이는 것도 아주 꿈만은 아닐지도. :)

Posted in  | Tags , , ,  | 8 comments | no trackbacks

루비 컨퍼런스 2006 후기

Posted by 大山 Fri, 27 Oct 2006 19:42:00 GMT

지난 며칠간 루비 컨퍼런스 참석차 미국 덴버에 다녀왔다. 덴버는 나중에 여행만을 위해 다시 찾고 싶을 만큼 무척 아름다운 도시였다는 생각.

다른 컨퍼런스에서는 보통 세션 3-4개가 동시에 진행되기 마련인데, 루비 컨퍼런스는 단일 트랙으로 구성되어 있었다. 참석자 모두가 동일한 경험을 공유하기 위해서라는데, 그것보다도 쉬는 시간에 여유롭게 사람들과 이야기를 나눌 수 있어 좋았다. 컨퍼런스룸이 가로로 길고 좌우 양쪽으로 프로젝터가 설치되어 있어서 그런지, 300명이 넘는 참석자에도 불구하고 비교적 아담한 느낌.

첫날은 타카하시상의 "루비의 역사" 발표와 Evan Phoenix의 Rubinius 발표를 재미있게 들었다. 가장 흥미로웠던 내용은 일본 개발자들이 영어를 잘 못해서 파이썬보다 루비에 관심을 가지게 되었고, 덕분에 루비가 발전할 수 있었다는 점. 이런 경우엔 영어를 못하는 것이 유리할수도 있겠다는 생각이 들었다. Rubinius는 뒤에서 설명.

두번째 날에는 흥미로운 발표가 많았는데, 개인적으로 가장 좋았던 발표는 Nathaniel Talbott의 "Open Classes, Open Companies"였다. Nathaniel은 루비 컨퍼런스 2005의 "Rails: Serving the long tail in 1883 and 2005", 레일스 컨퍼런스 2006의 "Homesteading: A Thriver's Guide"에 이어 역시나 많은 영감을 주는 이야기를 들려주었다. 대략적인 내용은 루비의 동적 특성, 간결성, reflection, 개방성 등을 사업에 그래도 적용하자는 것. 상당히 공감이 가는 내용이었는데, 재미있는 것은 발표 후에 누군가가 그런 형태의 사업은 확장성(Scalability)에 문제가 있지 않겠냐는 질문을 했다는 점이다. 루비를 처음 접하는 사람 중에도 종종 확장성은 어떠냐며 괜한 걱정을 하는 경우가 있지 않은가. 경쟁력있는 사업을 만드는 것이 우선이지 단지 사람수를 늘리는 것이 중요한 것은 아닐텐데 말이다.

또다른 재미있는 발표로는 애플의 개발자인 Laurent Sansonetti의 "Leveraging Mac OS X from Ruby"를 꼽을 수 있다. 이 발표는 Laurent가 개발하고 있는 RubyOSARubyCocoa에 관한 내용이었다. RubyOSA는 기존의 AppleScript를 루비로 대체하는 라이브러리로, 맥 OS X의 GUI 애플리케이션을 루비로 스크립팅할 수 있게 해준다. 예를 들면, 포토샵을 시작하여 어떤 폴더에 있는 이미지를 모두 열고, 이를 특정 사이즈로 리사이징 하는 작업을 모두 루비로 자동화할 수 있다. Laurent는 irb에서 루비 코드만을 사용하여 iTunes를 시작하고, 특정 노래를 플레이하고, 볼륨을 조정하는 데모를 보여주었다. 모두들 환호했던 것은 물론이다. 개인적으로 AppleScript의 신택스에 불만이 많았기에 무척 반가운 소식이었다. 혹시 RubyOSA를 설치하실 분은, 먼저 루비를 1.8.5로 업그레이드 하도록. RubyCocoa는 뒤에서 설명.

가장 논란이 된 발표는 XML의 공동 창시자인 Tim Bray의 "I18n, M17n, Unicode, and all that" 발표였던듯 싶다. 결론만 요약하면, 자신은 썬마이크로시스템즈에서 근무하지만, 최근에 루비 팬이 되었다. 루비의 유니코드 지원은 아직 완전하지 못하다. 어떻게든 루비에서 유니코드 지원이 빨리 이루어졌으면 좋겠다 정도였던 것 같다. Tim의 의도는 아니었겠지만, 그의 발표는 유니코드의 취약점을 잘 드러내기도 했다. Tim은 유니코드 문자열에서, capitalize, upcase, downcase 등의 메소드를 지원하는 것은 위험하다고 주장했다. 영어 알파벳만 놓고 보면 모르지만, 전세계 charset이 모두 포함된 유니코드에서는 대소문자의 구별이 규칙적이지 못하기 때문이라는 것이다. 유니코드는 이처럼 모든 charset을 동시에 다룰 수 있는 장점이 있는 반면, 개별 charset에만 적용되는 메소드는 지원하기가 어중간하다는 단점이 있다. 나는 이런 이유 때문에라도 루비 2.0에서처럼 문자열마다 인코딩을 별도로 지정하는 방식이 모두에게 유니코드를 강요하는 방식보다 더 유연할 것이라고 지적했는데, Tim은 그다지 수긍하고 싶어하지 않는듯. 아무튼 Tim의 발표로 인해 컨퍼런스 내내, capitalize는 위험한 메소드라는 농담이 끊이질 않았다.

둘째날 저녁식사 후에는 Matz의 기조연설이 있었다. Matz는 루비 1.9.1이 2007년 크리스마스에 릴리즈될 것이라고 선언을 했다. 기조연설의 주요 내용은 커뮤니티가 루비 2.0의 설계에 보다 활발하게 참여할 것을 요청하는 것이었다. 각종 제안을 수렴하고 논의하기 위한 별도의 웹 사이트가 곧 만들어질 예정이라고 한다. 새로운 웹 사이트가 만들어지면, 개인적으로도 열심히 참여해야겠다는 생각.

마지막 날에는 코이치상의 Yarv 발표, 그리고 John Lam의 RubyCLR 발표를 관심을 가지고 들었다. 이제 Yarv는 왠만한 루비 프로그램은 다 잘 실행하는 단계가 되었다고 한다. 코이치상은 Yarv에서 레일스가 실행되는 것을 시연하였고, 모듈에 따라 Yarv의 실행속도가 최고 20배까지나 빨라졌다는 벤치마크를 공개하였다.

한가지 흥미로운 점은 루비의 실행환경이 부지기수로 늘어나고 있다는 것. 공식 루비 실행환경인 루비 1.8Yarv 이외에도 JRuby, RubyCLR, Ruby.NET, RubyCocoa, Rubinius 등이 모두 현재 활발하게 개발되고 있는 루비의 실행환경이다. JRuby는 자바로 구현된 루비 실행환경으로 루비에서 자바 클래스를 사용할 수 있도록 해준다. 일종의 루비/자바 브릿지 역할을 한다고도 볼 수 있는데, JRuby의 메인 개발자인 Charles Nutter는 곧 JRuby가 루비 코드를 자바 바이코드로 컴파일하는 기능도 갖추게 될 것이라고 했다. JRuby 프로젝트는 최근에 썬마이크로시스템즈에 인수되기도 했는데, 썬도 자바의 언어적 한계를 인정하고 점차 JVM을 범용 가상머신으로 재포지셔닝하고 있다는 느낌이다.

RubyCLR은 일종의 루비/.NET CLR 브릿지로 루비에서 C# 클래스를 접근할 수 있도록 해준다. RubyCLR을 사용하면, 루비로 윈도우 GUI 프로그래밍을 할 수 있다는 얘기. 컨퍼런스 중에 RubyCLR 프로젝트 역시 마이크로소프트에서 인수한다는 발표가 있었다. 마이크로소프트가 썬의 JRuby 인수에 자극을 받은건 아닐지. :) Ruby.NET은 RubyCLR보다 한걸음 더 나아가 루비 코드를 CLR 바이트코드로 컴파일해주는 독자적인 루비실행환경이다. 마이크로소프트가 Ruby.NET 대신 RubyCLR을 인수한 것은 다소 의문이지만, nohmad님이 답글에서 지적하신대로 Ruby.NET이 대학교 연구실에서 진행하는 프로젝트라 그럴수도 있겠다는 생각이 든다.

RubyCocoa는 루비로 맥 OS X의 Cocoa 클래스를 사용할 수 있게 해주는 루비/Objective-C 브릿지 라이브러리이다. JRuby나 Ruby.NET처럼 독자적인 루비 실행환경은 아니지만, 기존 루비의 실행환경에서 맥 OS X GUI 프로그래밍을 가능하게 해준다는 면에서 개인적으로는 더 선호하는 방식이다. Laurent에 따르면, 애플은 맥 OS 10.5 Leopard를 RubyCocoa와 RubyOSA를 포함한 통합 루비 프레임워크를 번들하여 출시할 예정이라고 한다.

Rubinius는 일종의 대안 루비 실행환경이라고 볼 수 있는데, 코드베이스를 보다 간소화하고, C 코드를 직접 작성하는 대신 루비로 루비 가상머신을 구현한 다음, 루비 코드를 C 코드로 변환하는 방식을 사용하여 개발하고 있다고 한다. 마지막으로 구글 Summer of Code 프로젝트 중에는 핸드폰(Symbian OS)에 루비를 컴파일하는 Ruby-Symbian 프로젝트도 있었다고 한다. 자바, 윈도우, 맥 OS X, 그리고 핸드폰에서 모두 루비를 지원하다니, 상당히 고무적이라는 생각. :)

추가적으로 궁금한 사항은, 답글로 질문주시길.

업데이트: nohmad님이 답글에서 지적하신대로 RubyCLR은 루비 런타임 환경이 아니라, Ruby/.NET CLR 브릿지 라이브러리였습니다. 본문 내용을 이에 맞게 수정합니다.

Posted in  | Tags ,  | 15 comments | no trackbacks

루비 한국어 홈페이지 오픈

Posted by 大山 Sat, 07 Oct 2006 13:39:00 GMT

루비 한국어 홈페이지가 드디어 오픈했습니다! 번역에 수고하신 deepblue님께 박수~ :)

Posted in  | Tags  | 2 comments | no trackbacks

마소 루비 특집

Posted by 大山 Thu, 28 Sep 2006 07:14:00 GMT

마이크로 소프트웨어 10월호에서 루비가 스페셜 리포트로 다뤄졌습니다.

1부는 제가 기고를 했기에 마소의 허락 하에 링크를 겁니다. 링크에서는 원래 제가 붙였던 제목인 "생각의 폭을 넓혀주는 프로그래밍 언어, 루비"를 사용하고 있습니다.

업데이트: 송치형님의 SR 3부 "레일스의 꽃, 액티브 레코드 집중 분석"도 링크합니다.

업데이트 2: 김석준님의 SR 2부 "루비 온 레일스로 만나는 차세대 웹!"도 링크합니다.

Posted in  | Tags ,  | 8 comments | no trackbacks

Older posts: 1 2 3