Genie: документація, поширеність і синтаксис

Документація і поширеність
Genie: документація, поширеність і синтаксис

Документація по Genie - більш ніж скромна. Єдина офіційна сторінка https://live.gnome.org/Genie містить досить аскетичне посібник з описом синтаксису мови і його основних особливостей. Цінним джерелом інформації є блог Баррі Каулера (Barry Kauler, https://bkhome.org/genie), творця дистрибутива Puppy Linux і переконаного пропагандиста Genie в минулому. На сайті https://code.valaide.org можна знайти досить багато прикладів використання Genie в зв`язці з GTK + і різними бібліотеками. Мабуть, це все, що є в інтернеті. Блог творця мови Джемі Маккракен (http: // jamiemcc.livejournal.com) не містить ніякої корисної інформації крім анонсу Genie, датованого 2008 роком. Ніякої документації по Genie російською мовою немає.

За поширеністю Genie набагато поступається своєму «старшому братові» Vala. Genie кілька років був основною мовою при розробці утиліт для Puppy Linux, проте в минулому році творець цього дистрибутива повністю перейшов на BaCon - реінкарнацію класичного Basic. У підсумку, Genie залишився не при справах. Мені не вдалося знайти в мережі жодного серйозного проекту, цілком написаного на Genie. Є лише кілька невеликих «іграшкових» програм, однак це не означає, що мова покинутий і нікому не потрібний. Підтримку синтаксису Genie в компіляторі Vala ніхто не збирається припиняти, а дитячий вік самої мови дозволяє сподіватися на благополучне майбутнє. Разом з тим, відсутність пропаганди мови і погана документація явно не сприяють збільшенню його популярності.

синтаксис

Я не буду формально описувати синтаксис Genie, який у своїй основі практично ідентичний синтаксису мови Python. Замість цього напишемо і розберемо таку ж просту програму з використанням GTK +, що розглядалася в попередній статті про Vala:
usesGtkinitGtk.init (ref args) var test = new TestWindow () test.show_all () Gtk.main () -class TestWindow: Window inittitle = "Test Window" set_default_size (300, 50) window_position = WindowPosition.CENTER destroy + = Gtk .main_quitvar button = new Button.with_label ( "Click Me") button.clicked + = def (btn) btn.label = "Thank you!" add (button)

В першу чергу звертає на себе увагу використання відступів для структурування коду як в Python. Ширину відступів можна задавати довільно директивою «indent» на початку файлу. Наприклад, [indent = 4] задасть відступ в 4 символи.

Виконання програми в Genie починається з блоку init, що знаходиться поза визначень класів і функцій. Це аналог функції main () в Vala або C ++. В глобальну змінну args автоматично поміщаються параметри командного рядка додатка, тому ніяких додаткових параметрів в блоці init вказувати не потрібно. Далі ми створюємо свій клас TestWindow, успадкований від стандартного класу вікна Window. У кон-структоре класу (блок init) виконуються наступні дії: инициализируется вікно, створюються віджети, задається обробник події натискання на кнопку.

Синтаксис приєднання функцій-обробників до подій в Genie ще більш простий, ніж в Vala. Використовується оператор «+ =», який в цьому контексті замінює функцію «connect»:
destroy + = Gtk.main_quit

Оголошення лямбда-функції, яка є обробником події натискання на кнопку, також виглядає по-іншому -використовується ключове слово def (), але по суті все в точності, як у Vala:
button.clicked + = def (btn) btn.label = "Thank you!"

У блоці init основної програми ми створюємо екземпляр нового класу, показуємо елементи вікна функцією show_all () і входимо в цикл обробки подій.

Явна оголошення змінних в Genie виглядає не так, як в Vala, оскільки використовується синтаксис Pascal / Delphi із зазначенням типу після змінної:
int_val: int = 10 double_val: double = 12.5button: Button = new Button.with_label ( "Click me!")

Можна оголошувати змінні з автоматичним визначенням типу за допомогою ключового слова var. Його можна також використовувати в формі блоку:



vara = "happy" b = "sad" c = "ambivalent"

Керуючі конструкції в Genie практично ідентичні таким в Python за виключення деяких деталей, пов`язаних з типізацією змінних. У Genie як конструкції foreach виступає різновид циклу for, що оперує зі списками:
for s in args do print s

Тип змінної s компілятор визначає автоматично. Крім цього варіанту є і індексна форма циклу for, більш звична для програмістів на З ++ чи Pascal:



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

Функції і методи оголошуються в Genie в стилі Pascal з типом значення, що повертається після заголовка функції:
def func (name: string): string print "hello% s", name return "hello!"

Синтаксис класів в Genie має ряд особливостей. Можна оголошувати перевантажені конструктори, якщо вони приймають різні аргументи. Також можна використовувати синтаксис з суфіксом, наприклад:
var foobar = new Foo (10) // Основний конструкторvar foobar2 = new Foo.with_bar (10) // Конструктор з суфіксом

В оголошенні класу конструктори задаються ключовим словом construct:
class Foo: Object / * Це властивість класу * / prop a: intinitprint "Мінлива foo тепер инициализирована" finalprint "Викликаний деструктор" / * У блоці construct можна форматувати тільки * і виключно властивості класу * / construct (b: int) a = b / * Створює конструктор з префіксом * / construct with_bar (bar: int) a = bar

У цьому коді також показано використання властивостей в класах і створення деструктора в блоці final. Основою ієрархії об`єктів є клас Object, успадкування якого наділяє дочірній клас усіма можливостями, наданими бібліотекою glib, яка знаходиться «під капотом».

Узагальнені класи задаються конструкцією% s ", s, d [s] [/ code]
Обробка помилок в Genie (як і в Vala) реалізована досить заплутано. Це пов`язано з прийнятою в glib трирівневої системою перехоплення помилок «домен-код-повідомлення». Найлегше пояснити її на прикладі:
exception ErrorType1 // Це домен, що задає якийсь загальний тип // ошібкіCODE_1A // Це код помилки - уточнююча // інформація всередині доменаCODE_1B // Ще один код того ж доменаinittry // Звичний блок tryTest.thrower () except ex: ErrorType1 // Ловимо тільки помилки // типу ErrorType1print "Перехоплена помилка" + ex.messageclass Test: Object // метод, що генерує ошібку- домен генеруються // помилок задається явноdef static thrower () raises ErrorType1raise new ErrorType1.CODE_1A ( "Упс ...") / * Генерується помилка домену ErrorType1 з кодом CODE_1A і повідомленням у вигляді текстового рядка "Упс ..." * /

Система з доменами і кодами помилок виглядає надмірно складною, але така організація бібліотеки glib - з нею доводиться миритися.

висновки

Строго кажучи, Genie - це не більше ніж альтернативний синтаксис мови Vala, але в той же час, за власними відчуттями від його використання, він є цілком самостійним. Поки Genie залишається набагато менш популярним «молодшим братом» Vala, проте це викликано швидше за його молодістю і недоліком реклами, ніж об`єктивними причинами. У Genie упор зроблений на лаконічність і простоту написання коду. Код на Genie ви-дивиться більш витончено і легше читається. Крім того, в базовий мову включені узагальнені контейнери, що робить його набагато більш схожим за стилем використання на скриптові мови. Сильна схожість синтаксису з мовою Python робить його реальної заміною останнього в тих випадках, коли необхідна велика швидкість і менше споживання пам`яті. Genie успадковує всі сильні і слабкі сторони Vala у всіх аспектах крім синтаксису, тому висновки попередній частині статті залишаються в силі і щодо Genie.

ІНШЕ

Shotwell: інтерфейс фото

Shotwell: інтерфейс

Відео: Shotwell 0.7 - Ubuntu Maverick Moviesінтерфейс Вікно Shotwell після імпорту Робота з новим менеджером…

Обробка подій в juce фото

Обробка подій в juce

Відео: Уроки javascript | Урок №13 - Події і обробник подій Переважна більшість тулкіта для С ++ (Gtk +, Qt,…

Робота з gens ng фото

Робота з gens ng

Відео: # 39; Criss Rips Bodies Apart # 39; | Criss Angel BeLIEve Гра Bubsy в Gens GS Про налаштуваннях графіки. У Gens…

Мова програмування vala фото

Мова програмування vala

Hello world! Розгляд будь-якої мови програмування традиційно належить починати з найпростішої програми «Hello…

Ultimate ++: перша програма фото

Ultimate ++: перша програма

Відео: Уроки C # (C sharp) | # 3 - Перша програма на C # Перейдемо до реального прикладу. Напишемо просту марну…

» » Genie: документація, поширеність і синтаксис