Ruby

1 소개

100px-Ruby_logo.svg.png

컴퓨터를 배운지 얼마 되지 않았을 때, 나는 프로그래밍 언어에 관심을 갖게 되었습니다. 당시 이상적인 프로그래밍 언어는 반드시 이룰 수 있는 것이라고 믿었고, 가능하면 그런 언어를 만드는 디자이너가 되고 싶었습니다. (중략)

나는 행복해지기 위해서 살아간다고 믿습니다(적어도 어느 부문에서는). 이런 믿음에 따라, 루비는 프로그래밍을 쉬우면서도 즐거운 일로 만들기 위해 디자인 되었습니다. 루비는 여러분이 프로그래밍의 창조적인 면에만 집중할 수 있도록 해주고, 스트레스를 줄여줄 것입니다.
- 마츠모토 유키히로, Programming Ruby의 추천사에서

루비는...

간결함과 생산성을 강조한 동적인 오픈 소스 프로그래밍 언어입니다.

루비의 우아한 문법으로 자연스럽게 읽히고 쓰기 편한 프로그램을 만들 수 있습니다.
- 루비 공식 홈페이지

프로그래밍 언어. 2016년 9월 기준 최신 안정화 버전은 2.2.5이다. 창시자는 마츠모토 유키히로(Matz). 창시자 마츠는[1] 트위터 bio를 Rubyのパパ 라고 쓸 정도로 ruby에 대한 애정이 강하다. 그 때문인지 ruby 유저들은 적지만, 랭귀지에 대한 애정이 강하다. PerlSmalltalk, Eiffel, Ada, Lisp, 파이썬 등의 언어로부터 일부 문법 사항을 계승하고 발전시켜, 적외선 굴절기 제작에일반적인 목적에 적합하게 만든 언어이다. 특히 파이썬은 지금도 서로 영향을 주고 받는 라이벌 관계. 언어의 문법이 쉽고 확장이 편리해서, 잘 디자인된 라이브러리를 이용하면 프로그래밍을 처음 시작한 사람도 복잡한 작업을 상대적으로 쉽게 할 수 있다는 점이 매력적이다. 그 때문에 객체 지향 프로그래밍 언어지만, 객체 지향에 대한 흔한 선입견과는 달리 초보자들도 쉽게 다룰 수 있다. 세계 10대 프로그래밍 언어 중 하나로 꼽히기도 하였으며, 2015년 기준 gitHub에서 인기언어 3위의 자리를 차지했다.# Made in Japan이라서인지 일본에서는 Python보다도 인기가 많다. 특히 웹은 물론 프론트, 백엔드 심지어 임베디드까지 안쓰는 곳이 없을 정도로 다방면에 절찬리 쓰이는 중이다.

이름의 유래는 창시자의 지인의 탄생석이라고 한다.#

2 버전

루비의 버전은 A.B.C 형식으로 표현하며 일반적인 오픈소스진영의 표기와 마찬가지로 B에 해당하는 숫자가 홀수면 개발버전, 짝수면 안정화 버전이다.[2] 단 1.9.x는 예외. 1.9 자체가 안정 버전. 또한 루비는 1.9버전을 기점으로 큰 성능의 향상이 있었으며, 이때 유저들 또한 많이 유입되었다. 이 때문에 1.9버전은 지금도 사용되는 곳이 간간이 있지만, 구버전을 사용해서 득볼 수 있는 것은 없으므로 특수한 케이스가 아니라면 최신 버전을 사용하자.

처리기로는 공식 인터프리터인 MRI(Matz's Ruby Interpreter. C로 만들어져서 CRuby라고 불리기도 한다)를 필두로 MacRuby, JRuby[3], IronRuby[4], Rubinius, MagLev 등 여러가지가 있다. 물론 표준 기능은 원칙상 다 같아야 하나, 어떤 언어로 어떤 가상 머신 위에서 어떻게 만드느냐의 차이가 있다. 근데 문제는 루비는 호환성이라는 개념을 반정도 쓰레기통에 갖다 버려서 인터프리터 종류는 둘째치고 버전이 다르다고 호환이 안되는 경우가 왕왕 있었다. 이 때문에 루비는 유달리 최신버전이 많이 강조된다.

3 특징

3.1 순수 객체지향

순수 객체지향적 언어는 원시 자료형이 사실상 존재하지 않고 모든 것은 객체인 언어를 말하는데, 루비가 이런 언어 중 하나이다. 다른 언어 중 예를 들어서 Java의 경우에는 int, char등 원시자료형이 있고, 그것을 Boxing한 Integer, Character 등의 클래스가 있다. 여기에 메소드까지 섞으면 클래스가 되는데, 루비는 클래스와 메소드를 모아둔 것이 클래스이고 원시 자료형이라고 구분지을 만한 것이 존재하지 않는다. 그 외에도 모듈이 있는데 모듈도 클래스다. 메소드도 당연히 클래스. 그리고 이 클래스는 모두 열려있다. 이를 OpenClass라고 하는데, 한마디로 사용자가 마음대로 수정하는 것이 가능하다.

3.2 함수형 언어

특이한 점이라면 스칼라와 같은 함수형 언어로서의 특징도 가진다는 것이다. 언어차원에서 Block 이라는 클래스를 지원하기 때문에 변수나 메소드의 인수로 코드의 집합, 즉 우리가 흔히 함수나 메소드로 부르는 그것을 전달할 수 있다. 그런 관계로 당연히 메소드 안에서 메소드를 생성 가능하며, 클로저를 지원한다. 또, 요즘의 Java[5], C++, Python과 같은 고급언어는 C++은 거의 저수준 아닌가 거의 모두 지원하는 람다도 있다. 게다가 아래의 메타 프로그래밍과 합쳐서 더욱 강력히 작용하기도 한다.

3.3 메타 프로그래밍

가장 큰 장점은 언어 자체를 쉽게 확장시킬 수 있는 '메타 프로그래밍'을 지원한다는 것이다. 요즘 C++등의 언어도 지원하는 상황이긴 하지만 루비는 객체지향적인 특징과 함수형 언어적인 특징이 결합되어 더욱 강력하게 나타난다. 물론 LISP는 옛날부터 잘 지원 했다.[6] 그런 관계로 이런 메타 프로그래밍은 언어 차원에서 권장하는 기능이고 매우 큰 프로그램도 매우 작은 소스로 가능하게 만들어준다.

3.4 그 외 특징

  • 모듈과 클래스를 다른 모듈이나 클래스 또는 객체에 붙여서 확장시키는 개념을 최초로 도입. 다중 상속에 대한 새로운 해석/구현으로 볼 수 있으며 실제로 C++의 것보다 많이 간편하고 써먹기도 쉽다. 나중에는 C\# 등에도 이러한 개념이 비슷하게 도입되었다.
  • load, require 등으로 외부 소스를 참조할 때 소스 파일의 실제 경로를 지정해 줄 수 있다는 것도 특징이라면 특징. 같은 인터프리터 언어인 , 파이썬, 루아는 이게 안된다.
  • 0을 false로 취급하는 여러 언어들과는 달리 0도 true로 취급한다. 이 점은 루아도 비슷하다.

반대로 몇가지 문제라면 우선 속도가 느리다. 1.9까지는 단순반복만 했을 때는 C가 1이라면 Python이 3~5정도, 루비가 10정도로 느리다. 물론 최근에는 굉장히 빨라졌으며, 최근 LLVM으로 컴파일해서 속도를 획기적으로 늘리는 방안이 제안되었다.

4 인기도

원래는 일본에서만 조금 사용하는 정도였지만, Programming Ruby[7]라는 희대의 명저가 나오면서 주목받기 시작하다가, Ruby on Rails라는 웹 애플리케이션 프레임워크가 나오면서 사용자가 꽤 많이 늘어나고 있다.

이 언어가 이렇게 뜨게 된 가장 아이러니한 점은 라이벌 언어인 파이썬과 펄의 지원 문서가 모두 영어인데 루비는 일본에서 개발되었기 때문에 기본적으로 모든 API에 대한 설명과 기타 모든 문서가 일본어로 되어 있었기 때문이다. 그렇게 일본 내부를 중심으로 인기를 얻다가 실용주의 프로그래밍의 저자가 쓴 곡괭이책과 2005년부터 지원되기 시작한 루비 온 레일즈라는 MVC 웹 프레임워크가 나오면서 일본 밖(주로 유럽)에서도 인기를 끌고 있다.[8] 그러나 파이썬이 그간 쌓아온 것에 비하면 아직 많이 부족한 것은 사실. 특히 라이브러리 면에서는 파이썬과의 사이에 넘을 수 없는 n차원의 벽이 있다.

5 라이벌

문서를 읽어보면 알겠지만, 파이썬이 유달리 많이 등장한다. 두 언어가 유달리 비슷하면서도 유달리 대비되는 특성들이 많아 라이벌 구도를 이루기 때문이다. 오죽했으면 2015년 루비 카이기에서 한 루비 유저는 파이썬 쓰는 친구가 자꾸 파이썬으로 넘어오라고 꼬신다고(...)[9] 사실 파이썬보다는 Perl과 많이 닮았고 따르는 철학도 똑같다. [10] 하지만 펄의 인지도가 과거보다 많이 떨어져서 물망오른 파이썬과 라이벌 구도를 이루는 듯 하다.

6 기타

RPG 쯔꾸르 XP부터는 이 언어 기반의 스크립트 엔진을 베이스로 작동하며, 스크립트를 통해 더욱 세부적인 제작을 할 수 있게 되었다.[11][12] 다만 RPG 쯔꾸르 MV부터는 JavaScript 기반의 스크립트 엔진으로 변경될 예정이다.

스프링노트, GitHub,[13] 트위터, 미투데이 등이 루비 온 레일즈를 사용한다. 많은 스케치업용 플러그인도 루비 언어를 사용한다.

또한 OS X에서의 패키지 매니저 homebrew도 루비 기반으로 돌아간다. FreeBSD의 Port같은 역할을 해 주는 것이라 보면 된다.

루비 언어로 캐릭터를 조작해서 던전을 클리어하는 게임이 있다. [14]

루비와 루비 온 레일즈를 전문으로 공부하는 사이트도 생겼다..! CodeLion 코드아카데미 강좌

루비 온 레일스 코리아 커뮤니티(RORLAB) [1] 에서 만든 초보자를 위한 레일스 가이드 [2] 가 있다.

RORLAB에서는 매주 화요일 오프라인 모임을 진행하며 루비와 레일스가 국내에서도 널리 쓰이도록 활동한다. 모임 참가 신청은 미텁에서 할 수 있고 페이스북 그룹슬랙에 가입하여 온라인으로도 참여할 수 있다.

7 바깥 고리

  1. 동서양 모두 마츠라는 애칭으로 부른다
  2. 오픈 진영에서는 일반적으로 이렇게 표기한다. 모두 다 이 법칙을 지키는건 아니지만, 대부분의 오픈 소스 진영의 프로그램들은 이렇게 분류가 가능하다.
  3. Java로 만들어진 인터프리터
  4. 닷넷 프레임워크 지원
  5. 자바는 자바 8부터 람다를 지원한다.
  6. 사실 마츠모토 유키히로 본인 자신부터 "이맥스는 내 인생을 어떻게 바꾸었나" 라는 슬라이드쇼를 할정도의 진성 이맥스 빠돌이였고, 거기서 Elisp intepreter 로서의 이맥스의 소스코드를 보면서 언어 구현하는 방법을 배웠다고 한다.
  7. 표지에 곡괭이가 그려져 있어서 일명 곡괭이. 다만 일본에서 나올 때는 표지에 토끼가 그려져 있었다고.
  8. 2012년에는 GitHub에서 루비가 2위를 차지했다!(1위는 자바스크립트) 잠깐, 근데 GitHub는 Ruby on Rails로 만들었잖아?
  9. 이에대해 다른 유저들은 파이썬 가서 좋은 기능 있으면, 가지고 와서 루비에 커밋하라는 대안을 제시했다. 스파이
  10. TIMTOWTDI. 단 펄처럼 Once write, read never 언어는 아니다.
  11. 정확하게는 Ruby가 아닌 RGSS(Ruby Game Scripting System)라는 명칭으로, 최신판 RGSS3 기준 Ruby 버전 1.9.2의 라이브러리를 기반으로 하여 만들어진 언어이다. 기존 Ruby에서 게임 제작에 불필요한 명령어는 빼고, 반대로 기존에 없던 게임 제작에 특화된 새로운 명령어가 추가되는 등, 문법은 같으나 사실상 별개의 언어로 취급해야 옳다.
  12. 물론 루비의 속도가 느린것에 최적화도 잘 안되있어서 더이상의 자세한 설명은 생략한다.
  13. 오픈소스 소프트웨어 호스팅 사이트.
  14. 단, 페이스북 계정이 있어야 한다.