Сообщество GNOME

Вики русскоязычной команды

Инструменты пользователя

Инструменты сайта


programmirovanie_na_vala

Программирование на Vala

Введение

Vala – проект, находящийся в непрерывной разработке, и его возможности могут меняться. Я буду стараться поддерживать этот учебник в актуальном состоянии по мере возможности, но точно этого не обещаю. Также я не обещаю, что технические приемы, которые я предлагаю, обязательно лучшие на практике, но повторяю, я буду стараться придерживаться такого вида технических приемов.

Что такое Vala?

Vala - это новый язык программирования, который позволяет использовать современные технические приемы программирования для написания приложений, исполняемых с помощью библиотек времени исполнения GNOME, особенно с помощью библиотек GLib and GObject. Эта платформа давно предоставляет очень полную программную среду с такими возможностями, как система динамических типов и поддержка управления памятью. До Vala единстенными способами программирования на этой платформе были программирование на родном для машины API языка C, который раскрывает раскрывает много часто ненужных деталей, програмимрование на языке высокого уровня, который имеет сопровождающую его виртуальную машину, таких как Python или Mono C#, или в как альтернатива на языке C++ с помощью обертывающих библиотек.

Vala отличается от всех этих технических приемов программирования, так как он производит код на языке С, который может быть откомпилирован для исполнения без поддержки дополнительных библиотек, не входящих в платформу GNOME. Это влечет несколько последствий, но наиболее важное:

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

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

Для кого этот учебник

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

Vala разделяет большую часть синтаксиса с языком C#, но я буду стараться избегать описания его возможностей в терминах похожести или отличия от C# или Java с целью сделать учебник более доступным.

Что может быть полезным, так это приемлемое понимание языка С. В то время как знание языка С не требуется для понимания Vala, важно осознавать, что программы Vala исполняются как программы С, и часто взаимодействуют с библиотеками С. Знание С несомненно даст более глубокое понимание Vala.

Соглашения

Код будет приводиться шрифтом monospaced text, команды всегда будут с префиксом $ приглашения командной строки. Все, что отличается о этого, должно быть очевидным. Я намерен давать очень понятный код, включая некоторую поясняющую информацию. Я буду пояснять где некоторые вещи могут быть опущены, но это не означает, что я поощряю вас делать так же.

В свое время я добавлю ссылки на документацию Vala, но сейчас это просто невозможно.

Первая программа

К сожалению предсказуемо, но все же:

class Demo.HelloWorld : GLib.Object {
 
    public static int main(string[] args) {
 
        stdout.printf("Hello, World\n");
 
        return 0;
    }
}

Конечно, это программа на Vala Hello World. Я думаю, вы смогли достаточно хорошо распознать некоторые ее части, но просто чтобы быть скурпулезным я должен пройти по ней шаг за шагом.

class Demo.HelloWorld : GLib.Object {

Это строка означает начало определения класса. Классы в Vala очень похожи по концепции на классы в других языках программирования. Класс обычно есть тип объекта, экземпляры которого могут быть созданы, и все они будут иметь одни и те же свойства. Реализация типов классов является заботой библиотеки gobject, но подробности этого не важны для обычного использования Vala.

Что важно отметить, так это то, что этот класс специально описан как подкласс класса GLib.Object. Это сделано потому, что Vala разрешает другие типы классов, но в большинстве случаях приведенный способ - это то, что вам нужно. На самом деле, некоторые возможности языка в Vala разрешены только если ваш класс наследует от типа Object библиотеки GLib.

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

public static int main(string[] args) {

Это начало определения метода. Метод - это функция, связанная с типом объекта, которая может быть выполнена объектом этого типа. Статический метод означает, что этот метод может быть вызван без создания отдельного экземпляра этого типа. Тот факт, что этот метод назван main и имеет такую сигнатуру означает, что Vala распознает в нем точку входа в программу.

Метод main не обязательно должен быть определен внутри класса. Но если он определен внутри класса, он должен быть static. Не имеет значения, является ли он public или private. Возвращаемое значение может быть или int, или void. Если возвращаемый тип void, программа неявно завершается с кодом выхода 0. Параметр массива строк содержит аргументы командной строки и является опцией.

stdout.printf("Hello, World\n");

stdout является объектом в пространстве имен GLib. Это строка инструктирует Vala выполнить метод по имени printf объекта stdout с аргументов в виде строки приветствия. В Vala с помощью такого синтаксиса вы всегла вызываете методы объекта или получаете доступ к его данным. \n - это ESC-последовательность для символа новой строки.

return 0;

return возвращает значение в вызвавшее выражение и завершает выполнение метода main, который также завершает выполнение программы. Возвращенное значение метода main затем становится кодом выхода программы.

Последние строки просто завершают определение метода и класса.

Компиляция и запуск

Предположим, что у вас установлена Vala, тогда все что нужно для компиляции и исполнения программы это:

$ valac hello.vala
$ ./hello

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

programmirovanie_na_vala.txt · Последние изменения: 2017/03/20 12:36 — ymyasoedov

Инструменты страницы