- Vala는 GNOME 개발자들에게 모던한 프로그래밍 언어 기능을 제공하는 것을 목표로 하는 프로그래밍 언어
- C로 작성된 애플리케이션 및 라이브러리와 비교할 때 추가 런타임 요구사항을 부과하지 않으며 다른 ABI를 사용하지 않음
- 지원하는 모던 언어 기능들: 인터페이스, 프로퍼티, 시그널, Foreach, 람다 표현식, 로컬 변수를 위한 타입 추론, 제네릭, Non-null 타입, 메모리 관리, 예외 처리
- 객체지향 방식으로 고수준의 추상화를 이용해 편하게 코드를 작성할 수 있으며, GObject, GTK 등 GNOME 기술과 깊이 통합됨
- 코드를 매우 빠른 네이티브 바이너리로 컴파일함. 기존 C 코드를 Vala 프로그램에서 재사용하거나 Vala에서 C 코드를 생성할 수 있음
기존 C 라이브러리와의 호환성
- Vala는 런타임 바인딩 없이 기존 C 라이브러리, 특히 GObject 기반 라이브러리에 액세스할 수 있도록 설계되었음
- Vala 문법으로 클래스 및 메서드 선언을 포함하는 API 파일만 있으면 Vala와 함께 라이브러리를 사용할 수 있음
- Vala는 현재 GLib 및 GTK+에 대한 바인딩과 함께 제공됨
Vala 컴파일러 valac
- valac은 Vala 소스 코드를 C 소스 및 헤더 파일로 변환하는 자체 호스팅 컴파일러임
- Vala 소스 코드에 선언된 클래스와 인터페이스를 생성하기 위해 GObject 타입 시스템을 사용함
- Vala의 문법은 C#과 유사하며, GObject 타입 시스템에 더 잘 맞도록 수정되었음
C에서 Vala로 작성된 클래스 및 메서드 사용하기
- Vala 라이브러리에서 생성된 헤더 파일만 설치하면 C 애플리케이션에서 Vala 라이브러리의 GObject 기반 API에 일반적인 방식으로 액세스할 수 있음
- Vala 파서가 라이브러리로 작성되어 모든 컴파일 시간 정보를 바인딩 생성 시 사용할 수 있으므로, C# 등으로 작성된 애플리케이션에서 Vala 라이브러리에 액세스하기 위한 바인딩 생성기를 작성하는 것도 쉬울 것임
GN⁺의 의견
- Vala는 C와 유사한 문법으로 GNOME 기술과 잘 통합된 객체지향 언어라는 장점이 있음. 특히 GUI 애플리케이션 개발에 최적화되어 GTK, Granite 등과 쉽게 연동 가능함
- Vala는 GNOME 데스크탑 환경 개발에 특화된 언어로 그 외의 분야에서는 활용도가 크지 않을 것으로 보임
- C#과 유사한 문법을 가진 Vala는 C#에 익숙한 개발자들이 GNOME 개발에 참여하는 데에 도움이 될 것임
- 기존 C 라이브러리와의 호환성을 중요시하면서도 모던한 언어 기능을 지원하려는 Vala의 목표는 신선하지만, 그로 인해 언어 자체의 독창성은 떨어질 수밖에 없을 것으로 보임
- Vala 프로젝트들을 보면 주로 GNOME이나 elementary OS용 데스크톱 앱이 많은데, 서버 프로그래밍에도 활용 가능한 언어임. 다만 아직 그 분야에선 생태계가 부족한 편
- Vala가 얼마나 널리 사용될지는 미지수이나, GNOME 생태계에서는 C 대신 Vala를 사용함으로써 생산성 향상을 기대해볼 만함
- Vala와 문법이 유사하고 GNOME 기술을 사용할 수 있는 Genie라는 언어도 있음. Python처럼 들여쓰기로 코드 블록을 구분하는 게 특징. Vala의 대안으로 고려해볼만함