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»:

 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;
         }
 }

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

#ifndef __SAMPLE_H__
#define __SAMPLE_H__
 
#include <glib.h>
#include <glib-object.h>
 
G_BEGIN_DECLS
 
 
 
 
G_END_DECLS
 
#endif
#include "Sample.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct _Sample Sample;
typedef struct _SampleClass SampleClass;
typedef struct _SamplePrivate SamplePrivate;
 
#define TYPE_SAMPLE (sample_get_type ())
#define SAMPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SAMPLE, Sample))
#define SAMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SAMPLE, SampleClass))
#define IS_SAMPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SAMPLE))
#define IS_SAMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SAMPLE))
#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;
}

Примечания

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

Ссылки

  • Benchmark of Vala versus C# and C (англ.) (9 марта 2008). — A collections of some simples benchmarks written in Vala.. Проверено 2 мая 2009.
  • 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

Источник — «http://www.sbup.com/wiki/Vala»
Личные инструменты

Served in 0.458 secs.