Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В этой статье я расскажу вам о некоторых самых популярных фреймворках, которые помогут вам при разработке программ для компьютеров под управлением Windows/MacOS/Linux. Если вы опытный программист, то вряд ли найдете в этой статье что-то новое для себя. Она скорее для новичков, которые ищут простое решение своей проблемы — быстрое написание хорошей (на сколько это возможно) кроссплатформенной программы.
Что такое кроссплатформенная разработка?
Что вообще из себя представляет кроссплатформенная разработка? Если вам нужно, что бы ваше приложение работало сразу на нескольких операционных системах с минимальными затратами человеко ресурса, то скорее всего вы прибегнете именно к этому. Вы разрабатываете одну программу, пишете один код, а он запускается на всех поддерживаемых платформах. Удобно! Но стоит различать кроссплатформенность и нативность.
Если вкратце, то кроссплатформенность — это способность программного обеспечения работать с несколькими аппаратными платформами или операционными системами. Нативные программы в свою очередь пишутся для работы на определенной аппаратной или программной платформе. Из этого можно сделать вывод: если ваша программа будет работать с железом, то скорее всего даже в кроссплатформенной программе вам придется прописывать нативный функционал для конкретной платформы.
В чем же преимущество кроссплатформенной разработки? Во-первых, вам нужно задействовать меньше людей (не нужно содержать DotNet разработчика, Swift/objective C разработчика и всех к ним прилагающихся), во вторых вы охватываете большее количество устройств -> больше людей смогут пользоваться вашей программой.
Также подобный принцип не лишен недостатков — плохая нативность, оптимизация тоже будет хуже, чем у такой же программы написанной под конкретную платформу. Но иногда бывает такое, что вам очень нужно, что бы ваше приложение поддерживало несколько платформ, но разрабатывать под каждую возможности нет. Тогда на помощь приходят уже созданные Фреймворки и технологии для разработки кроссплатформенных GUI. Вот некоторые из них:
1. Electron JS
Недавно я написал статью о том, как на Electron JS написать "Hello World". В комментариях поднялась дискуссия о "за и против" этой технологии. До сих пор очень многие разработчики ведут споры относительно того, стоит ли использовать Electron в своих проектах или нет. Electron JS — это JavaScript фреймворк, позволяющий вам написать полноценную программу используя Web Технологии — HTML & CSS, JS. Electron JS представляет собой движок Chromium в котором и исполняется весь ваш код. У Electron'a есть один, но достаточно серьезный недостаток — большое потребление памяти, как физической, так и оперативной. Всем давно известно, какой прожорливый Chrome, а мы на него еще своего кода хотим навесить. Но если посмотреть с другой стороны: сегодня многие популярные приложения написаны на Electron'e — Slack, Skype, Discord, VSCode, Atom, Postman, Insomnia и т.д. А с учетом непрекращающегося роста мощности компьютеров все реже приходится слышать от пользователей, что «ваш хром съел всю мою память». Высокое потребление памяти не будет играть большой роли если продукт будет хорош в своей сфере, будет грамотно написан код и распределены процессы
Официальный сайт
Плюсы
Использование наработок из Web
Просто найти (или "воспитать") специалиста
Качественная (и русифицированная) документация
Поддержка сообщества и GitHub
Минусы
Высокое потребление памяти (физическая и ОЗУ)
Легко написать плохой код
Плохая нативность
2. Qt/QML
Qt — очень мощный набор инструментов для создания кроссплатформенных приложений на языке С++ и Python (а также Ruby, PHP, C# и др. но они в отличии поддерживаются сообществом). Qt уже достаточно старый фреймворк, но он продолжает активно развиваться и на нем написаны такие программы как: 2ГИС для Android, Kaspersky Internet Security, Virtual Box, Skype, VLC Media Player, Opera и другие. Известное многим линукс-юзерам окружение рабочего стола KDE тоже написанной с использованием Qt. Qt имеет среду разработки — Qt Creator, которая включает в себя Qt Designer с помощью которого можно создавать графический интерфейс. Визуальное создание интерфейса позволяет легко и просто создавать интерфейс, перетаскивая различные виджеты (выпадающие списки, кнопки, переключатели) на форму. Qt имеет обширную документацию, активную поддержку сообщества и множество других преимуществ.
Официальный сайт
Плюсы
Визуальный редактор интерфейса
Огромное количество модулей в составе фреймворка
Поддержка большого количества языков программирования (официально только Python и C++, остальные поддерживаются сообществом) -> хорошая нативность при грамотном коде
Низкий порог вхождения
Минусы
Большой вес приложения
Иногда возникают проблемы с компиляцией под windows
3. Avalonia
Достаточно молодой и активно развивающийся фреймворк для кроссплатформенной разработки, разработанный и поддерживаемый компанией Microsoft и сообществом. Avalonia позволяет создавать интерфейсы на основе XAML. Сама Avalonia основана на WPF/UWP. Код пишется на языке C#. Благодаря XAML Avalonia позволяет создавать гибкие и стилизованные интерфейсы. Имеет хорошую документацию, хоть и не большое, но очень приветливое рускоязычное сообщество.
Официальный сайт
Плюсы
Хорошая нативность (+поддержка системных декораций)
Активное и приветливое сообщество, как русскоязычное, так и англоязычное (чаты, форумы)
Заимствование и сходство с WPF (Если вы работали с WPF вам будет легко разобраться с Авалонией, и при возникновении трудностей, код написанный для WPF скорее всего заработает у вас на авалонии)
Стили (стили в Авалонии имеют сходство с CSS, что упрощает написание этих самых стилей)
Минусы
Маленькое сообщество (хоть и приветливое, но в силу молодости проекта, еще очень немногочисленное сообщество разработчиков)
Маленькое количество проектов (вы можете застрять с тем, что никто не решал такую задачу, которая встала перед вами)
Итог
В этой статье я рассказал далеко не о всех фреймворках (как минимум NW.JS, GTK+, TK/Kivy для Python, и многие другие), но о самых популярных, активно поддерживаемых и подходящих для абсолютно разных проектов и задач. Призываю вас в комментариях рассказать о своем опыте работы с различными фреймворками (но только с теми, что есть в статье), о том какие плюсы и минусы вы видите в кроссплатформенной разработке?