Vala

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску
Vala
Семантика:

структурное, императивное, объектно-ориентированное программирование

Тип исполнения:

компилятор

Появился в:

2006 г.

Автор(ы):

Йюрг Биллетер, Раффаэле Сандрини

Последняя версия:

0.7.10 - 4 февраля 2010 года[1]

Типизация данных:

строгая, статическая

Основные реализации:

GNOME Desktop Project

Испытал влияние:

Си, C++, Groovy, Java, C#

Valaязык программирования, предназначенный для прикладного и системного программирования на основе библиотек GLib Object System (GObject) рабочей среды GNOME/GTK+. Он был разработан Йюргом Биллетером (Jürg Billeter) и Раффаэле Сандрини (Raffaele Sandrini).

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

Объектно-ориентированные языки Java и C# используются для проектирования сложных проектов и приложений с графическим интерфейсом. Однако, из бинарного кода на языке C нельзя вызывать библиотеки Java и C# так же как родные низкоуровневые библиотеки GObject. Поэтому языки, исполняющие байт-код в виртуальных машинах не могут быть приняты в рамках платформы GNOME. Управляемые приложения имеют также ограничения в производительности, что является критичным для работы некоторых программ (например, системных), которые должны исполняться в бинарном коде (ABI). Это и стало причиной появления нового языка Vala.

Текущая версия компилятора Vala 0.7.10 от 4 февраля 2010 года.[1]

Пример кода

Программа «Hello World»:

<source lang="c">

using GLib;

class Sample : Object {
        void run () {
                stdout.printf ("Hello World\n");
        }

        static int main (string[] args) {
                var sample = new Sample ();
                sample.run ();
                return 0;
        }
}

</source>

Генерируемый код на языке C (включая заголовочный файл):

<source lang="c">

  1. ifndef __SAMPLE_H__
  2. define __SAMPLE_H__
  1. include <glib.h>
  2. include <glib-object.h>

G_BEGIN_DECLS



G_END_DECLS

  1. endif

</source> <source lang="c">

  1. include "Sample.h"
  2. include <stdio.h>
  3. include <stdlib.h>
  4. include <string.h>

typedef struct _Sample Sample; typedef struct _SampleClass SampleClass; typedef struct _SamplePrivate SamplePrivate;

  1. define TYPE_SAMPLE (sample_get_type ())
  2. define SAMPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SAMPLE, Sample))
  3. define SAMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SAMPLE, SampleClass))
  4. define IS_SAMPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SAMPLE))
  5. define IS_SAMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SAMPLE))
  6. define SAMPLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SAMPLE, SampleClass))

struct _Sample {

   GObject parent_instance;
   SamplePrivate * priv;

}; struct _SampleClass {

   GObjectClass parent_class;

}; enum {

   SAMPLE_DUMMY_PROPERTY

}; static void sample_run (Sample* self); static gint sample_main (int args_length1, char** args); static Sample* sample_new (void); static gpointer sample_parent_class = NULL; static GType sample_get_type (void);


static void sample_run (Sample* self) {

   g_return_if_fail (IS_SAMPLE (self));
   fprintf (stdout, "Hello World\n");

}


static gint sample_main (int args_length1, char** args) {

   Sample* sample;
   gint _tmp0;
   sample = sample_new ();
   sample_run (sample);
   return (_tmp0 = 0, (sample == NULL ? NULL : (sample = (g_object_unref (sample), NULL))), _tmp0);

}


int main (int argc, char ** argv) {

   g_type_init ();
   return sample_main (argc, argv);

}


static Sample* sample_new (void) {

   Sample * self;
   self = g_object_newv (TYPE_SAMPLE, 0, NULL);
   return self;

}


static void sample_class_init (SampleClass * klass) {

   sample_parent_class = g_type_class_peek_parent (klass);

}


static void sample_init (Sample * self) { }


static GType sample_get_type (void) {

   static GType sample_type_id = 0;
   if (G_UNLIKELY (sample_type_id == 0)) {
       static const GTypeInfo g_define_type_info = { sizeof (SampleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) sample_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Sample), 0, (GInstanceInitFunc) sample_init };
       sample_type_id = g_type_register_static (G_TYPE_OBJECT, "Sample", &g_define_type_info, 0);
   }
   return sample_type_id;

} </source>

Примечания

  1. 1,0 1,1 Vala Releases (англ.) (2 мая 2009). Проверено 7 февраля 2010.

Ссылки

  • http://valadoc.org/ (англ.). — Documentation Vala language.. Проверено 9 февраля 2010.


de:Vala (Programmiersprache) en:Vala (programming language) es:Vala (lenguaje de programación) fr:Vala (langage de programmation) nl:Vala (programmeertaal) pl:Vala zh:Vala

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....