Содержание


Обзор языка программирования Vala. Часть 1

Общие свойства и характеристики языка Vala

Comments

Серия контента:

Этот контент является частью # из серии # статей: Обзор языка программирования Vala. Часть 1

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Обзор языка программирования Vala. Часть 1

Следите за выходом новых статей этой серии.

Что, почему и зачем

Юрг Биллетер [Jürg Billeter] и Раффаэле Сандрини [Raffaele Sandrini] начали разрабатывать язык программирования Vala в 2006 году, чтобы сделать доступными современные технологии для разработчиков приложений на основе библиотек среды Gnome, в частности, glib и gobject. При создании программ в Gnome требуется солидный опыт практической работы с языком С на низком уровне прикладных программных интерфейсов. Раньше для перехода на более высокий уровень возникала необходимость либо в реализации виртуальной машины для выполнения кода, как например, в случае Python или языков среды Mono, либо в написании библиотеки функций-"обёрток", например, для С++.

Отличие языка Vala от указанных методик состоит в том, что он позволяет получить в итоге чистый С-код, который может быть скомпилирован и запущен в среде Gnome без каких-либо дополнительных средств поддержки (библиотек, загрузчиков и т.п.). При этом важно отметить следующие факты. Программы, написанные на языке Vala, по производительности практически не уступают программам, разработанным непосредственно на С, а читать, исправлять и сопровождать код Vala гораздо проще и быстрее. Кроме того, внутри Vala-приложений абсолютно все операции воспроизводятся средствами С. Таким образом, Vala обеспечивает поддержку многих недоступных в классическом С современных языковых технологий, отображая их в стандартные С-конструкции. Самостоятельное написание подобных конструкций потребует немало времени и может оказаться весьма сложной задачей.

Синтаксис Vala во многом напоминает синтаксис C#, C++ и Java. Впрочем, корень у них один, и знание языка С принесёт пользу в любом случае. Тем более что Vala-программы тесно взаимодействуют с C-библиотеками, да и выполняются в итоге, как C-код.

Начнём с азов

Откроем в любом текстовом редакторе новый файл hello.vala и напишем самую популярную в мире программу для начинающих.

using GLib;
public class Test.HelloObject : GLib.Object
{
  public static int main( string[] args )
  {
    stdout.printf( "Привет всем!\n" );
    return 0;
  }
}

В строке 1 декларируется использование библиотеки GLib или, в терминах ООП, "использование пространства имён библиотеки GLib". Вообще говоря, пространство имён GLib включается в Vala-программу по умолчанию, так что можно было бы обойтись и без этой директивы.

Далее следует начальная строка определения класса. Всё, как обычно: модификатор области видимости, ключевое слово, идентификатор имени класса. За реализацию объектного механизма отвечает библиотека glibrary, и в этих подробностях нам разбираться совсем не обязательно. Гораздо важнее здесь то, что наш класс объявляется подклассом GLib.Object, т.е. выполняется наследование. Ограничений на определение собственных произвольных классов нет, но только "наследники" GLib.Object получают доступ к полному набору функциональных возможностей языка Vala, а именно это нам и нужно.

После открывающей фигурной скобки начинается тело определяемого класса. Сразу записывается определение метода (функции-члена). Стандартное имя метода main в совокупности с конкретной сигнатурой позволяет Vala классифицировать его как точку входа в программу.

Метод main выполняет простую работу. В пространстве имён библиотеки GLib имеется объект stdout, название которого говорит само за себя. Одним из многочисленных методов, предлагаемых объектом stdout, является функция форматированного вывода printf, в которую мы передаём строку символов, как параметр. Команда return завершает работу метода и возвращает результат его выполнения. Здесь при выходе из метода main заканчивает работу и программа, а результат интерпретируется как код её завершения.

Компиляция и выполнение

Для того чтобы компилировать Vala-программы, нужно установить компилятор. Необходимые пакеты можно найти в соответствующих репозиториях своего дистрибутива.

Исходный код был размещён в файле hello.vala, поэтому команда компиляции для создания выполняемого файла выглядит так:

valac -o hello hello.vala

Если компиляция завершилась без ошибок, то следует проверить, как работает наша дебютная Vala-программа:

./hello

Приветствие выведено, компилятор работает корректно, первый шаг сделан. Замечание: если вы хотите более подробно узнать о том, как взаимосвязан исходный код на языке Vala с кодом на С, то выполните такую команду:

valac -C hello.vala

В этом случае компилятор создаёт файл hello.c, открыв который, вы можете исследовать процесс преобразования объектно-ориентированного кода Vala в С-код.

Наверняка вы уже поняли, что исходный код содержится в файлах с расширением .vala. Вы сами определяете содержимое этих файлов, их количество – нет никаких ограничений, как, например, в языке Java: каждому классу отдельный файл. Хотите – делайте "как в Java", а хотите – пишите все классы и функции в один файл. В любом случае для логической организации кода существуют пространства имён. Впрочем, свалка из множества классов – это наихудшее решение с любой точки зрения.

Обзор синтаксиса

Как я уже сказал, синтаксис Vala во многом напоминает синтаксис C#, и те, кто знаком с C, C++, C# и прочими С-подобными языками, затруднений испытывать не будут. Тем не менее следует уделить внимание особенностям, отличающим Vala от прочих языков из "группы С".

Для переменных главным отличием является наличие механизма Type Inference (предполагаемый тип), позволяющий объявить переменную неопределённого типа следующим образом:

var b;

Базовые типы данных практически не отличаются от типов прочих языков: байтовый, Юникод-символ, числовые (все стандартные типы), логический, структура, перечисление, массив и UTF-8-строка.

Объявление, определение и работа с типами данных вполне очевидны, а приведение типов (type casting) можно выполнять так, как принято в C:

int a = 7;
float x = (float)a;

или по методике C#, например:

Window win = new Window( WindowType.TOPLEVEL );
Object obj = win as Object;

Подразумевается, что преобразование является осуществимым, т.е. класс Window является подклассом Object, иначе переменной obj будет присвоена null-ссылка.

Набор операторов Vala точно такой же, как в любом C-подобном языке, но перегружать (overload) их нельзя.

Управляющие конструкции: if-else и switch, циклы while, do-while и for. Есть ещё цикл foreach( int a in int_array ) {...} – принцип его работы очевиден.

Функции

В основу заложены функции языка С, поэтому Vala-функции принимают любое количество аргументов и возвращают одно значение. После имени функции и списка аргументов в скобках может следовать не обязательное ключевое слово throws и идентификатор перехватываемого исключения (ошибки).

Нововведением являются анонимные функции, более известные под названием ламбда-функции. Для определения анонимной функции используется специальный оператор =>. Рассмотрим пример:

fun1( an => { stdout.printf("%d\n",an); }, 3 );

Функция fun1 вызывается со ссылкой на анонимную (она действительно не имеет имени) функцию, которая принимает один аргумент и выводит его значение. Отметим, что в данном случае ни тип параметра, ни тип возвращаемого значения не задаётся явно, а определяется динамически.

Внимание: авторы Vala предупреждают, что работа над поддержкой ламбда-функций ещё не завершена. В настоящее время область действия ламбда-функции ограничена экземпляром класса, в котором она определена.

На этом завершается обобщённый обзор языка программирования Vala. Объектно-ориентированное программирование на Vala, расширенные возможности языка, а также применение штатных инструментальных средств и утилит будет рассмотрено в следующих статьях цикла.


Ресурсы для скачивания


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=464971
ArticleTitle=Обзор языка программирования Vala. Часть 1: Общие свойства и характеристики языка Vala
publish-date=01272010