Как стать автором
Обновить

Комментарии 51

Написал бы кто под Go среду RAD типа Delphi/Lazarus. Взлетело бы даже в разумно платном виде. Закладываться сейчас на паскаль выглядит как-то не очень перспективно. Продукты Эмбаркадеро достаточно дорогостоящие.

Сами же привели в пример Lazarus. Хотя у Embarcadero есть бесплатная редакция для любителей.
Но вопрос о кросплаторменном GUI фреймворке с приятным внешним видом и для приятного языка будет открытым ещё очень долго.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
С Go привык, что скачиваю один бинарник под свою OS, а тут нужен отдельный gui сервер, который имеет дополнительные библиотеки.
Какие дополнительные библиотеки?
Gtk. Что собственно рождает проблему, т.к. на разных дистрибутивах разная версия Gtk, glib и libc.
Это для Линукс. В Windows GTK я не использую. Проблема, конечно, с зоопарком дистрибутивов есть, но многие в этом плане все же совместимы. Поэтому я и выкладываю готовые бинарники для двух дистрибутивов — Debian 8 32-bit и Ubuntu 18.04 64-bit. Могу и для Федор.

Т.е. Вы заменили compile-time зависимость от C-шной GUI-библиотеки на run-time зависимость от внешнего бинарника? Зачем? Если для фана, то это здорово, а если ради того, чтобы сохранить возможность устанавливать Go-шное GUI-приложение через go get — это перебор.

Возможность устанавливать приложение через go get — всего лишь бонус. А внешний бинарник я использую, поскольку это оказалось гораздо быстрее и проще, чем писать биндинги для С-шной библиотеки, которую, кстати, тоже еще надо написать.

По факту и биндинги и библиотеку Вы в любом случае написали, отличается только форма — библиотека в виде бинарника, биндинги в виде сетевого протокола. Не уверен, что работы при таком подходе было объективно меньше.

Библиотека написана не на чистом С и не для С, а для Harbour и, частично, на Harbour. Привязать это дело к Go, как библиотеку? Можно, наверное, но будут заморочки. Даже не думал на эту тему.
Шаг влево, вправо и нужно идти учить Harbour, что бы добавить свой контрол?
Для того, чтобы добавить свой контрол и чтоб он был кросс-платформенным, надо еще учить C, Winapi, GTK, Cairo. Harbour здесь — совсем не самая большая проблема.
О, спасибо.

Не так давно искал на чем сделать простой GUI индикатор в таск-панель на Linux… ничего универсального не нашел пришлось выпиливать GTK и QT варианты.

Но как я понял через External индикатор не сделать?.. или я не прав?
Честно говоря, я не знаю, как делать что-то в таск-панель для Линукс. Это ведь зависит от конкретной графической оболочки?
Ну в GTK и GT есть апликейшн индикаторы — вот через них и рисуется иконка + меню в панель.
Очень классная инициатива, с GUI в го и правда беда.
Меня немножко смутил скриншот с Win10. Почему везде шрифт с засечками, даже на панели? О_о
Ну нравится мне Georgia). Можно другой поставить, в ETutor это делается в ini-файле.
Определенное неудобство связано именно с необходимостью использования этого внешнего модуля, который вам надо или собрать из исходников

Определенное неудобство? Это не просто неудобство, а велосипедостроение, причем с квадратными колесами.


Статическую линковку (всего, да, вместе с сервером [ edited ]) в один бинарник сделать будет проблематично. Все привыкли, когда приложение на Go — один бинарник, в который уже положены все зависимости.


Зачем нужен Go, когда фактически GUI рисуется совсем не им?

> Зачем нужен Go, когда фактически GUI рисуется совсем не им?

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

Микросервисы и CLI?

Почему-то мне кажется, что биндинги к ненативному Qt будут отрабатывать быстрее, чем вызовы к GUI-серверу, который отрисовывает всё "нативно" через WinAPI / GTK+.


( GTK+ 2 в 2018, серьезно?)

> биндинги к ненативному Qt будут отрабатывать быстрее

Безусловно. Но в большинстве случаев вы этого не заметите.

Тогда для чего же та самая "нативность" в отображении, если не ради скорости?

Единообразие внешнего вида. Что бы приложение внешне не отличалось от других приложений в системе, а изменения текущей темы так же применялось и на твоё приложение.
В первую очередь — для того, чтобы приложение выглядело естественно для той среды, в которой оно выполняется.
Ну когда же появится нативный GUI пакет для Go, где не надо будет ничего отдельно компилировать или скачивать… просто «go get» и полетели.
Есть вот такой LXN WALK
Но он для винды. И как-то туговато шло когда надо что-то за пределами имеющихся примеров использования.
На деле это привело, наоборот, к упрощению самого пакета. Кроме того, как я писал в предыдущей статье, тот же самый GuiServer может быть основой GUI фреймворков и для других языков. Не забываем и про возможность удаленного выполнения — когда GuiServer выполняется на другом компьютере в сети.
Что касается ui — я ведь писал об этом, он находится по оценке авторов еще в статусе mid-alpha.
Что касается ui — я ведь писал об этом, он находится по оценке авторов еще в статусе mid-alpha.

А ваш пакет уже готов к использованию в продакшен?

HwGui, на которой основан GuiServer, уже давно в production. У External возраст чуть больше месяца, о production можно будет говорить, когда на нем напишется что-нибудь серьезное.

То есть вас не устаивает ui, потому что он mid-alpha, но вы пишете своё, которое в состоянии pre-alpha и вас это не смущает?

Дело в том, что в состоянии mid-alpha находится и libui, на которой основывается ui, там не хватает многих важных вещей, как, например, tree, printing, clipboard support — и это только то, что вспомнили авторы.
В External, хотя ему, напомню опять, чуть больше месяца, это и много чего еще есть — потому что давно есть в HwGui.

В Qt это тоже есть, так-то, и, возможно, даже "давнее", чем в HwGui.

Не сомневаюсь, но вы ведь не о qt писали, а об ui.
А к qt у меня другие претензии, и они тоже изложены в тексте.

И только к HwGUI нет претензий. Не вы ли его написали?

Я. Потому и выбрал, что все возможные претензии могу решить сам.

Теперь все втсало на свои места, спасибо!

Теоретически GuiServer можно собрать под MacOS — Harbour под ним собирается, GTK там есть.
Но у меня нет под рукой ни одного компьютера с MacOS, поэтому я не могу собрать его сам.
В принципе, если очень надо, могу попросить об этом кого-нибудь из Harbour-сообщества.

Hello word не работаает на macOS Mojave (10.14.1)

У вас есть GuiServer под MacOS?

Билд проходит успешно, екзешник запускается без ошибок. Вот только окно не открывается...

Екзешник — в смысле guiserver? Появился egui.log?
Можно еще задать журналирование для GuiServer'а в вызове Init:
egui.Init(«log=2») — тогда должны появиться guiserver.log и ac.log.

да:


go build hello_world.go
./hello_world
echo $?
0

cat egui.log
guiserver 127.0.0.1 3101
dial tcp4 127.0.0.1:3101: connect: connection refused
Эти строчки говорят о том, что программа осуществила попытку запустить guiserver, но не смогла присоединиться к нему — скорее всего, из-за того, что он не был запущен.
Где у вас находится guiserver? В каталоге, который прописан в PATH (или где-то вроде этого, я не знаю, как это в macOS)?
Или в том же каталоге, где и программа? Если так, то не надо ли в macOS запускать исполняемые файлы из текущего каталога, как и в Линуксе, с указанием "./"? В этом случае надо в вызове egui.Init так и прописать:
egui.Init(«guiserver=./guiserver»)
== Я ориентировался вот на этот список.

Этот список устарел. Например, в нём нет вполне себе рабочего биндинга к imgui, которую Вы так же не упомянули в своём обзоре.
Соглашусь с коллегами, использование IPC связки с сервером GUI в рантайме вместо привычных и более быстрых механизмов FFI для задачи создания GUI выглядит несколько странно
> Этот список устарел.
Может быть, другого у меня нет. Imgui не упомянул, потому что не слышал о ней.

> использование IPC связки с сервером GUI в рантайме вместо привычных и более быстрых механизмов FFI для задачи создания GUI выглядит несколько странно

Да, это необычно. Но такой подход имеет и свои преимущества, об этом я писал в обеих статьях и комментариях к ним. А скорость, об этом я тоже писал, не самый критичный фактор для интерфейса. Мы же не создаем виджеты в цикле с 10000… итераций.
Если проект ещё жив и между клиентом и сервером используется только одно соединение — тогда как вам вариант:
go-программа запускает бинарник сервера из той же папки (или из PATH если в той же папке нужного бинарника нет), а дальше взаимодействие идёт через стандартный ввод/вывод.

Это поможет избежать проблем с локальными Firewall-ами + можно будет легко понимать что гуи-сервер запущен/остановлен (и например тоже сваливаться).

+ Упрощается настройка: достаточно будет скачать один архив (с двумя бинарниками) и распаковать, доп. настройки опять же не надо, не надо отдельно сервер в PATH складывать и т.п.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории