Главное Свежее Вакансии Образование
Выбор редакции:
1 988 7 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Кто лучше умеет в Desktop: JavaScript или C++?

Друзья, вы ранее сравнивали бутерброд и самолет?Почему-то многие думают, что JavaScript и C++ невозможно противопоставлять из-за разности областей применения. С появлением таких продуктов, как NW.js или Electron, данная проблема потихоньку меняет направление своего развития. Хотелось бы изложить свои мысли по этому поводу.

Миф первый. Применение

Как-то так получается, что большинство программистов рассматривают JavaScript, как, исключительно браузерный язык, упуская самую важную деталь: JS - скриптовый язык, который не привязан к какой-то одной технологии. Он лишь позволяет писать алгоритмы, а его функционал напрямую зависит от среды, в которой он исполняется.На сегодняшний день на JavaScript можно писать Web приложения (напр. Angular), мобильные приложения (напр. Cordova), описывать логику серверов (напр. NodeJS), писать логику для "умных" устройств, а так же писать Desktop приложения (напр. NW.js). JavaScript сейчас - это не только язык, это целый инструмент, позволяющий делать любые вещи.

Миф второй или "Предвзятость"

Опять же, откуда-то взялось мнение, что ничего серьезного на JS написать нельзя, так как его использует большое количество новичков, пишущее код низкого качества. JavaScript уже давно вырос из того состояния, когда язык, в счет своей простоты, позволяет писать всем подряд всё подряд. Тут, как с PHP. Сам язык очень мощный и с каждым релизом становится всё функциональнее, но из-за приверженцев старой школы, его продолжают считать плохим из-за большого количества плохих решений, написанных на нём. Это не проблема языка. Я бы даже сказал, что JS дает настолько широкий простор для решения задач, что выбирать можно не из десятков, но из большого множества способов.

Миф третий. Тормоза

Тут тоже есть свои нюансы. Я думаю, все мы помним свои первые шаги в интернете в браузере Internet Explorer, когда тормозило всё. Почему-то издавна народ придерживается мнения, что JS тормозной язык и делать на нем серьезные вещи нет смысла. Между тем, по личному опыту могу сказать, что JS может быть очень быстрым. НО! Оговорюсь - зависит от среды исполнения. Сейчас активно развивается Гугловский V8 (движок JS), который исполняет код на достаточно быстром уровне. Да, медленнее, чем C++, однако, стоит сделать скидку на то, что оформление в CSS и HTML-теги требуют некоторого времени на чтение и рендер. Однако, это если речь про интерфейс. Без рендера (отрисовки интерфейса) скорость исполнения кода увеличивается достаточно внушительно. Сам же V8 написан на C++.

Порог вхождения

Тут история неоднозначная. Кто-то говорит, что начал изучать первым языком C++, кто-то приводит в примеры PHP или JavaScript (большинство же начинали изучение с Basic, Pascal..., да-да, не ворчите).Честно сказать, я не считаю ни C++ ни JavaScript легким языком. Однако у JavaScript есть существенное преимущество: для его изучения вам, кроме текстового редактора и браузера, ничего, по сути, и не надо. Браузеры предоставляют "из коробки" и консоль, и средства мониторинга и отладки. Бери, работай.

Если же вы начинаете учить C++, то вам придется познакомиться со средой разработки, со средствами компиляции, с отладкой такого приложения, и, не приведи Господи, начать учить еще и средства сборки, свихнешься.

Но, к этому быстро привыкаешь, и потом работа становится максимально не напряжной. По ходу работы знакомишься с языком, узнаешь много нового о типах данных, и о том, что смешивать их нельзя, и то, что работает в JS, тут, увы, приведет к ошибке.

Как бы там ни было, у JavaScript порог вхождения ниже, за счет допущений языка. Отсутствие свойства у объекта или класса не приведет к ошибке, ваш скрипт продолжит исполнение, а вместо значения вы просто получите "undefine", что тоже является значением. Та же ситуация в C++ приведет к фатальной ошибке и остановке всей программы. Так же разница в требовательности к типам данных, к объявлению функций, и так далее.

JavaScript vs C++

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

Если рассматривать общее применение языков - то JavaScript пока лидер по браузерным языкам. Ремарочка: потому, что браузеры других языков не понимают. В чистом виде. C++ же универсален. Буквально. И это подводит нас к первому критерию, который, в большинстве случаев, определяет скорость работы языка.

C++ - компилируется в понятный компьютеру язык.
JavaScript - интерпретируемый язык, который исполняется в рамках внешней среды, что немного роняет его производительность.

Далее рассмотрим область применения. Сразу оговорюсь, что это всё условности, и в реальности всё может быть настолько иначе, что наоборот.C++ может быть применен везде, когда речь идет о скорости. И под "везде" я предлагаю понимать так, как читаете. При желании на C++ можно написать интерпретатор JavaScript (который и так на нем написан). На нем можно написать браузер, сервер, программу для любых устройств.

JavaScript же применяется в большей степени для написания браузерных приложений. С недавнего времени (с появления NodeJS), так же, используется для описания сервера, и уже обошел другие языки (и даже PHP) в плане скорости, когда речь идет о real-time приложениях. Хотя область применения JavaScript расширяется с каждым релизом, как самого языка, так и сред, где возможно его использование. А с появлением NodeJS появляется возможность писать приложения для Desktop систем.Хотя, будем честными - в случае создания мобильного или Desktop приложения, создается оболочка над браузером. То есть это всё еще браузерное приложение, просто с бОльшим уровнем доступа к разным контекстам.

Далее уйдем в уклон именно Desktop приложений, и, прежде, выведем еще два тезиса.

C++ универсален при любом использовании и дает возможность писать приложения любой сложности и направленности.
JavaScript применяется для написания браузерных приложений, но, за счет расширенных сред исполнения, появляется возможность писать полноценные Desktop и мобильные приложения, серверы и т.д.

Теперь про интерфейсы. Да, это больная тема всех "Сишников". Или нет? Тут, как ни крути, но у JavaScript (в связке с HTML и CSS) преимущество, поскольку каждый элемент можно настроить вплоть до каждого пикселя, и наделить реакцией на любые события ввода (мышь, клавиатура и т.д.), а обилие самих элементов переваливает за сотни. Так же, если каких-то не достает, их можно создать самому. В случае с HTML и CSS ограничителем внешнего вида приложения выступает исключительно фантазия. А с приходом CSS3 и HTML5 даже это не является ограничением, поскольку весь интернет - это HTML и CSS, и черпать идеи можно отовсюду. Интерфейсная часть может расширяться в позитивную сторону за счет сотен библиотек, позволяющих это делать. Типичный пример: jQuery.

В C++ ситуация немного иначе. Так как мы говорим о Desktop, то набор возможных элементов для использования ограничен библиотекой графических элементов. QtWidgets или WxWidgets. В большинстве случаев, их, кончено, достаточно, так как практически все программы с интерфейсом - это наборы полей и кнопочек. Визуальщина в этом случае - всего лишь набор стандартных элементов.

Однако тут стоит отдать должное HTML&CSS, интерфейс, построенный на нем, выглядит одинаково на всех платформах и операционных системах. А настроить можно все - от цветов до шрифтов. Если кто не знаком с гибкостью CSS, прошу в "гугл". Поверьте - будете приятно удивлены разнообразием вариантов оформления.

Вообще, уходя от каскадных табличек и виджетов, и посмотрев в формате максимальной абстракции, HTML и CSS все равно в выигрыше, так как они заточены на то, чтобы делать оформление. Стандартные же графические элементы из библиотек виджетов зачастую имеют внешний вид, завязанный на оформлении ОС, а их настройку отображения никак не назвать гибкой. Да, есть QML, который, приверженцы C++ и Qt могут противопоставить JavaScript, но, как бы о нем не отзывались, ни о какой гибкости там и речи не идет. Оно, как бы, работает, но, это всего лишь пародия.

Строить интерфейс в JavaScript приложении легче, за счет CSS и HTML
Строить интерфейс на C++ сложнее, он больше привязан к библиотекам и сложно расширяем.

Возможности языков так же разнятся, но, как уже было не раз сказано, JavaScript своего функционала не имеет, а лишь использует то, что предоставляет среда. И, в этом плане у него всё очень хорошо.

Какой функционал обычно нужен при разработке Desktop приложений: организация интерфейса, обработка ввода/вывода, доступ к файлам, возможно, к БД и сети, мультимедиа, и, всё пожалуй. Из основного, только это.

C++, понятное дело, имеет возможности для организации любого уровня функционала, имеет полный доступ к файлам, доступ к системам ОС и... бесконечное количество вариантов.

JavaScript, же, долгое время был ограничен в этом плане, и стал раскрываться, как язык для написания Desktop приложений, совсем недавно. Я наглядно рассказал о технологии NW.js тут, поэтому, думаю, повторяться не стану.

В совокупности, связка из NodeJS и Chromium'а дает полный доступ ко всем элементам ОС, а возможность использовать NPM пакеты возводит функционал программ до уровня приложений на C++ по степени взаимодействия с ОС. Более того, некоторые части приложений можно вынести в модули на любом языке и использовать их внутри своего приложения (гуглить child_process in NodeJS).

Касаемо синтаксиса, и там и там есть плюсы и минусы. В общем же виде и C++ и JavaScript выглядят похоже с точки зрения синтаксиса. А ключевые слова неизбежно схожи в силу того, что оба языка "Си-подобные", то есть, синтаксические корни у обоих одинаковые. Однако, когда речь заходит о частных случаях и решениях (напр. классы), то тут уже разница видна. Хотя с появлением ES2015 (текущая актуальная спецификация), в JavaScript появились очень похожие на C++ конструкции кода, описывающие функционал классов.

Итог таков

JavaScript, как язык, прекрасен. Он дает возможность делать вещи любой сложности, а оболочка NW,js предоставляет ему доступ ко всем вспомогательным системам, службам ОС и, его возможности расширяются до бесконечности. А HTML + CSS превращают интерфейсы в произведения искусства.

Вся эта история пока на этапе становления, однако, я взял на себя смелость начать разработку специальной IDE под это дело.

Называется NW.js IDE, и, если вам интересно, можете пройти на её сайт и почитать подробнее.

Официальный сайт NW.js IDE

PS: не холивара ради, а просвещения для, господа. Потому, если у вас есть желание разбить мои доводы в пух и прах, прошу в комментарии.Ну и, коли вы с моим мнением согласны, прошу не игнорировать возможность отметить статейку плюсиком. От себя благодарю всех, кто осилил, ибо я старался.

+3
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
S++
Это новый язык программирования
rrwx 93744
Осилил! Надо подумать, прежде чем отвечать.
Ответить
Proton
Proton - JavaScript IDE
artemyagodnik 91375
Но в js нету той самой детали,что есть в C++. Прямой доступ к памяти.
Ответить
Artur Kogut
Когда приблизительно NW.js IDE выйдет для Windows x64
Ответить
Jury Gerasimov
"связка из NodeJS и Chromium'а дает полный доступ ко всем элементам ОС" и ваше приложение весит как сбитый боинг. chrome-win32.zip - 131 Мб, node-v8.9.4-x64.msi - 16 Mb.
Ответить
RTS Game
Мобильная игра в жанре RTS
Петр Нагель
80мб конечный проект весит)
Ответить
Sergey Girfanov
Ха, нужно подумать, просто так не ответить :) Информации много
Ответить
Челодой моловек
Про конкурентность js для веб-фронтенда. Рекомендую почитать про webassembly и emscripten.

webassembly - это то, на что в данный момент устремлены взгляды светлейших умов программирования. И поэтому есть вероятность хайпа в ближайшие годы.

Могу поделиться офигенным лайфхаком. Заходишь в треды гитхаба и читаешь комменты ведущих кодеров. Так и складывается общая картинка.
Ответить
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.