루비

From The Hidden Wiki
Jump to navigationJump to search

https://www.ruby-lang.org/images/logo.gif

프로그래밍 언어의 일종.

창시자는 마츠모토 유키히로(Matz). 공식 홈페이지 [한국어 페이지], [영어 페이지]

PerlSmalltalk, Eiffel, Ada 등의 언어로부터 일부 문법 사항을 계승하고 발전시켜, ~~적외선 굴절기 제작에~~일반적인 목적에 적합하게 만든 언어.

언어의 문법이 쉽고 확장이 편리해서, 잘 디자인된 라이브러리~~라고 할만한 건 많이 없지만~~를 이용하면 프로그래밍을 처음 시작한 사람도 복잡한 작업을 상대적으로 쉽게 할 수 있다는 점이 매력적.~~대신 다른 언어를 아는 사람이 더 어려워 할 수도 있다.~~ 객체 지향 프로그래밍 언어이다. 세계 10대 프로그래밍 언어 중 하나로 꼽히기도 했다.

Made in Japan이라서인지 일본에서는 파이썬보다도 인기가 많다.

>컴퓨터를 배운지 얼마 되지 않았을 때, 나는 프로그래밍 언어에 관심을 갖게 되었습니다. 당시 이상적인 프로그래밍 언어는 반드시 이룰 수 있는 것이라고 믿었고, 가능하면 그런 언어를 만드는 디자이너가 되고 싶었습니다. (중략) >나는 행복해지기 위해서 살아간다고 믿습니다(적어도 어느 부문에서는). 이런 믿음에 따라, 루비는 프로그래밍을 쉬우면서도 즐거운 일로 만들기 위해 디자인 되었습니다. 루비는 여러분이 프로그래밍의 창조적인 면에만 집중할 수 있도록 해주고, 스트레스를 줄여줄 것입니다. >- 마츠모토 유키히로, Programming Ruby의 추천사에서

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

루비의 버전은 A.B.C 형식으로 표현하며 일반적인 오픈소스진영의 표기와 마찬가지로 B에 해당하는 숫자가 홀수면 개발버전, 짝수면 안정화 버전이다.[* 오픈진영에서는 일반적으로 이렇게 표기한다 모두 다 이 법칙을 지키는건 아니지만 대부분의 오픈소스진영의 프로그램들은 이렇게 분류가 가능하다.] 단 1.9.x는 예외. 1.9 자체가 안정 버전.

2013년 12월 21일 현재 공식 인터프리터의 최신 버전은 2.0.0 이고, 2.1.0 프리뷰가 나왔다.

원래는 일본에서만 조금 사용하는 정도였지만, Programming Ruby[* 표지에 곡괭이가 그려져 있어서 일명 곡괭이. 다만 일본에서 나올 때는 표지에 토끼가 그려져 있었다고.]라는 희대의 명저가 나오면서 주목받기 시작하다가, Ruby on Rails라는 웹 애플리케이션 프레임워크가 나오면서 사용자가 꽤 많이 늘어나고 있다.~~그리고 레일즈 외에는 인기는 둘째치고 인지도가 없다.~~

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

특징 중 하나는 순수 OOP라는것. 다른 언어 중 예를 들어서 C++의 경우에는 int, char등 자료형이 있고, 함수가 있으면 이것들을 모아둔 것이 클래스인데, 루비는 클래스와 메소드를 모아둔 것이 클래스이다. 그리고 그 위에는 모듈이 있는데 모듈도 클래스다. 메소드도 당연히 클래스. 그리고 이 클래스는 모두 열려있다. 이를 OpenClass라고 하는데, 한마디로 사용자가 마음대로 수정하는 것이 가능하다.

최대 장점은 언어 자체를 쉽게 확장할 수 있다는 것.[* 이를 메타 프로그래밍이라고 하는데, 물론 루비만이 지원하는 기능은 아니다. 대부분의 동적 프로그래밍 언어는 이게 가능하며, 함수형 프로그래밍 언어는 어떤 의미에서 코딩 그 자체가 메타 프로그래밍이다. 정적 언어의 대표 주자인 C++조차도 템플릿을 이용하여 메타 프로그래밍을 할 수 있다. 그러나 그 자유도와 편리성은 동적 언어에 비할 정도는 아니다. ] 문법을 자유롭게 정의할 수 있으므로 라이브러리 설계 등에 응용하여 코드의 가독성을 높일 수 있다. 유명한 예로 Rails에도 포함되어 있는 Active 시리즈. 자연 언어와 비슷한 구조를 갖도록 코딩할 수 있다. [* 베이직이나 코볼, 파이썬 등에서 문법 구조로서 지원하는 것과는 조금 다른 개념이다.]

또, 이를 응용하여 아예 특수한 목적의 생판 다른 언어를 루비 위에 구현해 버릴 수도 있다. 루비 언어 그 자체를 DSL의 구현으로 만들어 버리는 것이다. 이러한 작업을 함수형 프로그래밍 언어의 장점으로 드는 사람이 많은데, 루비는 그와 동등하거나 그보다 나은 수준으로 쉽게 구현이 가능하다. 확장성 하나는 루비까조차 인정하지 않을 수 없을 정도이다. --하지만 LISP빠는 깔 수 있다.--

그리고 모듈과 클래스를 다른 모듈이나 클래스 또는 객체에 붙여서 확장시키는 개념을 최초로 도입하였다.[* 다중 상속에 대한 새로운 해석/구현으로 볼 수 있다. 실제로 C++의 다중 상속 보다 많이 간편하고 써먹기도 쉽다.] 이러한 개념은 나중에 [wiki:"C%23"C#] 등에도 비슷하게 들어가 있는 것을 볼 수 있다.

반대로 몇가지 문제라면 우선 속도가 굉장히 느리다. 단순반복만 했을때는 C가 1이라면 파이썬이 3~5정도, 루비가 10정도로 느리다. 속도도 필요하면 파이썬이 낫다.

국내에서는 왠지 [파이썬]과의 유사성에 주목하여 비교하는 경향이 있는 듯 하지만 사실 이 언어는 파이썬보다는 [Perl]과 많이 닮아 있다. 따르는 철학도 펄과 같다. TIMTOWTDI. 단 펄처럼 Once write, read never 언어는 아니고, 물론 파이썬에 비해서는 사람들 사이의 코드 유사성은 적을지 몰라도 그럭저럭 알아볼 수 있는 코드가 나온다.~~하지만 대놓고 숏코딩을 하면 진짜로 못읽는다~~

RPG쯔꾸르 XP부터 이 언어를 스크립트로 사용하여 보다 정교한 게임을 만들 수 있으며[* 물론 루비의 속도가 느린것에 최적화도 잘 안되있어서 더이상 자세한 게임은 생략한다.] 스프링노트, GitHub,[* 오픈소스 소프트웨어 호스팅 사이트.] 트위터, 미투데이 등이 루비 온 레일즈를 사용한다. 많은 스케치업용 플러그인도 루비 언어를 사용한다. 트위터도 Ruby on Rails를 이용하다가 규모가 커지자 Scala로 갈아타기도 했고...

또한 OS X에서 오픈소스 진영의 프로그램을 쓰게 해주는 [homebrew]도 루비 기반으로 돌아간다. FreeBSD의 Port같은 역활을 해 주는 것이라 보면 된다.

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

루비와 루비 온 레일즈를 전문으로 공부하는 사이트도 생겼다..! [CodeLion]