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)

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

> Откуда такие замечательные дровишки?

стандарт языка С++

3.6.3 Termination Destructors (12.4) for initialized objects of static storage duration (declared at block scope or at namespace scope) are called as a result of returning from main and as a result of calling exit (18.3). These objects are destroyed in the reverse order of the completion of their constructor or of the completion of their dynamic initialization. If an object is initialized statically, the object is destroyed in the same order as if the object was dynamically initialized. For an object of array or class type, all subobjects of that object are destroyed before any local object with static storage duration initialized during the construction of the subobjects is destroyed.

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

>> Откуда такие замечательные дровишки?

> стандарт языка С++

Хорошо что ты читаешь стандарты. но про зависимости между локальными объектами тебе уже сказали.

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

> Расскажи еще сказку что у тебя зависимостей между локальными объектами никогда не бывает.

лол, откуда ты только выдез такой дремучий?

try { File file(name); FileMapping map(file); FileView view(map);

//using view } catch () { }

обьекты file, map и view будут уничтожены в обратном порядке, что и требуется.

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

забыл форматирование

try
{
  File file(name);
  FileMapping map(file);
  FileView view(map);

  //using view
}
catch ()
{
}

обьекты file, map и view будут уничтожены в обратном порядке, что и требуется. 

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

> на второй-третьей странице флейма анонимный брат сказал, что это уже возможно %)

Пока что в разработке. Этот проект находится в GSoC. И чувак только начал его разрабатывать.

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

2 BeerSeller, tailgunner

Анонимный брат, признаюсь честно, слегка приукрасил. Поддержка Vala в Anjuta запланирована и рано или поздно появится. Вон, брат BeerSeller нарыл плугин (похоже, сторонний), было бы интересно услышать о результатах испытаний.

Пока что самых приличных результатов удалось добиться в Geany (http://geany.uvena.de - упрощённое IDE/продвинутый редактор, не путать с Genie), правда, без возможности отладки.
Существуют Emacs mode и Vim configuration для Vala, а также некая поддержка в MonoDevelop. Недавно появился проект Val(a)IDE (http://home.gna.org/valide), но мне эта инициатива кажется несколько спорной - я лично за поддержку Vala в существующих IDE.

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

>> Расскажи еще сказку что у тебя зависимостей между локальными объектами никогда не бывает.

>лол, откуда ты только выдез такой дремучий?

>try { File file(name); FileMapping map(file); FileView view(map);

Пример тривиальный, т.к есть еще и пространство внутренних состояний объектов. Кроме того пример скрывает визуально минимум процентов 60 функционала этих системных сущностей на *NIX&Win32. Ты всерьез собрался моэйнтейнить всю иерархию врапперов вокруг системного API?

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

> Анонимный брат, признаюсь честно, слегка приукрасил. Поддержка Vala в Anjuta запланирована и рано или поздно появится

хе-хе. красноглазики выдают желаемое за действительное

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

>>>> Какой ещё язык программирования 1) компилируется в нативный код, 2) реализует автоматическое управление памятью, 3) имеет такое количество биндингов "искаропки", 4) предлагает максимально упрощённый процесс создания биндингов для "не-искаропки"?

>>> Неужели кто-то осмелится оспорить революционность

>> И в чем революционность? В 1, 2, 3 или 4?

> В 1, 2, 3 и 4 _одновременно_. Вы не сможете назвать другой язык, сочетающий в себе все эти свойства разом.

D

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

> всерьез собрался моэйнтейнить всю иерархию врапперов вокруг системного API

RAII управляет удалением и созданием обьектов. не обязательно писать полный враппер, можно написать operator HANDLE () и использовать остальные системные функции напрямую.

> Пример тривиальный, т.к есть еще и пространство внутренних состояний объектов.

RAII то здесь причем?

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

>> try { File file(name); FileMapping map(file); FileView view(map);

> Пример тривиальный, т.к есть еще и пространство внутренних состояний объектов.

Ну то есть факт, что порядок освобождения задается расположением объектов в тексте (== порядком вызова конструкторов) - с этим ты уже согласен?

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

>> D

> ууу, как всё запущено

Для него ещё биндингов к gtk не сделали? ;)

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

> Вон, брат BeerSeller нарыл плугин (похоже, сторонний), было бы интересно услышать о результатах испытаний. 

Можно сказать его ещё нету =( В разработке. Там где смотрел ещё только скелет плуга и мясом ещё расти и расти.

Но а Val(a)IDE ещё не очень юзабельна (по крайней мере с первого взгляда).

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

>>> try { File file(name); FileMapping map(file); FileView view(map);

>> Пример тривиальный, т.к есть еще и пространство внутренних состояний объектов.

>Ну то есть факт, что порядок освобождения задается расположением объектов в тексте (== порядком вызова конструкторов) - с этим ты уже согласен?

Нет, не согласен я во-первых с типичным плюсовым NIH - синдромом городить вокруг надежного системного API кружево из костылей. Я у таких энтузиастов Ъ-ООП выигрывал кстати в тестовом задании - у меня опция шаринга файлов была установлена правильно в результате чего приложение не вылетало из-за параллельного открытия лога в Фаровском вьювере.

Ну и во-вторых предварительные действия перед уничтожением не выполнены. Уничтожать надо минимум в два шага.

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

>>Ну то есть факт, что порядок освобождения задается расположением объектов в тексте (== порядком вызова конструкторов) - с этим ты уже согласен?

>Нет, не согласен я во-первых с типичным плюсовым NIH - синдромом городить вокруг надежного системного API кружево из костылей

> Ну и во-вторых предварительные действия перед уничтожением не выполнены. Уничтожать надо минимум в два шага.

Умеешь ты уйти от прямого ответа %) Я спрашивал не о кружевах и шагах, а о порядке уничтожения.

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

> Я у таких энтузиастов Ъ-ООП выигрывал кстати в тестовом задании - у меня опция шаринга файлов была установлена правильно в результате чего приложение не вы

подробности твоей личной жизни здесь никого не интересуют.

> Ну и во-вторых предварительные действия перед уничтожением не выполнены. Уничтожать надо минимум в два шага.

лучше минимум в три.

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

>Идея, в принципе, хорошая - но почему, сцука, всё написанное на GTK такое тормозное?!

У меня компьютер 6-ти летней давности. Обновлял только оперативу (и монитор). Ничего не тормозит (кроме кед). ЧЯДНТ? :)

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

> Ничего не тормозит (кроме кед).

> ЧЯДНТ? :)

пиздишь

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

>> Ну и во-вторых предварительные действия перед уничтожением не выполнены. Уничтожать надо минимум в два шага.

>Умеешь ты уйти от прямого ответа %) Я спрашивал не о кружевах и шагах, а о порядке уничтожения.

Меня интересует не порядок вызова дектрукторов, а зависимости между локальными объектами, в частности между состояниями локальных объектов. В общем, мне нужен блок для явного клинапа.

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

Не используйте кривые темы на основе pixbuf и будет вам счастье и не будет тормозов

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

>> Я у таких энтузиастов Ъ-ООП выигрывал кстати в тестовом задании - у меня опция шаринга файлов была установлена правильно в результате чего приложение не вы

>подробности твоей личной жизни здесь никого не интересуют.

В конструкторе File у тебя стринг а не хэндл, следовательно шаринг ты не настраиваешь. Ну и?

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

Красноглазик здесь только ты.

Кстати, я думаю KDevelop тоже будет поддерживать Vala, и этот, о котором новость.

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

> В конструкторе File у тебя стринг а не хэндл

я что-то не пойму, мы RAII обсуждаем или шаринг? неужели непонятно что детали поскипаны.

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

перевожу: я не умею пользоватся RAII поэтому освобождаю ресурсы явно в блоке __finally.

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

> D не удовлетворяет пп. 3 и 4.

Да ну? И где же сравнение количества биндингов? А где сравнение легкости их написания? Напомню, что D умеет вызывать Си-процедуры без всякой обвязки вообще.

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

>> В конструкторе File у тебя стринг а не хэндл

>я что-то не пойму, мы RAII обсуждаем или шаринг? неужели непонятно что детали поскипаны.

Нет, детали не поскипаны. Такой типичный С++-фэнбойский код a-la "Давай-ка я сначала напишу ОС с кошерным API" я видел много раз.

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

>перевожу: я не умею пользоватся RAII поэтому освобождаю ресурсы явно в блоке __finally.

Разумного применения RAII не существует, поэтому смысла в умении им пользоваться нет никакого.

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

> Разумного применения RAII не существует, поэтому смысла в умении им пользоваться нет никакого.

Хочешь покажу?

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

> Нет, детали не поскипаны.

т.е по твоему для открытия файла достаточно его имени? ай лолд.

> Разумного применения RAII не существует, поэтому смысла в умении им пользоваться нет никакого.

смешно. RAII одна из самых удачных концепций в С++. отрицать это может либо полный нуб либо полный идиот.

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

>RAII одна из самых удачных концепций в С++.

Нигде кроме С++, впрочем, ее не заадоптили. Максимум - сделали сахар вокруг finally как в шарпе.

>отрицать это может либо полный нуб либо полный идиот.

Ну ладно, допустим "удачная концепция без возможности разумного ее применения". Подходит под весь С++.

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

> Ну ладно, допустим "удачная концепция без возможности разумного ее применения". Подходит под весь С++.

хе-хе, бездарь, своими постами ты показал банальное незнание языка (см. про порядок вызова деструкторов). Вполне логично, что недоучка не может правильно использовать С++.

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

Напомню, что "биндинги" - это возможность использовать стороннюю библиотеку в русле основной парадигмы языка. Если Вы напишете программу на D, вызывающую, скажем, функции libgtk-2.0 как сишные функции, то и сама программа несильно будет отличаться от программы на С. Вы не сможете использовать все вкусности языка D, типа garbage collection. Ваша программа даже не будет объектно-ориентированной! Зачем тогда D?

Наоборот, Vala-биндинги предоставляют объектно-ориентированное API. GTK+ здесь - только пример, на месте GTK+ мог бы быть ZLib, или там libastral. :)

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

> Если Вы напишете программу на D, вызывающую, скажем, функции libgtk-2.0 как сишные функции, то и сама программа несильно будет отличаться от программы на С. Вы не сможете использовать все вкусности языка D, типа garbage collection.

Для кода на D - смогу. А Vala не сможет использовать подсчет ссылок для не-GObject библиотек. Я понимаю, что она для этого и не предназначена, но тогда не надо и песен о "революционности".

Кстати, сборка мусора - не единственная "вкусность" D.

> Vala-биндинги предоставляют объектно-ориентированное API.

Даже если оборачиваемая библиотека - не объектно-ориентированная? Это AI или ручной труд? 8) Вручную-то можно написать любой биндинг, но это не революция.

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

>> Ну ладно, допустим "удачная концепция без возможности разумного ее применения". Подходит под весь С++.

>хе-хе, бездарь, своими постами ты показал банальное незнание языка (см. про порядок вызова деструкторов). Вполне логично, что недоучка не может правильно использовать С++.

Я не пишу код который зависит от таких вещей как порядок деструкторов, пионеришко. Я вообще не использую конструкторов и деструкторов. И не использую исключения. Попищи еще.

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

Вас стало неинтересно троллить, Вы вполне компетентны и адекватны, я Вас недооценивал, за что и извиняюсь :)

Расскажите в трёх словах о D, буду благодарен, ибо в Википедии как-то всё больно абстрактно. Если можно, с примером, в котором явно был бы виден выигрыш по сравнению с C++ в части понимабельности кода.

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

> Расскажите в трёх словах о D, буду благодарен

Именно в 3-х словах? http://s3.amazonaws.com/dconf2007/WalterAndrei.pdf

> Если можно, с примером, в котором явно был бы виден выигрыш по сравнению с C++

Я не пишу на D, только присамтриваюсь к нему (не скажу, кстати, что он меня сильно впечатляет, хотя тут надо всё же дождаться AST-макросов). На http://digitalmars.com/d/index.html есть и документация, и примеры, а на dsource.org - куча проектов на D.

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

>Расскажите в трёх словах о D, буду благодарен, ибо в Википедии как-то всё больно абстрактно. Если можно, с примером, в котором явно был бы виден выигрыш по сравнению с C++ в части понимабельности кода.

D можно закапывать - его взялся "улучшать" больной на всю голову александреску.

=)

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

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

>geek (*) (03.07.2008 8:19:30)

Один из самых надёжных признаков идиотов - это то, что они судят не по самим вещам, а потому, кто их делал, как их делал etc.

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

>Один из самых надёжных признаков идиотов - это то, что они судят не по самим вещам, а потому, кто их делал, как их делал etc.

Один из самых надёжных признаков идиотов - это то, что они выдают за истину плод своей необразованной фантазии:)

На самом деле критерий "кто их делал, как их делал" - довольно надёжный показатель. Не без исключений, но 80-90% случаев он ИМХО покрывает.

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