프로그래밍 언어 Vala

Posted 2007. 12. 10. 12:23
까멜레오 프로젝트에서 GStreamer를 비롯한 GLib 기반의 프로젝트들을 많이 가져다 쓰는 관계로 GLib이나 여기에 포함된 GObject 등의 라이브러리를 쳐다볼 일이 많이 있습니다. GObject는 GLib에서 분리된 (여전히 같은 패키지로 존재하긴 하지만) 라이브러리인데, 다음과 같은  두 가지 목표가 있습니다.

1) C 개발자에게 객체지향 프로그래밍을 할 수 있는 환경을 줍니다. 물론 컴파일러 지원이 전혀 없는 순수한 C 라이브러리인 관계로 Objective-C나 C++과 비교해서는 적어줘야 하는 템플릿 코드가 상당히 많은 편이고 그게 초보 개발자에게는 진입 장벽이 되는 편입니다.

2) 다른 언어로 바인딩을 용이하게 해줍니다. 파이썬이나 루비 등 다른 언어에서 C 라이브러리 함수를 호출하려면 인자나 리턴 값의 타입 변환을 해줘야 하는데, GObject 바인딩을 용이하게 해줍니다. GObject 기반으로 작성된 C 라이브러리는 codegen이라는 코드 생성 프로그램을 이용하면 쉽게 파이썬 바인딩을 만들어 낼 수 있지요.

GLib 런타임 타입 시스템은 나름대로 장점이 있지만 역시 제일 불편한 점은 C 언어가 객체 지향이 아닌 관계로 클래스 하나 만들기 위해서 복잡한 템플릿이 필요하다는 점입니다.

GObject, GLib, GTK+ 기반의 GNOME 프로젝트는 이런 문제점을 해결하기 위해 Vala라는 프로그래밍 언어를 만들고 있더군요. Vala는 언어적으로는 C#과 상당히 유사한(대놓고 베낀) 언어이고, 특이한 점은 타겟 런타임이 .NET CLR이나 JVM이 아닌 GObject라는 사실입니다. Vala는 기본적으로 GObject를 런타임으로 사용한 C 코드로 변환을 하고, 다시 C 컴파일러를 이용해 컴파일하는 방식입니다.

프로그래밍 언어를 만드는 데 있어서 무시할 수 없이 많은 비용이 들어가는 부분 중에 하나가 런타임 작성입니다. 그래서 수많은 언어들이 방대한 언어 런타임을 거저 얻을 수 있는 CLR이나 JVM을 선택하고 있는 이유고요. Vala는 GNOME 프로젝트에서 시작한 만큼 기존에 GObject로 작성된 C 라이브러리를 그대로 사용할 수 있게 하기 위해 GObject를 언어 런타임으로 선택했군요.

작년 가을에 시작해서 아직 버전이 0.1.5 밖에 안 되는지라 안정성은 보장할 수 없다는 게 문제입니다. 많은 사람들이 참여해서 발전을 이루면 좋을 것 같은데 어찌될지 모르겠군요. 아직 언어 명세도 100% 작성이 안 된 것 같아서 프로그래밍 언어로서의 특징보다는 GObject를 이용한 C 코드 생성이라는 구현 이슈에 더 치중한다는 느낌이 듭니다.

2007년 12월 12일 업데이트:

Vala Tutorial
이 나왔습니다.