LINUX.ORG.RU

Genie — новый язык программирования в парадигме GObject

 ,


0

0

Genie — новый язык программирования, близкий родственник Vala, позволяющий пользоваться современными подходами к программированию и минимальными усилиями оперировать типами GObject.

Синтаксис Genie — чистый, чёткий и ясный; во многом он заимствован у современных языков программирования, таких как Python, Boo, D и Delphi.

По функциональности Genie близок к Vala, но позволяет решить те же задачи при помощи более краткого и ясного программного кода.

Как и Vala, Genie имеет характерные преимущества:

  • для программ, написанных на Genie, производительность и требовательность к ресурсам эквивалентны аналогичным параметрам программ на C и Vala;
  • отсутствуют "раздутость" и потери в производительности, присущие платформам с виртуальными машинами (Python, Mono, Java и т.п.);
  • поскольку классы в Genie по сути являются GObject'ами, то Genie пригоден как для написания программ, использующих GObject'ы, так и для самостоятельного создания GObject'ов (например, библиотек виджетов).
Итак, Genie является современным компилируемым объектно-ориентированным языком с нестрогой типизацией, обладающий также чертами функционального языка (например, поддержка замыканий). Поддерживаются исключения, функции-делегаты, nullable-типы, обобщённые типы (generics) и, внимание, настраиваемая ширина отступа! Компилировать программы на Genie следует компилятором языка Vala (valac); соответствующая функциональность была включена в Vala 0.3.3.

>>> Сайт проекта

anonymous

Проверено: Shaman007 ()
Последнее исправление: CYB3R (всего исправлений: 1)
Ответ на: комментарий от anonymous

> При отсутствии нужной библиотеки в списке Вы сможете создать требуемые биндинги при помощи инструмента vapigen.

Что, он мне для любой либы автоматом нахреначит биндингов?

gaa ★★
()
Ответ на: комментарий от anonymous

> Процесс создания binding'ов для Vala/Genie упрощён до предела, что делает языки ещё более привлекательными. Создание биндингов сводится к генерации упрощённого IDL из требуемой библиотеки (и правке, при необходимости). В поставку Vala входят стабильные биндинги...

Тогда действительно весьма интересная вещь.

CtrlAltBs
()
Ответ на: комментарий от gaa

> Что, он мне для любой либы автоматом нахреначит биндингов?

Видимо сишные заголовки все же нужны.

CtrlAltBs
()
Ответ на: комментарий от gaa

>Вроде должно распарситься.

не, не должно. С чего ты взял, что я стану забесплатно затыкать дыры в твоём образовании? =)

geek ★★★
()
Ответ на: комментарий от gaa

Для библиотек, следующих некоторым соглашениям - вполне. Но, конечно, не надо ожидать волшебства: в большинстве случаев придётся редактировать полученный IDL руками на предмет разных мелочей. И всё же, по сравнению с написанием биндингов руками - это революция.

anonymous
()
Ответ на: комментарий от anonymous

> по сравнению с написанием биндингов руками - это революция.

Биндинги давно не пишут руками - для этого есть интсрументы типа SWIG.

tailgunner ★★★★★
()
Ответ на: комментарий от r

Стилистика вводной статьи и общая культура речи не позволяют развернуть термин (пускай и несколько жаргонный) "раздутость" до "общая неоправданная сложность системы в целом, выражающаяся в большом размере runtime-библиотек, собственно среды исполнения, наличие виртуальной машины как таковой, повышенное потребление памяти по сравнению с аналогичными решениями для не-VM языков и потери в производительности".

Предложите лучший вариант или самозапилитесь.

anonymous
()
Ответ на: комментарий от geek

> С чего ты взял, что я стану забесплатно затыкать дыры в твоём образовании? =)

Ну а какой же тогда из тебя в писю Gnome Evangelist? Сдай удостоверение и пятку туда, откуда взял :)

gaa ★★
()
Ответ на: комментарий от anonymous

>общая неоправданная сложность системы в целом, выражающаяся в большом размере runtime-библиотек, собственно среды исполнения, наличие виртуальной машины как таковой, повышенное потребление памяти по сравнению с аналогичными решениями для не-VM языков и потери в производительности

А это вообще цирк.

>Предложите лучший вариант или самозапилитесь.

Ограничится техническим описанием предоставив судить и сравнивать пользователям.

r ★★★★★
()
Ответ на: комментарий от anonymous

> Для библиотек, следующих некоторым соглашениям - вполне.

Ага, уже посшли в ход "некоторые соглашения". Какие же? случайно не наличие хедера в формате genie? ;)

> Но, конечно, не надо ожидать волшебства: в большинстве случаев придётся редактировать полученный IDL руками на предмет разных мелочей. И всё же, по сравнению с написанием биндингов руками - это революция.

Ну да, теперь заниматься переливанием из пустого в порожнее стало гораздо легче.

gaa ★★
()

А самое удивительное, что сам транслятор Vala написан почти полностью на Vala (какие то мелочёвки gobject-introspection сути не меняет). Потому что бы обновиться из SVN по всей видимости нужна старая бинарная версия.

CtrlAltBs
()

>Синтаксис Genie - чистый, чёткий и ясный; во многом он заимствован у современных языков программирования, таких как Python, Boo, D и Delphi.

AFAIR Delphi это IDE, а язык называется Object Pascal.

Ej_Pulsar
()
Ответ на: комментарий от CtrlAltBs

Да, это так. Компилятор Vala является self-hosting с ранних версий (0.1.х), что, в общем, является де-факто показателем качества компилятора. Приличные дистрибутивы включают в себя бинарный пакет Vala хотя бы версии 0.2.0.

anonymous
()
Ответ на: комментарий от Ej_Pulsar

> а язык называется Object Pascal.

Даже я знаю, что он с какой-то там версии (шестой?) наз-ся именно дельфи. ;-)

Bohtvaroh ★★★★
()
Ответ на: комментарий от anonymous

> Да, это так. Компилятор Vala является self-hosting с ранних версий (0.1.х), что, в общем, является де-факто показателем качества компилятора. Приличные дистрибутивы включают в себя бинарный пакет Vala хотя бы версии 0.2.0.

Это не только ценный мех, но и инфаркт у пары сотен гентешников :)

gaa ★★
()
Ответ на: комментарий от gaa

>Это не только ценный мех, но и инфаркт у пары сотен гентешников :)

Небольшой незапланированный перерасход гентушников преступлением не является :)

ptarh ★★★★★
()

Вообще, мне это Vala напомнила Mono/.Net. Таким образом, коверкая языки, можно много чего ещё привязать к Си. И получиться компилируемый Mono/.Net. Бред?

CtrlAltBs
()
Ответ на: комментарий от anonymous

> И че только не придумают , чтоб qt неюзать

Swing

lystor ★★
()

> Genie является современным компилируемым объектно-ориентированным языком с __нестрогой__ типизацией

Как так нестрогая типизация?!

CtrlAltBs
()
Ответ на: комментарий от anonymous

>И че только не придумают , чтоб qt неюзать

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

geek ★★★
()
Ответ на: комментарий от geek

> на плюсах ОО-модель, аналогичная по возможностям GObject - не реализуема принципиально.

Кстати, ещё сложнее оказалось понять, что эта модель так до 1008 года и не стала достаточно хорошей. Иначе зачем это собираются "Спрятать все открытые поля структур с помощью макроса GSEAL()..." и т.д.? ;)

gaa ★★
()
Ответ на: комментарий от gaa

> 1008 года

Ой, эпохой ошибся! Следует читать 2008

gaa ★★
()
Ответ на: комментарий от geek

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

Офигенная модель, что всем миром костыли приходится писать чтобы было ее удобно использовать.

anonymous
()
Ответ на: комментарий от geek

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

ну всё, началось - не реализуемо принципиально, невозможно, недостаточно, криво, косо, и вообще стилей мало.

Ты не думал, что эта мегафункциональность не нужна для построения интерфейса ? Чего действительно не хватает в c++ на сегодня, так это динамизма как в JS, я кажется уже говорил, чтобы например десериализовать XML.

alex_custov ★★★★★
()
Ответ на: комментарий от geek

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

это почему же? что именно с++-й компилятор не поймет из реализации GObject?

lester ★★★★
()
Ответ на: комментарий от CtrlAltBs

> А зачем qmake?!

Показываешь незнание вопроса. qmake, как и cmake или make -- системы сборки и всё.

Вот если б ты сказал про moc или uic...

gaa ★★
()
Ответ на: комментарий от gaa

> Кстати, ещё сложнее оказалось понять, что эта модель так до 1008 года и не стала достаточно хорошей. Иначе зачем это собираются "Спрятать все открытые поля структур с помощью макроса GSEAL()..." и т.д.? ;)

Спрятать хотят не модель, а всего лишь открытые члены структур, ради возможности безболезненно ломать ABI этих структур, т.к. оно просто не будет использоваться.

GLib/GObject таки превращается в платформу аля моно и ява, только без виртуальной машины (что радует). А GObject тут замена Common Language Infrastructure в .NET.

qewerty
()
Ответ на: комментарий от tailgunner

>Биндинги давно не пишут руками - для этого есть интсрументы типа SWIG.

ну так а тут оно встроенное.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>> Что, он мне для любой либы автоматом нахреначит биндингов?

> Ну по идее, а почему бы и нет?

Мне это всегда казалось нетривиальной задачей.

gaa ★★
()
Ответ на: комментарий от qewerty

>> Кстати, ещё сложнее оказалось понять, что эта модель так до 1008 года и не стала достаточно хорошей. Иначе зачем это собираются "Спрятать все открытые поля структур с помощью макроса GSEAL()..." и т.д.? ;)

> Спрятать хотят не модель, а всего лишь открытые члены структур, ради возможности безболезненно ломать ABI этих структур, т.к. оно просто не будет использоваться.

Это был тонкий намёк на новость с 1720 комментариями :) В общем, там не только это меняют. И ещё неизвестно, вдруг скроют что-то лишнее, что придётся потом делать аналог "#define private public" :)

> GLib/GObject таки превращается в платформу аля моно и ява, только без виртуальной машины (что радует). А GObject тут замена Common Language Infrastructure в .NET.

А вот это уже -- навязывание своей объектной модели. Что мне в доднете не нравится.

gaa ★★
()
Ответ на: комментарий от AVL2

>> Биндинги давно не пишут руками - для этого есть интсрументы типа SWIG.

> ну так а тут оно встроенное.

Что встроенное, SWIG? Цитата: "не надо ожидать волшебства: в большинстве случаев придётся редактировать полученный IDL руками на предмет разных мелочей".

tailgunner ★★★★★
()
Ответ на: комментарий от gaa

>> GLib/GObject таки превращается в платформу аля моно и ява, только без виртуальной машины (что радует). А GObject тут замена Common Language Infrastructure в .NET.

> А вот это уже -- навязывание своей объектной модели. Что мне в доднете не нравится.

Да это минус, но плюс то, что всё написаное на C(GObject)/Vala/Genie можно будет стандартным для того же PyGTK образом прикрутить к CPython или чему-либо ещё.

qewerty
()
Ответ на: комментарий от qewerty

> Да это минус, но плюс то, что всё написаное на C(GObject)/Vala/Genie можно будет стандартным для того же PyGTK образом прикрутить к CPython или чему-либо ещё.

А зачем?

gaa ★★
()
Ответ на: комментарий от gaa

>> Да это минус, но плюс то, что всё написаное на C(GObject)/Vala/Genie можно будет стандартным для того же PyGTK образом прикрутить к CPython или чему-либо ещё.

> А зачем?

Затем же, зачем GTK+ прикручивают к питону.

qewerty
()

Я буду первый. И так, примерчик 1:

[indent=4]
init
    var a = 1
    print "a=%d", a

    for var i = 1 to 10
        print "i is %d", i

На выходе valac -C

#include "hello.h"
#include <stdlib.h>
#include <string.h>

void _main (char** args, int args_length1) {
	gint a;
	a = 1;
	g_print ("a=%d\n", a);
	{
		gint i;
		i = 1;
		for (; i <= 10; i++) {
			g_print ("i is %d\n", i);
		}
	}
}

int main (int argc, char ** argv) {
	g_type_init ();
	_main (argv, argc);
	return 0;
}

Хедер:

#ifndef __HELLO_H__
#define __HELLO_H__

#include <glib.h>
#include <glib-object.h>

G_BEGIN_DECLS

void _main (char** args, int args_length1);

G_END_DECLS

#endif

--

Весьма неплохо. Сейчас посмотрю как с Gtk работать.
Неужели замена Python?!

P.S. Ещё я спутал нестрогую типизацию с динамической. Каюсь.

CtrlAltBs
()

Проблевался... простите... давно не видел такого...

anonymous
()
Ответ на: комментарий от qewerty

>> А зачем?

> Затем же, зачем GTK+ прикручивают к питону.

Затем, чтобы на этом хоть кто-нибудь смог писать :) Вместо того, чтобы взять нормальный язык.

В принципе, желаю чтоб хоть один из этих GLanguage наконец-то стал применим в реальной жизни. Авось и появится удобный язык для гуйков. На данный момент я таковым tcl+tk считаю, но там есть к чему придраться.

gaa ★★
()
Ответ на: комментарий от tailgunner

>Что встроенное, SWIG? Цитата: "не надо ожидать волшебства: в большинстве случаев придётся редактировать полученный IDL руками на предмет разных мелочей".

тоже самое можно сказать и о SWIG. Простые либы оборачивает автоматом, а дальше напильничком.

AVL2 ★★★★★
()
Ответ на: комментарий от CtrlAltBs

> P.S. Ещё я спутал нестрогую типизацию с динамической. Каюсь.

А я уж было готовил гневную тираду по поводу типизации. :) Но ничего. Вся невозбранная, лютая и бешеная ярость достанется gaa. :)

anonymous
()
Ответ на: комментарий от Aceler

>> Хренец. GObject -- это уже парадигма.

> Ну а что, парадигма не хуже .Net. Мне нравится.

И теперь в учебниках будут писать: "Есть несколько парадигм языков программирования: императивная, функциональная, оо и парадигма GObject". Смешно.

Ладно бы "платформа", но "парадигма" -- это в 6 палату к Наполеону.

gaa ★★
()
Ответ на: комментарий от alex_custov

>Ты не думал, что эта мегафункциональность не нужна для построения интерфейса ?

у идиотов аргументов кроме "это не нужно" нету?

geek ★★★
()
Ответ на: комментарий от gaa

> Ну да, теперь заниматься переливанием из пустого в порожнее стало гораздо легче.

> А зачем?

Еcли для Вас интеграция гетерогенных систем - "переливание из пустого в порожнее", то добавить мне нечего. Не удивлюсь, если Вы также отрицаете CORBA, системы message queueing, и всю отрасль enterprise application integration. Прозрейте же, наш мир гетерогенен.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.