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)

Ответ на: комментарий от lester

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

динамическую систему типов не поймет

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

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

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

Конечно. Но тогда я не вижу выгоды Genie в отношении написания биндингов. Ну разве что ее разработчики напишут биндинги для всего-всего.

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

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

> динамическую систему типов не поймет

Тебе не рассказали в школе, что C89 является подмножеством C++?

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

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

Сказал кучу общих слов, к которым придраться нельзя. И незаметно ушёл от темы.

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

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

Ух ты!!! Взрослеешь? ;-)

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

>Оно неживое.

qtcl-4.0 от 28.06.2008 - это неживое?

>Да и зачем тянуть qt туда, где уже есть tk?

С чего вы взяли, что "уже есть tk"?

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

>> Оно неживое.

> qtcl-4.0 от 28.06.2008 - это неживое?

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

>> Да и зачем тянуть qt туда, где уже есть tk?

> С чего вы взяли, что "уже есть tk"?

С того, что tk есть в tcl уже 18 лет.

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

>Тебе не рассказали в школе, что C89 является подмножеством C++?

каким боком C89 к объектной модели плюсов относится? Ты идиот, или притворяешься?

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

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

>> динамическую систему типов не поймет

> каким боком C89 к объектной модели плюсов относится?

Ровно таким же как c89 относится к объектной модели GLanguage.

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

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

> ага. Не притворяешься. Жги дальше =)

Опять аргументы закончились? Дожамкался :)

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

>Конечно. Но тогда я не вижу выгоды Genie в отношении написания биндингов.

уверен, в гугле есть масса инфы об отличиях биндингов от *.vapi

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

а не вы ли утверждали, что на плюсах нельзя воссоздать обьектную модель GObject? Про сравнение объектной модели плюсов и GObject там и слова не было ;)

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

>Ровно таким же как c89 относится к объектной модели GLanguage.

разворачиваю мысль для тех, у кого туго с соображалкой:

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

2. писать на плюсах в модели GObject не получится в силу ограничений C++

3. пункт 2 будет верным, пока к Vala не прикрутят парсер c++-образного синтаксиса.

4. но даже в этом случае vala/c++ не будет c++, потому как abi.

5. за подробностями - что именно значат страшные слова "парсер", "модель GObject" и "abi" - в гугель

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

>а не вы ли утверждали, что на плюсах нельзя воссоздать обьектную модель GObject? Про сравнение объектной модели плюсов и GObject там и слова не было ;)

ещё один. Где вас только делают? Какой смысл плюсать (сокращение от "писать на плюсах"), если нельзя использовать плюсовые фишки в виде ооп и шаблонов?

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

> Пипец - технический термин

Пипец - не технический термин :)

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

> 2. писать на плюсах в модели GObject не получится в силу ограничений C++

Ну почему же? Реализовать модель подобную GObject вполне возможно и на С++, но только в обход его родной объектоной модели, т.е. используя объектную модель С++ для реализации другой объектоной модели, как не объектная модель С, со структурами и функциями была использована для реалзации GObject. Однако, здаётся мне, что лучше этого никогда не делать =)

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

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

Датышто!!111адынадын

> 2. писать на плюсах в модели GObject не получится в силу ограничений C++

Да ладно-ка? Берём тот же самый код на С, переименовываем файл в cpp и компилируем.

Или всё же шла речь о представлении Г-классов как классов C++ :о) И даже в этом случае почему-то вспоминается gtkmm.

> 3. пункт 2 будет верным, пока к Vala не прикрутят парсер c++-образного синтаксиса.

А его собираются прикрутить о_О

> 4. но даже в этом случае vala/c++ не будет c++, потому как abi.

всё, что завязло в G уже не спасёшь, да.

gaa ★★
()

Господа, давайте уже сразу перейдем к KDE vs. GNOME, к чему все ети нелепые формальности формальности?

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

> уверен, в гугле есть масса инфы об отличиях биндингов от *.vapi

А я в этом не уверен. Есть туториал по генерации при помощи GI, но это как раз менее всего интересно. Ну и судя по отсуствию предупреждений типа "machine-generated file, do not edit" в *.vapi-файлах для не-GObject библиотек, генерятся они вручную. Ну так в чем выигрыш, еще раз?

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

> Реализовать модель подобную GObject вполне возможно и на С++, но только в обход его родной объектоной модели, т.е. используя объектную модель С++ для реализации другой объектоной модели, как не объектная модель С, со структурами и функциями была использована для реалзации GObject. Однако, здаётся мне, что лучше этого никогда не делать =)

gtkmm?

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

>> Реализовать модель подобную GObject вполне возможно и на С++, но только в обход его родной объектоной модели, т.е. используя объектную модель С++ для реализации другой объектоной модели, как не объектная модель С, со структурами и функциями была использована для реалзации GObject. Однако, здаётся мне, что лучше этого никогда не делать =)

> gtkmm?

gtkmm не есть реализация той же объектной модели на С++, это просто классы С++, которые прозрачно юзают объектную модель GObject.

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

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

В том-то и дело, что не смешно. :)

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

>С того, что tk есть в tcl уже 18 лет.

не "в tcl", а "для tcl":)

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

Да, и QT4. А почему ты удивлен?..

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

> динамическую систему типов не поймет

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

во всех тулкитах, что в жабке, что в шарпе, что в Qt и даже быдло-МФЦ используется статическая система типов и никто не жалуется. Гтк - один такой особенный и особенно удобный. настолько удобный, что два костыля на перегонки пишут.

а вообще некрасиво уродские решения написанные на уродско-примитивном языке выдавать за вершину программерской мысли.

anonymous
()

Genie - кажеться это любовь

Пример с Gtk. Сам код выглядит очень красиво и компактно. Показано
несколько возможностей:
* можно с this, а можно без
* вызов функций с передачей параметров
* "uses Gtk" - что б не писать каждый раз "Gtk."

Писалось по куцым примерам без полноценной документации.
Размер выходного бинарника после strip: 7K
Сишный вывод уже нет смысла смотреть (большой и путанный).

Но как разбивать на модули/пакеты - одним разработчикам известно.
Очень сложно двигаться дальше. Но потенциал виден!
Очень многое можно использовать из документации Vala.

/* GTK+ Genie Sample Code - compile with
 * valac --pkg gtk+-2.0 genie-gtk.gs
*/
uses
	Gtk

init
	Gtk.init (ref args)
	var test = new GtkSample()
	call_funct_gtk_main()

class GtkSample : Window
	init
		this.create_widgets()
		call_funct_show_all(this)

	def create_widgets ()
		this.title = "Test Window"
		default_height = 250
		this.default_width = 250
		window_position = WindowPosition.CENTER

		this.destroy += Gtk.main_quit

		var button = new Button.with_label ("Click Me")

		button.clicked += def (btn)
			this.title = "Hello World"
			btn.label = "Hello World"

		var frame = new Frame("Frame 1");
		this.add(frame)
		frame.add(button)

def call_funct_gtk_main()
	Gtk.main()

def call_funct_show_all(some : Window)
	some.show_all()

CtrlAltBs
()

У меня вопрос. Проекты на C/GTK вообще, кроссплатформенные. Программы на Vala/Geany кроссплатформенные?

И вообще, зачем нужен Geany, когда есть Vala и vice versa?

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

>пользы от динамической системы типов в гуи-тулките - босый ноль.

То-то я гляжу в любом плюсовом фреймворке "общего назначения" первым делом пишут костыльный рефлекшен на макросах или внешнем препроцессоре. Что в MFC, что в ATL/COM, что в Qt.

>а вообще некрасиво уродские решения написанные на уродско-примитивном языке выдавать за вершину программерской мысли.

На плюсах чтоли?

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

> И незаметно ушёл от темы.

С Вами неинтересно дискутировать по теме в силу Вашей некомпетентности. Однако, пересиливая себя, дам Вам ещё один шанс. Причём в более примитивных терминах, доступных Вам.

1. Возьмите существующую библиотеку, пусть это будет обработка специальных данных (например, медицинских или геодезических). 2. Попробуйте создать обвязки для библиотеки на Python/Ruby/Java/Mono, на выбор. 3. Попробуйте создать обвязки для библиотеки на Vala/Genie. 4. Удавитесь. 5. ??? 6. PROFIT!!!

Впрочем, допускаю, что Вы всё зафэйлите начиная с п. 2. Или даже с п. 1.

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

>Тебе не рассказали в школе, что C89 является подмножеством C++?

Если смешать килограмм варенья и килограмм дерьма, то получится 2 кг дерьма. Поэтому, из уважения к языку Си я бы запретил вообще думать о том что убожество под названием плюсы имеет к Си какое-либо отношение.

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

> 1. Возьмите существующую библиотеку, пусть это будет обработка специальных данных (например, медицинских или геодезических). 2. Попробуйте создать обвязки для библиотеки на Python/Ruby/Java/Mono, на выбор. 3. Попробуйте создать обвязки для библиотеки на Vala/Genie. 4. Удавитесь. 5. ??? 6. PROFIT!!!

> Впрочем, допускаю, что Вы всё зафэйлите начиная с п. 2. Или даже с п. 1.

К чему эти нелепые формальности? Говори сразу: "удавись". Зачем перед этим писать обвязки?

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

Маааленький вопрос: если плюсы такое убожество, то почему на нем столько проектов?.. Причем и либ немало, хотя этот влечет трудности.

anonymous
()
Ответ на: Genie - кажеться это любовь от CtrlAltBs

Благодарю за поддержку темы, коллега.

Рекомендую поизучать примеры программирования на Vala: http://live.gnome.org/Vala/#head-9c728d151a2a0483d4f3b5837e5b545df9d8499d

Скептикам, утверждающим, что ничего серьёзного на Vala/Genie не написано, советую обратить внимание на сей список: http://live.gnome.org/Vala/#head-a2a9eb379001c7c92a6fcf5b84b0f08f8b71f997

<Ъ>
Applications developed in Vala

Scratchpad Spatial text editor for the GNOME desktop
Paldo Installer Installer for the Paldo Linux Distro
OpenMoko Terminal
People Project aims at providing an unified access to contacts for desktop applications
Vala Benchmarks
radare Multi-architecture assembly code graph in Vala-Cairo
Abraca A GTK+ XMMS2 client.
Shishen Sho Mahjongg for Gtk and Maemo, a board game similar to Mahjongg
GNOME Scan, mixed with C/GObject.
Cheese, a branch to see if cheese can be implemented in vala
gtkaml an Application Markup Language for GTK+Vala
gupnp-media-server A UPnP MediaServer for freedesktop under development.
gupnp-media-renderer A UPnP MediaRenderer reference implementation.
</Ъ>

Самыми многообещающими, пожалуй, можно назвать GNOME Scan, People и gtkaml.

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

Врождённая культура не позволяет мне сразу послать его нахруй.

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

>Маааленький вопрос: если плюсы такое убожество, то почему на нем столько проектов?.. Причем и либ немало, хотя этот влечет трудности.

ровно по той же причине, по которой у "Дом-2" столько поклонников

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

1. Откройте для себя отладку Vala в Anjuta IDE и в MonoDevelop. 2. Удавитесь. 3. Ступайте нахруй.

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

> Маааленький вопрос: если плюсы такое убожество, то почему на нем столько проектов?.. Причем и либ немало, хотя этот влечет трудности.

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

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

> тебя ждет приятный сюрприз когда ты захочешь воспользоватся дебаггером.

Почему-то никакие сюрпризы не ждут тех, кто отлаживает выполнение JSP-страниц в NetBeans (Vala'вский C-код - верх читабельности и изящества по сравнению с Java-кодом, генерируемым из JSP). Почему-то никто не сталкивается с сюрпризами, отлаживая программы на C - а ведь из исходного текста на C генерируется текст на ассемблере!

Отлаживать промежуточный сгенерированный код - такое могло прийти в голову либо страдающему ФГМ, либо автору языка (которому это действительно может быть необходимо).

Вряд ли Вы являетесь вторым.

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

>    var a = 1
>    print "a=%d", a

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

Ужас, для кого это писали? Для клинических дебилов, соскучившихся по паскалю?

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

> если плюсы такое убожество, то почему на нем столько проектов?..
> Причем и либ немало, хотя этот влечет трудности.

Мне кажеться С++ в популярности из за MS Visual C++
А в Linux/Unix вроде всегда основным был Си

хотя может я и ошибаюсь ...

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

>ЛОЛ, так QT и все его использующие - быдло по-твоему?

нет, детка, быдло это те, кто считает, что c++ может заменить си, а qt может заменить gobject/gtk

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

>Маааленький вопрос: если плюсы такое убожество, то почему на нем столько проектов?

Синдром влипания. К тому моменту когда осознают сущность этого языка возврата назад нет.

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

>С++ слишком сложен для быдлокодеров,

Наоборот, это самый простой язык для быдлокодеров и пионеров. Быдлокодливей даже Жавы и Питона.

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