Vala
Материал из Seo Wiki - Поисковая Оптимизация и Программирование
| Семантика: |
структурное, императивное, объектно-ориентированное программирование |
|---|---|
| Тип исполнения: | |
| Появился в: |
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»:
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,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 |
| Прочие | |
| Эзотерические | |
en:Vala (programming language) es:Vala (lenguaje de programación) fr:Vala (langage de programmation) nl:Vala (programmeertaal) pl:Vala zh:Vala