프로그래밍 언어 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
이 나왔습니다.




  1. dynaxis

    | 2007.12.10 17:08 | PERMALINK | EDIT | REPLY |

    아무래도 새로 언어를 전적으로 설계하는 것은 무리가 많이 따르니 잘 디자인됐다고 생각하는 언어 하나를 택해서 세세한 부분은 따라가는 접근법을 택했을 수도 있지 않을까 싶네요. 구현만해도 큰 일이니 가능한 명세 쪽은 빌려 올 수 있는 건 그대로 쓰고 그 후에 차이점만 정리해서 스펙을 만드는...

  2. Favicon of https://skyul.tistory.com BlogIcon 서광열 lambda

    | 2007.12.11 00:04 신고 | PERMALINK | EDIT |

    네. 따지고 보면 정도의 차이만 있지 대부분의 언어가 새로 베껴서 만드는 것이니깐요. C#이 자바 보고 만든 것도 사실상 대놓고 베낀 셈이니. 이쪽 세계는 표절에서 상당히 자유로운가 봅니다.

  3. Favicon of https://wafe.kr BlogIcon wafe

    | 2007.12.12 12:09 신고 | PERMALINK | EDIT | REPLY |

    '유사항(대놓고 베낀)'이라는 어구를 보고 폭소해버렸습니다.

    사실 C++과 C# 사이에 헷갈리는 부분이 꽤 있어서 골치가 아파요 @.@

  4. 송응규

    | 2008.04.11 16:02 | PERMALINK | EDIT | REPLY |

    Vala를 살펴보다가 인터넷에서 발견해서 들어왔습니다 :)
    그런데 GObject는 단지 C 라이브러리일 뿐인데 런타임이라고 표현하는 것은 문제가 있지 않을까요?
    Vala의 목표가 특별한 런타임 없이 고급 언어로 GNOME 프로그램을 하는 것이니까요 ^^

  5. Favicon of https://skyul.tistory.com BlogIcon 서광열 lambda

    | 2008.04.14 14:42 신고 | PERMALINK | EDIT |

    언어 수행에 필요한 기본적인 라이브러리가 런타임인데요 뭘^^

Write your message and submit
« PREV : 1 : ··· : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : ··· : 244 : NEXT »