LINUX.ORG.RU
ФорумTalks

Vala

 , , ,


0

0

Я попробовал написать на этом чуде кое-что посложнее Hello World, и мне кажется, я понял основной на данный момент его недостаток.

Это отсутствие документации к байндингам.

Дело в том, что, когда требуется обратиться к функциям GLib/GTK с каким-то нестандартным синтаксисом, сразу же начинаются выкрутасы в стиле "абракадабра - достаём из шляпы кролика". Глядя только на сишную документацию, этого в жизни не понять - приходится лезть в файлы .vapi и там смотреть.

Самое противное, что зачастую уже _после_ такого подглядывания метод вызова кажется вполне себе интуитивным. Ну кто мог бы предположить, что g_strdup_printf(format, ...) вызывается в Vala как format.printf(...) и возвращает строку? Даже глядя на прототип функции, я это не сразу понял. Также далеко не очевидно само _существование_ конструкции типа 5.to_string(), не говоря уже о том, что она вызывает всё тот же g_strdup_printf.

При этом ещё вызовы периодически ломаются между версиями, причём так, что "разбор полётов" требует знания не только Vala, но и того, что там, под капотом, творится. Простой пример: в ранних версиях Glade.XML.signal_autoconnect_full работал с методами, объявленными как [InstanceLast]. Сама необходимость добавления такого атрибута объясняется тем, что this передаётся как user_data, последним параметром. Само по себе неочевидно. Но в какой-то момент эти чудилы из Нижнего Тагила сделали так, что методы [InstanceLast] превращаются в открытые функции, в которых this стоит первым параметром, но они _внутри себя_ вызывают _закрытые_ функции, у которых this стоит уже последним параметром! С передачей указателей на функции это прокатывает, но не с libglade. В итоге теперь нужно писать [CCode (instance_pos = -1)], что уже и вовсе тёмный лес.

Да, при этом имена вызываемых функций в самом редакторе glade приходится писать как имя_класса_имя_метода. Причём, кроме одного примера файла .glade на live.gnome.org, это никак не документировано!

Или, например, в функции, передаваемой параметром Gtk.AboutDialog.set_url_hook, в байндинге сначала был последний параметр типа gpointer, а потом его убрали. Естественно, всё перестало компилироваться. А Gtk.ListStore.set_column_types была изначально объявлена с параметрами (int, GLib.Type[]), но этот вызов был поломан, потому что Vala при всех вызовах после массива неявно добавляет параметром его длину, а для подавления этого нужен специальный атрибут, которого в файле vapi не было. В следующих версиях они перенесли длину первым параметром, на место int. Так что теперь этот int указывать не нужно, ибо он указывается неявно...

Я думаю, что этим дело далеко не ограничивается.

В общем, подводя итоги: я считаю, что у Vala есть будущее. Но не сейчас - не раньше, чем заморозят API и напишут нормальную документацию. А это произойдёт не раньше сентября.

★★★

Последнее исправление: CYB3R (всего исправлений: 1)

Используй .NET, ибо это глобально, надежно и кроссплатформенно!

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

>> к логопеду.

> А как, по-вашему, правильно?

Биндингам?

anonymous
()

>Также далеко не очевидно само _существование_ конструкции типа 5.to_string(), не говоря уже о том, что она вызывает всё тот же g_strdup_printf.

Я остаюсь на ruby c 34.to_s

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

>> ты просто завидуешь :)

>байдингам ?)

логопеду

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

> по-нашему они всегда были биндингами )

Вопрос на засыпку - как читается английское слово binding?

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

> Вопрос на засыпку - как читается английское слово binding?

как читается, как читается ... плохо читается (% линукс ты тоже лайнаксом не называешь же )

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

> Вопрос на засыпку - как читается английское слово binding?

s/засыпку/занудство

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

> Как-как... Как известно - лялех.

хм, а мне говорили, что "люпекс". Обманули, сволочи

overmind88 ★★★★★
()

<trolling> Зачем вообще все эти языки, если есть Python? :) </trolling>

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

BMW :) не сразу догнал, почему они "БэЭмВэ" называют "БиЭмДаблъю". И до сих пор не совсем привычно, хотя и логично.

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

> И до сих пор не совсем привычно, хотя и логично.

не логично, ибо название немецкое

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

АФАИК там переходный звук, что то среднее между с, ш и щ. Примерно то же, что и с суши, которое суси.

Имхо, такие слова принято транслитерировать через с, но есть некоторые исторические исключения.

Legioner ★★★★★
()

Всё, что связано с биндингами, по определению геморройно в той или иной степени. Поэтому если язык выбирается по принципу понтовости и за неё приходится расплачиваться дополнительными усилиями по "сращиванию" программы с внешним миром, то лучше выбрать более подходящий инструмент. Большинство языков имеют свои узкие ниши использования и малоприменимы для решения других задач. Ещё есть студенческо-академические поделки.

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

>Вы мне лучше скажите, как правильно - "Митцубиси" или "Митцубиши"?

На русский правильно транслитерировать первым вариантом.

Также, кстати, как Фудзи, а не Фуджи :D

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

> На русский правильно транслитерировать первым вариантом.

А вот и неправильно. Не Митцубиси, а Мицубиси.

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

>Не Митцубиси

Я букву «т» там не разглядел. Да, без неё.

KRoN73 ★★★★★
()

> Но не сейчас - не раньше, чем заморозят API и напишут нормальную документацию. А это произойдёт не раньше сентября.

Ну, это разумеется. Как-то странно требовать документацию и стабильное API от продукта, который ещё в разработке.

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

>это ты диллеру официальному скажи )

Они сами с собой не дружат в пределах двух предложений :D

=== cut ===

Сеть автосалонов Автомир приветствует вас на сайте, посвященном автомобилям Mitsubishi (Мицубиси). Вы можете приобрести следующие модели Mitsubishi (Мицубиши) ...

=== cut ===

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

> по-нашему они всегда были биндингами )

Не знаю, как по-вашему, а по русски они называются привязки.

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

>>транскрибция

Сам догадаешься куда тебе идти или как?

//captcha: bitred

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

> по-нашему они всегда были биндингами )

Вот сам и отправляйся к логопеду. Рунглиш надо ДАВИТЬ.

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