LINUX.ORG.RU

Qt приложение с ядром на другом языке

 , , ,


1

6

На плюсах писать боль - хочется что-то более человеческое. Но приложение будет GUI, а значит Qt. Тут обсуждать нечего.

Нужно, каким-то образом, наладить общение между двумя языками в пределах одного ПК. Допустим с Rust.

Пробовал FFI (при использовании языка с GC - отпадает) - боль. Ибо получается жирная(много boilerplate кода) прослойка вида: rust -> c-api -> mylib.h -> С++ враппер. Также теряются все гарантии языка.

Ну и конвертации типов тоже не бесплатны. Напоминаю, что QString - UTF-16.

RPC, любой, - тоже затратно. Ибо сериализация/десериализация может быть затратной. А данных довольно много.

Пример: есть база с кучей записей. Нужно отобразить их в проге. Ну пусть тысячу строк. Передавать их через RPC - бред. Слишком медленно. Намного быстрее из Qt подключится к базе и забрать нужные данные. Но тогда пропадает смысл в «ядре» на другом языке.

То есть Qt будет использоваться чисто как GUI. Вся логика будет «ядре». Проблема в передачи больших объемов данных.

Как решить данную задачу? Уверен, что кто-то с таким сталкивался.

★★★★★

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

Тем временем QtWidgets совсем захворал.

В каком месте? Старые баги никуда ни делись, так и сидят на месте, новых вроде тоже не завозили. Стабильно все.

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

а для GUI взял бы чего полегче, ту же GTK, например

Чем легче? Тем что не работает нигде кроме линя?

Ты современные версии GIMP для Windows видел? Всё там работает. Лет 10 назад были проблемы, согласен.

С GTK другая морока - именно необходимость скручивания изолентой, если от программы тебе надо хоть-что-то, кроме GUI. Причём скручивать придётся именно на тех платформах, задерживаться на которых меньше всего хотелось бы, в линуксе-то проще всего. Но я думаю, с прикручиванием Qt к ядру на расте этой мороки будет в разы больше.

В Qt нормальные только QtCore (из-за унылой c++ str), QtGui и QtWidgets. Всё остальное - мусор.

Да? QtSql, позволяющий добиться потрясающей переносимости между разными СУБД - это мусор? QtXml - мусор? Сейчас ещё Qt3D в штатную поставку включили, но я его пока не тыкал.

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

Только apple не перестаёт ломать совместимость с каждым релизом, из-за чего Qt на маке выглядит всё хуже и хуже. Даже я пару багов отправил по поводу отрисовки.

В общем сейчас Qt на маке выглядит ну очень плохо. От кривых лайоутов до артефактов.

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

Ты современные версии GIMP для Windows видел?

Да. Выглядит как инопланетный ужас. Про мак вообще молчу.

QtSql, позволяющий добиться потрясающей переносимости между разными СУБД - это мусор?

Да, потому, что обработки ошибок нету. Яркий пример QSqlQuery::value(int). Всё что он делает - это пишет варнинг в stderr. Очень удобно.

QtXml - мусор?

Да. xml:space не умеет.

Сейчас ещё Qt3D в штатную поставку включили, но я его пока не тыкал.

Ненужно.

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

Я что, наркоман? Я на оборот пытаюсь на уровень выше уйти.

Кстати, а почему в таком случае именно rust? Я бы, пожалуй, в сторону D копнул, например.

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

Как раз в строну D и копаю. Просто rust я знаю, а D - нет.

Ищу альтернативу rust, но с GC, но пока ничего кроме D не нашёл, увы. А у него дела ещё хуже, чем у rust.

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

А чем именно хуже? Ну кроме маркетинговых аргументов вроде количества проектов на гитхабе, вакансий и др. Я пока глядел как мимокрокодил - но как-то D более симпатичен, возможно, это обманчивое впечатление...

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

Так он никогда хорошо не выглядел. А кто не заднеприводный, того и вайршарком с гимпом не напугаешь

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

Либ нету. Путаница с компиляторами/std. Выгляди симпатичнее rust, из-за GC, но сообщества нету.

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

Ну вот меня наниматель пилит за то, что прога хреново выглядит. А там тупо артефакты отрисовки. Не мелкие баги, а именно артефакты.

Раньше было лучше.

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

Ага, кроме мобилок. И кроме старых версий браузеров. И кроме пользователей с плохим/отсутствующим инетом.

Не забудь еще про юзверей доса и ядерной консоли с koi8. Твою кутью эти граждане боюсь не оценят.

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

В общем сейчас Qt на маке выглядит ну очень плохо. От кривых лайоутов до артефактов.

Такая то кроссплатформа. На линуксе оно тоже не айс, если не обмазываться кодое.

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

На кой хрен они нужны в тарболе или в зипе? :-)

Спросите у того, кто запаковывает. Так-то достаточно просто ссылки на гит.

Distribution via Apple AppStore

Яблочников проблемки. Кто там ещё с LGPL не дружит?

Заход на гитхаб отменит условия лицензирования Qt что-ли?

ну да, идёшь и скачиваешь одну из готовых либ под какой хочешь лицензией

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

Спросите у того, кто запаковывает.
Яблочников проблемки.
идёшь и скачиваешь одну из готовых либ под какой хочешь лицензией

Ну вот я об этом :-) Если денег на коммерческий Qt нет, то это личные проблемы :-) А так то никто ведь не мешает писать с помощью Qt софт для локалхоста и хлопать в ладошки от радости :-) Лол :-)

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

софт для локалхоста

KDE например, или полгуя линукса

Если денег на коммерческий Qt нет, то это личные проблемы

если коммерческая организация настолько нищая, что у неё нет денег на коммерческий qt, то это её проблемы, да

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

KDE например

KDE может позволить себе распространяться под какой угодно лицензией :-) Это бесплатный софт, с большой историей, существующий на пожертвования, либо финансирующийся извне :-) Так что ставить KDE в пример в данном случае - это всё равно что кичиться, что «цепепе - самый лучший язык, потому что на нём браузер написан» :-) Только кичливые по данному поводу вряд ли имеют отношение к написанию браузера, который на цепепе :-)

или полгуя линукса

Да ладно :-) Этого не может быть :-) Потому что больше чем полгуя на GTK :-)

если коммерческая организация настолько нищая, что у неё нет денег на коммерческий qt, то это её проблемы, да

Это да :-) Подумаешь, какие-то $295 в месяц на одного разработчика :-) Сущие мелочи :-) Только нищая коммерческая организация не сможет себе такого позволить :-) Остальные все покупают :-) Лол :-)

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

Это бесплатный софт

нет, это прежде всего свободный софт и для меня только он и важен

Только нищая коммерческая организация не сможет себе такого позволить

и почему же мне и, в целом, местной публике должны быть интересны её проблемы?

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

нет, это прежде всего свободный софт и для меня только он и важен

А что такое свободный софт? :-) Это когда можно тешиться теоретической возможностью порыться в исходниках общим объёмом в полгигабайта, ничего там толком не понять, а потому собирать на локалхосте то, что скачано в оригинале? :-) И это прям так важно? :-) Лол :-)

и почему же мне и, в целом, местной публике должны быть интересны её проблемы?

Я же говорю, сущие мелочи эти $295/месяц :-)

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

мелочи-не мелочи, но на вопрос вы так и не ответили

А что такое свободный софт? :-) Это когда можно тешиться теоретической возможностью порыться в исходниках общим объёмом в полгигабайта, ничего там толком не понять, а потому собирать на локалхосте то, что скачано в оригинале? :-) И это прям так важно?

вам сюда https://www.gnu.org/philosophy/philosophy.html

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

вам сюда https://www.gnu.org/philosophy/philosophy.html

Выражение “свободная программа” означает, что у ее пользователей есть свобода.

Лол :-) Мало ли что там нафантазировал Столлман :-) Ну и какая свобода у пользователей Qt под LGPL? :-) Хочу свободы - не хочу показывать исходники распространяемой программы :-) Моя интеллектуальная собственность :-) Не хрен там изучать кому-что что-то :-) Могу? :-) Нет, не могу :-) Какая это свобода тогда? :-) А нет свободы :-) Есть условия использования :-) Хочешь «свободы» - покупай коммерческую лицензию :-) Так что не в те уши ты льёшь эту твою философию свободы ГНУ :-) Лол :-)

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

Так что не в те уши ты льёшь эту твою философию свободы

Ну раз уж вы сами признались, метать бисер перед вами более не стану. До свидания.

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

Ну раз уж вы сами признались, метать бисер перед вами более не стану. До свидания.

Быстро ты слился со своей свободой :-) Одно дело ретранслировать чужую ахинею, а другое дело вести дискуссию, защищая свою собственную точку зрения :-) В следующий раз, если не готов к дискуссии, не встревай в чужой разговор :-) А то как-то по-ламерски получается :-) Лол :-)

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

Взаимодействие языков достаточно просто

«Довольно просто» с целым рядом уточнений и сносок. И с дополнительными накладными расходами. В рамках одного языка всех этих сложностей нет.

Но в общем нет ничего плохого в том что тебе предлагают язык лучше текущего.

Так в том и дело, что редко всё бывает так просто.

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

Да, потому, что обработки ошибок нету. Яркий пример QSqlQuery::value(int). Всё что он делает - это пишет варнинг в stderr. Очень удобно.

Если произошла ошибка то возвращается невалидный QVariant. Разве этого недостаточно?

Да. xml:space не умеет.

Почти не имел дел с xml, можешь привести маленький пример? Что-то мне кажется это также решается на Qt.

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

Во-вторых, если программа подлежит распространению, нужно поставлять все исходники Qt вместе с ней

Предоставлять можно по запросу. И ссылки будет достаточно, не обязательно высылать тарболы.

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

В третьих, не все App Store совместимы с LGPL

В каком смысле не совместимы? Туда нельзя заливать софт под LGPL? Да вроде как можно: https://forums.developer.apple.com/thread/27709

Или пользователь не может подменять версию библиотеки? Ну так это AppStore не даёт полностью реализовать условия LGPL, а не разработчик.

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

Если произошла ошибка то возвращается невалидный QVariant.

Разве там есть разница между невалидным и Null? То есть как мне понять, что я пытаюсь забрать ячейку, которой нет?

Что-то мне кажется это также решается на Qt.

QtXml довольно примитивный в целом. xml:space просто пример. Может и работает уже.

Пример:

<root>
    <item>  text  </item>
    <item xml:space="preserve">  text  </item>
</root>

Должно получится:

"text"
"  text  "

RazrFalcon ★★★★★
() автор топика
Последнее исправление: RazrFalcon (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Разве там есть разница между невалидным и Null? То есть как мне понять, что я пытаюсь забрать ячейку, которой нет?

Да, сперва надо проверить на то, что значение валидно:

bool QVariant::isValid() const
Returns true if the storage type of this variant is not QMetaType::UnknownType; otherwise returns false.
Затем Null ли это или нет:
bool QVariant::isNull() const
Returns true if this is a null variant, false otherwise. A variant is considered null if it contains a default constructed value or a built-in type instance that has an isNull method, in which case the result would be the same as calling isNull on the wrapped object.

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

Да, если проверять оба - то работает. Пригодится.

RazrFalcon ★★★★★
() автор топика
30 января 2018 г.
Ответ на: комментарий от RazrFalcon

В общем сейчас Qt на маке выглядит ну очень плохо. От кривых лайоутов до артефактов

Таки это зависит от версии макоси, а не Qt?

// Вопрос вызван тем, что я озадачился, на какой версии Qt лучше собирать под мак. Сейчас там стоит Qt старенький 5.5.1, макось El Capitan.

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

Ну так родные приложения выглядят нормально. Только в Qt баги.

На 5.9.3 все баги в наличии. 5.10 не проверял ещё.

Версия мака роли не играет, так как все сидят на распоследней.

RazrFalcon ★★★★★
() автор топика
2 марта 2018 г.
Ответ на: комментарий от RazrFalcon

Я тестил JSON-RPC. Тормоза были космические.

И я тестил JSON-RPC. Спокойно хавал 5000 реквестов в секунду, и это на обычном питоне + gevent.

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