Vala
| Семантика: |
структурное, императивное, объектно-ориентированное программирование |
|---|---|
| Тип исполнения: | |
| Появился в: |
2006 г. |
| Автор(ы): |
Йюрг Биллетер, Раффаэле Сандрини |
| Последняя версия: | |
| Типизация данных: |
строгая, статическая |
| Основные реализации: | |
| Испытал влияние: |
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">
- ifndef __SAMPLE_H__
- define __SAMPLE_H__
- include <glib.h>
- include <glib-object.h>
G_BEGIN_DECLS
G_END_DECLS
- endif
</source> <source lang="c">
- 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;
} </source>
Примечания
- ↑ 1,0 1,1 Vala Releases (англ.) (2 мая 2009). Проверено 7 февраля 2010.
Ссылки
- The Vala Programming Language, on GNOME Live! (англ.) (9 марта 2008). — официальный сайт. Проверено 9 марта 2008.
- 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.
- Снастин, Алексей Обзор языка программирования Vala. Часть 1: Общие свойства и характеристики языка Vala (рус.) (27 января 2010). Проверено 9 февраля 2010.
- Снастин, Алексей Обзор языка программирования Vala. Часть 2. Объектно-ориентированное программирование на языке Vala (рус.) (4 февраля 2010). Проверено 9 февраля 2010.
- Снастин, Алексей Обзор языка программирования Vala. Часть 3. Расширенные возможности языка Vala (рус.) (9 февраля 2010). Проверено 9 февраля 2010.
Основные языки программирования (список • сравнение • IDE • история • хронология) |
|
|---|---|
| Используемые в разработке |
Ада • АПЛ • Ассемблер • ActionScript • ABAP/4 • AutoIt • AWK • BASIC • C • Кобол • C++ • C# • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • F# • Forth • Фортран • Gambas • Groovy • Haskell • Icon • Java • JavaScript • Limbo • Lua • MATLAB • Object Pascal • Objective-C • OCaml • Oz • Оберон • Parser • Паскаль • Perl • PHP • PowerBASIC • PureBasic • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic • VB.NET |
| Академические | |
| IEC61131-3 |
Instruction List • ST • FBD • Ladder Diagram • SFC |
| Прочие | |
| Эзотерические | |
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 и ещё....