소개
컴퓨터를 배운지 얼마 되지 않았을 때, 나는 프로그래밍 언어에 관심을 갖게 되었습니다.
당시 이상적인 프로그래밍 언어는 반드시 이룰 수 있는 것이라고 믿었고,
가능하면 그런 언어를 만드는 디자이너가 되고 싶었습니다.
나는 행복해지기 위해서 살아간다고 믿습니다.
이런 믿음에 따라, 루비는 프로그래밍을 쉬우면서도 즐거운 일로 만들기 위해 디자인 되었습니다.
루비는 여러분이 프로그래밍의 창조적인 면에만 집중할 수 있도록 해주고, 스트레스를 줄여줄 것입니다.
- 마츠모토 유키히로, Programming Ruby의 추천사에서
루비는...
간결함과 생산성을 강조한 동적인 오픈 소스 프로그래밍 언어입니다.
루비의 우아한 문법으로 자연스럽게 읽히고 쓰기 편한 프로그램을 만들 수 있습니다.
- 루비 공식 홈페이지
2016년 9월 기준 최신 안정화 버전은 2.2.5이다. 창시자는 마츠모토 유키히로(Matz).
ruby유저들은 적지만, 랭귀지에 대한 애정이 강하다. Perl과 Smalltalk, Eiffle, Ada, Lisp 파이썬 등의
언어로부터 일부 문법 사항을 계승하고 발전시켜, 일반적인 목적에 적합하게 만든 언어이다.
특히 파이썬은 지금도 서로 영햐을 주고 받는 라이벌 관계.
언어의 문법이 쉽고 확장이 편리해서, 잘 디자인된 라이브러리를 이용하면 프로그래밍을 처음 시작한
사람도 복잡한 작업ㅇ르 상대적으로 쉽게 할 수 있다는 점이 매력적이다. 그 때문에 객체지향 프로그래밍
언어이지만, 객체 지향에 대한 흔한 선입견과는 달리 초보자들도 쉽게 다룰 수 있다.
세계 10대 프로그래밍 언어 중 하나로 꼽히기도 하였으며, 2015년 기준 gitHub에서 인기언어 3위의
자리를 차지했다. Made in Japan이라서인지 일본에서는 Python보다 인기가 많다.
특히 웹은 물론 프론트, 백엔드 심지어 임베디드까지 안쓰는 곳이 없을 정도로 다방면에 절찬리 쓰이는 중이다.
버전
루비의 버전은 A.B.C 형식으로 표현하며 일반적인 오픈소스진영의 표기와 마찬가지로 B에 해당하는 숫자가
홀수면 개발버전, 짝수면 안정화 버전이다. 단, 1.9.x는 예외. 1.9 자체가 안정 버전.
또한 루비는 1.9버전을 기점으로 큰 성능의 향상이 있었으며, 이때 유저들 또한 많이 유입되었다.
이 때문에 1.9 버전은 지금도 사용되는 곳이 간간이 있지만, 구버전을 사용해서 득을 볼 수 있는 것은
없으므로 특수한 케이스가 아니라면 최신 버전을 사용하자.
처리기로는 공식 인터프리터인 MRI (Matz’s Ruby Interpreter. C로 만들어져 CRuby라고 불리기도 한다)를
필두로 MacRuby, JRuby, IronRuby, Rubinius, MagLev등 여러가지가 있다. 물론 표준 기능은 원칙상
다 같아야 하나, 어떤 언어로 어떤 가상 머신 위에서 어떻게 만드느냐의 차이가 있다. 근데 문제는 루비는 호환성이라는
개념을 반정도 쓰레기통에 갖다 버려서 인터프리터 종류는 둘째치고 버전이 다르다고 호한이 안되는 경우가 왕왕 있었다. 이 때문에 루비는 유달리 최신버전이 많이 강조된다.
특징
1) 순수 객체지향
순수 객체지향적 언어는 원시 자료형이 사실상 존재하지 않고 모든 것은 객체인 언어를 말하는데,
루비가 이런 언어 중 하나이다. 다른 언어 중 예를 들어서 Java의 경우에는 int, char등 원시 자료형이 있고
그것을 Boxing 한 Integer, Character 등의 클래스가 있다. 여기에 메소드까지 섞으면 클래스가 되는데,
루비는 클래스와 메소드를 모아둔 것이 클래스이고 원시 자료혀잉라고 구분지을 만한 것이 존재하지 않는다.
그 외에도 모듈이 있는데 모듈도 클래스다. 메소드도 당연히 클래스. 그리고 이 클래스는 모두 열려있다.
이를 OpenClass라고 하는데, 한마디로 사용자가 마음대로 수정하는 것이 가능하다.
2) 함수형 언어
특이한 점이라면 스칼라와 같은 함수형 언어로서의 특징도 가진다는 것이다. 언어차원에서 Block 이라는
클래스를 지원하기 때문에 변수나 메소드의 인수로 코드의 집합, 즉 우리가 흔히 함수나 메소드로 부르는
그것을 전달할 수 있다. 그런 관계로 당연히 메소드 안에서 메소드를 생성 가능하며, 클로저를 지원한다.
또, 요즘의 Java, C++, Python과 같은 고급언어는 거의 모두 지원하는 람다도 있다. 게다가 아래의
메타 프로그래밍과 합쳐서 더욱 강력히 작용하기도 한다.
3) 메타 프로그래밍
가장 큰 장점은 언어 자체를 쉽게 확장시킬 수 있는 ‘메타 프로그래밍’을 지원한다는 것이다.
요즘 C++등의 언어도 지원하는 상황이긴 하지만 루비는 객체지향적인 특징과 함수형 언어적인 특징이 결합되어
더욱 강력하게 나타난다. 그런 관계로 이런 메타 프로그래밍은 언어 차원에서 권장하는 기능이고 매우 큰 프로그램도
매우 작은 소스로 가능하게 만들어준다.
4) 그 외 특징
- 모듈과 클래스를 다른 모듈이나 클래스 또는 객체에 붙여서 확장시키는 개념이 최초로 도입.
다중 상속에 대한 새로운 해석/구현으로 볼 수 있으며 실제로 C++의 것보다 많이 간편하고 써먹기도 쉽다.
나중에는 C# 등에도 이러한 개념이 비슷하게 도입되었다.
- load, require 등으로 외부 소스를 참조할 때 소스 파일의 실제 경로를 지정해 줄 수 있는 것도 특징이라면 특징.
같은 인터프리터 언어인 펄, 파이선, 루아는 이게 안된다.
- 0을 false로 취급하는 여러 언어들과는 달리 0도 true로 취급한다.
반대로 몇가지 문제라면 우선 속도가 느리다. 1.9버전 까지는 느리지만. 최근에는 굉장히 빨라졌으며
최근 LLVM으로 컴파일해서 속도를 획기적으로 늘리는 방아닝 제안되었다.
인기도
일본에서만 조금 사용하는 정도였지만. Programming Ruby 라는 희대의 명저가 나오면서 주목받기
시작하다가, Ruby on Rails라는 웹 애플리케이션 프레임워크가 나오면서 사용자가 꽤 많이 늘어나고 있다.
이 언어가 이렇게 뜨게 된 가장 아이러니한 점은 라이벌 언어인 파이썬과 펄의 지원 문서가 모두 영어인데
루비는 일번에서 개발되었기 때문에 기본적으로 모든 API에 대한 설명과 기타 모든 문서가 일본어로 되어
있었기 때문이다. 그렇게 일본 내부를 중심으로 인기를 얻다가 실용주의 프로그래밍의 저자가 쓴 곡괭이과
2005년부터 지원되기 시작한 루비 온 레일즈라는 MVC 웹 프레임워크가 나오면서 일본 밖(주로 유럽)에서도
인기를 끌고 있다. 그러나 파이썬이 그간 쌓아온 것에 비하면 아직 많이 부족한 것은 사실, 특히 라이브러리
면에서는 파이썬의 사이에 넘을 수 없는 n 차원의 벽이 있다.
라이벌
문서를 읽어보면 알겠지만, 파이썬이 유달리 많이 등장한다. 두 언어가 유달리 비슷하면서도 유달리 대비되는
특성들이 많아 라이벌 구도를 이루기 때문이다. 오죽했으면 2015년 루비 카이기에서 한 루비 유저는 파이썬 쓰는
친구가 자꾸 파이썬으로 넘어오라고 꼬신다고.. 사실 파이썬보다는 Perl과 많이 닮았고 따르는 철학도 똑같다.
하지만 펄의 인지도가 과거보다 많이 떨어져서 물망오른 파이썬과 라이벌 구도를 이루는 듯 하다.
기타
RPG 쯔꾸르 XP부터는 이 언어 기반의 스크립트 엔진을 베이스로 동작하며, 스크립트를 통해 더욱 세부적인
제작을 할 수 있게 되었다. 다만 RPG 쯔꾸르 MV부터는 JavaScript 기반의 스크립트 엔진으로 변경될 예정이다.
스프링노트, Github, 트위터, 미투데이 등이 루비 온 레일즈를 사용하낟. 많은 스케치업용 플러그인도 루비 언어를
사용한다.