О Замечательном(ой) Vala, Nim, или «Моё стадное чувство негодует»
NIM — новый нативный язык, с большими возможностями. Он уже имеет много библиотек. итд.
Но мне ещё больше нравится Vala — смесь Java, C#, и еще каких-то языков, НО он компилируется в С и в обычный «exe — шник». Очень интересные возможности (о них ниже).
Но в трендах эти языки не сильно популярны, рост есть, стабильный, ОДНАКО.
Я хочу рассмотреть то, что мне нравится в этих инструментах.
NIm
О Nim писали на хабре
https://habrahabr.ru/post/258119/ — Что такого особенного в Nim?
http://habrahabr.ru/post/259993/ — Сравниваем Nim и Rust
Что я могу сказать ? «Зря они переборщили с этими … очень разноперый, слишком гибко — для фатазёров в самый раз, но прелюбопытно…»
Я попробовал и мне понравилось, что центральный loop и асинхронщина стандартизована, часть входит в стандартную библиотеку — очень хорошо. Но это фигня воообщет, сщас много где так, в питоне например новый стандарт.
Не понравилось, что сыровато. С IDE не понятно что.
Инструмент этот для системщиков, а они чутьём сырое чувствуют и не используют, ждут. И синтаксис странный у него.
vala
Статьи:
- https://habrahabr.ru/post/99885/ — Что такое Vala
- https://habrahabr.ru/post/221367/ — Портирование Netsukuku на Vala завершено.
C Vala я побольше пообщался. Ну прелесть ведь, смотрите.
Здесь важно понимать, что Этот «как C#» транслируется в (даже понятный человеку) С, который не сильно перегружен чепухой.
- Приведение типов,
- вывод типов,
- ООП в полный рост,
- статическая типизация,
- полиморфизм,
- куча операторов,
- делегаты,
- лямбда функции,
- замыкания,
- неймспейсы,
- структуры,
- классы,
- СИГНАЛЫ (как в QT),
- гетеры сетеры для свойств,
- Observe для свойств,
- дженерики,
- асинхронные методы и main loop,
- синтаксический сахар типа метаметодов
Вот возможности из коробки !!!
Оказалось, что библиотек завались. А на github еще больше.
В чем причина относительной популярности и столь быстрого старта, спросил я себя ?
Оказалось, что очень просто, это glib. GLib — это такая «С» либа, основа всего GNOME.
В QT мне нравился moc (meta object compiler) за то, что генерирует к QT классам парный класс — матакласс, и , что важно, это в С++ даёт мне автоматически интроспекцию и ценнные и гибкие сигналы слоты, сделанные лучше чем в иных местах (т.к. всегда можно понять откуда пришел сигнал в обработчик и это упрощает работу с проектами).
В GLib есть «C» функции, которые позволяют задавать структуру ООП объектов и их отношений так, что интроспеция тоже возможна и QT даже слабее кажется на фоне, но надо уметь этим пользоваться… Поэтому QT moc лучше в этом плане — там всё автоматом.
Но в Vala сделали ещё лучше чем moc — сделали целый язык поверх этого, не плохой, мощный.
Т.к. для Glib в GNOME уже полно всего написанного руками эффективно и привязано и написано — то всё это гигантское хозяйство начнёт работать и в VALA. Придуманы специальные Vapi файлы которые позволяют уже любую готовую либу на GLib привязать к Vala языку иначать использовать.
- биндинги https://wiki.gnome.org/Projects/Vala/Bindings
- пишем биндинг для сразу любых скриптов на Vala https://github.com/antono/vala-object
- пишем vapi руками для Legacy https://wiki.gnome.org/Projects/Vala/LegacyBindings
- чем Vala интерфейсы лучше https://blogs.gnome.org/jnelson/2011/11/01/a-few-of-my-favorite-vala-things-interface/
По IDE вопросу. Есть некоторые ответы на тостере — не хрена не тот уровень что хочется.
Чтобы получить IDE надо брать самую-самую свежатину и собирать самому. В Итоге получишь так себе фиговину, на оценку 3-4 где-то. Есть варианты, но у каждого недостатки… Кому-то и блокнота хватает, я же Tomato assist люблю и resharper для таких языков … Сейчас я собрал себе самый свежий geany со всеми плагинами и встроенным отладчиком — по моему лучший из вариантов.
В конце приведу чужой бенчмарк:
https://jpaflacerda.wordpress.com/2011/11/08/vala-benchmarking/
Негодую т.к. странно… такая вещь хорошая а популярность маловата. Я буду ждать и может что-то напишу для души на нём.
Михаил Павлов
23.01.2016 в 00:44пост в G+ https://plus.google.com/111565911903845389442/posts/hgAn27QgQ2t
Михаил
27.12.2019 в 16:25https://forum.nim-lang.org/t/4758