Какие технологии выбрать для создания кроссплатформенного файлового менеджера?
Здравствуйте. Знаю, что собираюсь писать велосипед, но суть вопроса ведь не в этом, правда? Вопрос состоит именно в выборе технологии. Принимаются любые предложения, если они обоснованы. Расскажу про свой довольно поверхностный ход мыслей.
Думая о кроссплатформенности, первым делом я решил использовать Java и JavaFX. Почитал туториалы, накидал главное окно в SceneBuilder, запустил. Первое, что бросается в глаза: медленный запуск. Что поделать, за кроссплатформенность приходится платить. Из плюсов: высокоуровневый язык программирования, относительно минимальное количество кода, ясный MVC, благодаря которому сложно будет написать что-то неправильное, стилизация с помощью CSS. Из минусов: скорость, а в файловом менеджере она важна, необходимость предварительной установки JRE или же таскать с приложением целый рантайм.
Но ведь можно попробовать уклониться от уплаты? Ясно, что можно попробовать что-то кроссплатформенное на уровне компиляции. Выбор пал на Qt. Опять же почитал туториалы, разобрался с сигналами, слотами, накидал форму в QtDesigner, запустил. Плюсы: скорость работы, относительно понятный принцип деплоя на основные платформы. Минусы: не совсем понятный с ходу MVC, с таким подходом можно запросто выделить каждой форме по одному классу и не париться с архитектурой, что ни к чему хорошему не приведёт, отсутствие исключений. Не знаю, стоит ли относить сам С++ к минусам, но для меня важна скорость разработки, а на нём она будет явно меньше, чем на Java. Также я видел что-то про Qt Quick и QML, попробовал что-то накидать, запустил, но заметил какие-то лаги при изменении размера окна, как на JavaFX. Думаю, это плохой знак. Если кто-то может рассказать подробнее, буду только рад.
Когда читал про Qt, заметил, что его часто сравнивают с WPF. Сам я им не пользовался, но говорят, что WPF гораздо мощнее, чем Qt. Если не ошибаюсь, то это совсем не кроссплатформенное решение, даже в Mono его не смогли портировать из-за множества низкоуровневых вещей. Опять же, если можете рассказать про WPF что-то еще, я буду благодарен.
Что касается меня, то я больше склоняюсь к Qt, так как скорость работы всё же важнее скорости разработки, к тому же можно довольно просто получить рабочие бинарники относительно малого размера.
За JavaFX говорить не буду, вроде штука развивается, возможно наконец будет нормальная джава для десктопа; сравнивать не могу, не пользовался
Также я видел что-то про Qt Quick и QML
пожалуй это и стоит рассматривать для новых проектов.
Сам я им не пользовался, но говорят, что WPF гораздо мощнее, чем Qt
Раньше, когда появился - да, был значительно мощнее (до появления QML). Вообще был наверное самой продвинутой технологией для десктопа. Но уже 2015-й год, Qt Quick 2 и все такое, так что Qt и WPF уже вполне сравнимы.
Если не ошибаюсь, то это совсем не кроссплатформенное решение
Да, к сожалению. Поэтому вам резонно вернуться к рассмотрению Qt.
рассказать про WPF что-то еще, я буду благодарен.
дотнетовская технология, появилась в .net 3.0, использует direct3d для отрисовки, windows-only. Если нужны еще подробности - пишите в комментарии.
то я больше склоняюсь к Qt, так как скорость работы всё же важнее скорости разработки
хороший выбор для кроссплатформенного файлового менеджера, только замечу, что вы выбираете вы достаточно смело - в 95% случаев люди ищут либу к знакомому языку/платформе, т.к. обычно именно язык новый язык изучить не могут/не хотят. Если вы уверены, что C++ вы тянете, то тогда без вариантов - Qt.
Спасибо за такой развернутый ответ. Но что вы можете сказать про тормоза QtQuick? Если даже создать пустые проекты в Qt Creator для QtWidgets и QtQuick, запустить их и попробовать поресайзить, то можно сразу заметить какие-то рывки, чего не скажешь о проекте на QtWidgets, где всё работает как нельзя плавно.
aminought все-таки советую вам убедиться в отсутствии проблем с драйверами, попробуйте запустить ваше приложение на другой машине.
S. KLS забавно, но я слышал что некоторые уже не рекомендуют QtWidgets для новых проектов, т.к. они будет объявлены deprecated относительно скоро) вот уже и не знаю, что посоветовать..
Станислав Макаров вот это вряд ли. Qt на этих QtWidgets и держится. Если их депрекейтнут -- проекту Qt будет весьма неудобно соперничать с тем же GTK+, он просто погибнет.
С момента выхода QtQuick прошла огромная куча времени. Можете ли вы назвать какие-либо крупные десктопные приложения на этой технологии? Я вот не представляю как написать на QtQuick, к примеру, такой вот интерфейс: https://www.hex-rays.com/products/ida/pix/idalarge.gif
S. KLS значит это всего лишь слухи, спасибо за ссылку, вполне себе свежая)
Я то пока и сам не представляю, как наш проект сделать на Quick вместо виджетов, ситуация примерно та же, как на приведенной вами картинке) Правда я воообще не могу вспомнить за последнее время крупных десктопных приложений. Если что и появилось - так это поделки на electron-е, удивительно, как они еще приемлемо работают). Надеюсь через 5 лет мы не придем к тому, что в папке каждой десктопной программы будет лежать libcef или аналог
Первые версии клиента Dropbox были написаны на Python. Возможно Вам тоже подойдет, имеется много библиотек по написанию графического интерфейса, в том числе биндинги к Qt.
Будет гораздо более прост в переносе, чем любые другие связки технологий и языков. Если QML не нравится можете попробовать sfmt https://github.com/Jebbs/DSFML
Я на оборот с изучения Qt перешёл на java.
Ну во первых с Qt придётся таскать ворох библиотек, которые сожрут много места (для меня критично).
Во вторых я не уверен, что без гемора удастся сделать что-то кросплатформенное (это лично моё, т.к. хотел запилить на android и iOS, но не знаю ни одной из этих платформ и неимением мака под рукой, думаю при попытке позднее перенести на iOS, я бы прострелил себе обе ноги. В итоге выбрал Java, ели проект поедет, уж на swift я перепишу код, имея под рукой рабочее приложение на java
Neonoviiwolf: железная логика. Я вот тоже знаю что таскать в Qt. Java так-то весит уж точно не меньше. Я по работе поддерживаю приложение Android/iOS на QML, портирование прошло очень легко.
Если нужна безболезненная кросплатформенность, то JavaFX. Полгода пишу на ней проект, очень приятная вещь )
До этого писал на swing (после него, как глоток свежего воздуха) и чуть-чуть на qt, на java скорость разработки заметно выше.