Альтернативы для JavaScript
Javascript это практически вездесущий язык программирования. В некотором роде его можно сравнить с C на пике его популярности. На нем можно писать всё что угодно, начиная от красивых выпадающих менюшек, слайдеров на вашем сайте, заканчивая полноценнами приложениями для серверов, мобильных, для десктопа и даже для embedded систем типа arduino.
Но у яваскрипта есть свои заковырки. Прототипная модель объектов, динамические типы, колбек-функции, всё это, можно сказать, на любителя. В результате начали появлятся альтернативные языки, предлагающие свои подходы к реализации тех или иных концептов. В этом посте перечислены самые популярные альтернативы теплому ванильному яваскрипту.
Например, если вам хочется классического ООП, вместо прототипов, или вы хотите больше синтаксического сахара, посмотрите в сторону CoffeeScript. Если вам нужна строгая типизация вам могут понравиться Dart или TypeScript. К слову сказать, Dart работает нативно в Google Chrome и на некоторых тестах показывает 50% прирост производительности по сравнению с обычным javascript. Для любителей функциональго программирования подойдет ClojureScript или Roy. Вариантов масса, и вы не обязаны писать всё на чистом яваскрипте, даже если разрабатываете фронтенд под веб или работаете с node.js.
1. CoffeeScript

CoffeeScript это небольшой язык, который транслируется в Javascript. Рубистам он кажется похожим на руби, питонистам он похож на питон, и конечно же, он похож на яваскрипт. CoffeeScript старается упростить использование яваскрипта, сохранив все его сильные стороны.
2. Dart

Dart это объектно-ориентированый язык с полноценной системой классов, лексическими скоупами, замыканиями, и опционально — статической типизацией. Dart помогает создавать структурированные веб приложения и легок в изучении для широкого круга разработчиков.
3. TypeScript

TypeScript отличается от JavaScript возможностью явного определения типов (статическая типизация), поддержкой использования полноценных классов (как в традиционных объектно-ориентированных языках), а также поддержкой подключения модулей.
4. ClojureScript
ClojureScript — это расширение языка Clojure, с возможностью компиляции в Javascript. Напоминает Lisp.
5. Opal

Компилятор из Ruby в Javascript.
6. IcedCoffeeScript

IcedCoffeeScript это надстройка над CoffeeScript, упрощающая контроль за асинхронными операциями. Вместо колбеков вводятся два новых оператора: await и defer.
7. LiveScript

Ещё один форк от CoffeeScript. Добавляет поддержку функционального стиля программирования, а также вводит небольшие улучшения в текущую ООП-модель.
8. Kaffeine

Расширяет синтакс яваскрипта, не изобретая ещё один язык программирования. Код на Kaffeine строка к строке соответствует скомпилированому яваскрипт коду. Данная фича должна существенно упростить отладку приложения.
8. Roy

Экспериментальный язык программирования, преобразующий код в Javascript. Включает в себя возможности статичных функциональных языков.
Ну и конечно, есть ещё один язык, самый главный в этой семье. Это, конечно же, сам Javascript. Как ни крути, а именно он будет выполнятся в браузере. Тем не менее, для использования в больших проектах стоить посмотреть в сторону Dart (поддерживаемый Google) или TypeScript (поддерживается Microsoft). CoffeeScript очень популярен в последнее время, а с помощью source maps работать с ним стало ещё проще. Если вы устали от яваскрипта или хотите попробовать чего-то новенького, милости просим.
PS. Обзор подготовлен с использованием каталога javascript-библиотек Jster.Net. Сейчас в нем уже 981 билиотека для фронтенд-разработки.
PS/2 Ещё больше альтернатив на сайте AltJS
- Веб-разработка
- JavaScript
- TypeScript
JavaScript не нужно ничем заменять — другие языки тоже столкнутся с теми же проблемами

Очень часто слышатся заявления о том, что JavaScript нужно заменить каким-то другим языком. Причиной всегда становится то, что у JavaScript накопилось слишком много странностей, которые давно нужно было исправить.
Но поскольку их не исправили, то это очевидно означает, что JavaScript — отстойный язык, который просто никак не исправишь. И что его нужно заменить, и желательно любимым языком очередного жалобщика.
Но действительно ли это так?
Как мы оказались в такой ситуации?
Не стоит ждать, что я назову JavaScript идеальным языком. У него есть странные причуды. Он был спроектирован за десять дней, а затем его изменили так, чтобы он напоминал Java. К сожалению, это наследие, с которым мы вынуждены жить.
Но ни один язык не идеален, а JavaScript значительно улучшился после ES6 и продолжает своё развитие. Он эволюционировал из «игрушечного языка», используемого только для анимирования элементов веб-страниц, в серьёзный язык программирования, применяемый сегодня для выполнения больших и сложных веб-приложений.
JavaScript сегодня в буквальном смысле повсюду и является самым используемым языком программирования в мире.
Так почему же некоторые разработчики всё равно требуют его заменить?
Познай свой язык
Больша́я часть критики JavaScript возникла вследствие невежества, незнания языка и нежелания по-настоящему его изучить.
Ключевое слово this , прототипное наследование и нехватка иммутабельности — вот три основных источника путаницы в JavaScript. Я понимаю вас, если вы привыкли к языку, ведущему себя иначе. Мне понятно ваше смятение, а иногда и раздражение.
Но всё это не является непреодолимыми препятствиями. В изучении того, как на самом деле работает JavaScript нет ничего космически сложного, если у вас действительно будет желание учиться.
Вполне можно понять, почему разработчики стремятся к тому, чтобы другой язык заменил JavaScript, раз и навсегда устранив все его проблемы, но это нереалистично и не станет реальным решением.
Не ломайте веб
Главный принцип проектирования для JavaScript, а также для HTML и CSS, заключается в том, что новые возможности никогда не должны «ломать» уже существующие веб-сайты.
По сути, это превращает JavaScript в язык программирования, в котором возможно только добавление: возможности могут добавляться только в том случае, если они не повредят существующим веб-сайтам, но уже имеющиеся возможности никогда не должны меняться или удаляться.
Этот принцип гарантирует, что уже готовые веб-сайты никогда не поломаются, даже если они создавались десятки лет назад, и комитет TC39 прилагает серьёзные усилия для того, чтобы этот принцип не нарушался.
Это хорошая черта, но она накладывает на JavaScript бремя: возможности могут только добавляться в него, но никогда не меняться.
Поэтому несмотря на то, что сбивающие с толку аспекты JavaScript, например, ключевое слово this , теоретически можно исправить, это может нанести урон существующим веб-сайтам, которые идеально работали до внесения изменений. И это просто неприемлемо, потому что нарушает принцип «не ломайте веб».
Другой язык — не решение
Теоретически, на замену JavaScript можно реализовать новый язык. Предполагаю, что это станет техническим и логистическим кошмаром, который продлится целую вечность, но в целом это вполне реализуемо.
Но этот новый язык тоже должен будет придерживаться принципа «не ломайте веб», что по сути также превратит его в только дополняемый язык. Думаю, вы уже можете предвидеть, как энтузиазм относительного этого языка постепенно угаснет, и вскоре мы снова услышим те же стоны о необходимости его замены.
Ограничения, накладываемые на JavaScript этим принципом, ограничивают возможные пути его эволюции, и будут относиться к любому языку, который стремится его придерживаться. Именно это превратило JavaScript в то, чем он является сегодня, и язык, который бы заменил его, никоим образом не смог бы избежать той же судьбы.
На самом деле беспрецедентная обратная совместимость JavaScript, сохраняемая два с лишним десятка лет, является огромным достижением. Она сыграла серьёзную роль в эволюции того веба, который мы имеем сейчас, и JavaScript следует за это благодарить, а не ненавидеть.
С чистого листа?
Надеюсь, теперь вы осознаёте, насколько мала вероятность того, что другой язык полностью заменит JavaScript. Но если вы всё равно не хотите подробно изучать JavaScript, то для вас есть надежда в лице WebAssembly и дюжины других языков, которые компилируются в JavaScript.
Меня не перестаёт впечатлять TypeScript, добавивший к JavaScript статическую типизацию, и PureScript, который по сути является Haskell в браузере, позволяющим писать полностью работоспособный код в парадигме функционального программирования.
Но, как это всегда бывает, дополнительный этап компиляции добавляет сложности и вопрос заключается в том, стоит ли оно того. На данный момент я бы порекомендовал вам изучать TypeScript, потому что он является надмножеством JavaScript, и следовательно, они очень схожи. Кроме того, он активно разрабатывается и имеет большое сообщество.
Также вам понадобится время на его изучение. Время, которое можно потратить на тщательное изучение JavaScript. В нём нет ничего особо трудного, и после того, как вы изучите его причуды, увидите, что это невероятно мощный и гибкий язык.
Он неидеален, но, повторюсь, как и любой другой язык.
- typescript
- webassembly
- скриптовые языки
- веб-разработка
- фронтенд-разработка
Есть ли альтернатива JavaScript?

До сих пор не решено, является ли JavaScript удобным в использовании или незначительным языком программирования, поэтому в этой статье мы рассмотрим плюсы, минусы и альтернативы JavaScript.
Короткий ответ на вопрос в заголовке – «нет».
Развернутый ответ более сложный и начинается с «что-то вроде того…». Существует несколько альтернатив JavaScript для разработчиков, но (на данный момент) они все равно должны быть перенесены в JavaScript, прежде чем они будут развернуты.
Люди любят ненавидеть JavaScript?
Это не удивительно, если учесть некоторые очевидные недостатки этого языка программирования, включая IEEE 754 Double Precision, тот факт, что ряд функций и свойств, как правило, по-разному выполняются в браузерах, агрессивные принудительные меры и проблемные глобальные переменные (в числе прочих).
Однако недавний опрос Hired, в котором приняли участие 98 000 разработчиков, показал, что JavaScript на самом деле является вторым наиболее любимым языком программирования, и за него проголосовало 49%.
Лично мы недоумеваем, что может не понравиться в языке программирования, который допускает эффекты автозаполнения, прокрутки и выпадающего меню, анимацию различных элементов на странице и воспроизведение аудио и видео, а также множество других интересных функций, отвечающих за богатый опыт пользователей?
Кроме того, мы говорим о вечнозеленом языке, совместимом со многими другими языками, и эта универсальность чрезвычайно важна.
Преимущества JavaScript
Вот несколько причин, по которым JavaScript является одним из самых популярных и широко используемых языков программирования:
- Это единственный де-факто вариант, когда речь идет о внешней разработке и клиентском интерфейсе, поскольку он позволяет программистам создавать все виды интерактивных элементов и динамических веб-страниц;
- JavaScript легкий, имеет простой синтаксис и использует модель однопотокового цикла обработки событий, которая устраняет большую часть сложности программирования;
- Он ориентирован на прототип;
- С введением Node.js JavaScript разблокировал опции внутреннего программирования, когда-то зарезервированные только для серверных языков, таких как Java, Python или Ruby.
Недостатки JavaScript
Вот почему некоторые разработчики избегают JavaScript:
- Он слабо типизирован, что делает код сравнительно неясным;
- Поскольку пользователи могут видеть код, JavaScript может использоваться в злонамеренных целях и ставить под угрозу безопасность со стороны клиента;
- Перед публикацией код должен быть протестирован в разных браузерах, потому что он не будет выполняться одинаково в каждом браузере;
- Отсутствие отладки мешает разработчикам обнаружить проблему.
Возможные альтернативы JavaScript
Справедливо отметить, что нет реальных альтернатив JavaScript, где учтена вся среда JS.
Все эти альтернативы на самом деле являются обходными путями, которые позволяют избежать JavaScript только при написании кода, но дело в том, что код, который вы пишете для типичного пользовательского компьютера, должен выполняться на нем. Эти альтернативы используют процесс переноса другого языка в JavaScript.
Вот 5 заслуживающих внимания альтернатив, которые значительно улучшили JavaScript.
1. DART
Dart – это объектно-ориентированный C-подобный язык, созданный Google в попытке заменить JavaScript. Dart имеет статическую типизацию, что означает, что он устраняет некоторые наиболее распространенные источники ошибок в коде JS. Он поддерживает вывод типа, что является большим плюсом.
Тем не менее, одна из наиболее полезных функций этой альтернативы JS заключается в том, что она позволяет вам выйти за рамки разработки на стороне клиента и создавать автономные приложения. С помощью инструментария пользовательского интерфейса Google можно создавать собственные веб-приложения, приложения для ПК и мобильные устройства. Однако, будучи новичком в программировании и не так часто используемым на рынке, Dart предлагает ограниченные онлайн-ресурсы, что означает, что вы не сможете легко найти решение, когда столкнетесь с проблемами.
2. TypeScript
Разработанный Microsoft, TypeScript на самом деле больше похож на расширенный набор JavaScript, что означает, что он в основном добавляет новые методы, улучшает и модернизирует существующие функции JS, устраняет определенные ограничения и, что наиболее важно, добавляет дополнительную статическую типизацию. Другими словами, после компиляции в JS, приложения, написанные на TypeScript, можно просматривать практически в любом браузере.
Например, Angular.js полностью построен на TypeScript.
Еще одним плюсом этой альтернативы JS является то, что она совместима с Node.js.
Однако это сообщество меньше, и кодирование в TypeScript требует больше времени.
3. Kaffeine
Kaffeine – это набор расширений синтаксиса JavaScript, предназначенный для облегчения определенных задач. Например, он помогает front-end разработчикам с функциями обратного вызова JavaScript, учитывая, что он поддерживает асинхронные операции.
С Kaffeine процесс отладки значительно упрощается, и, помимо простоты для разработчиков, это расширение JS также полезно для конечного пользователя, так как браузер не замораживается, что означает, что взаимодействие с пользователем бесперебойное.
Опять же, гораздо меньшее сообщество и нехватка ресурсов делают этот язык программирования немного неясным.
4. ELM
Elm – это статически типизированный функциональный язык, который больше похож на Haskell, чем на C, но в отличие от первого, разработчики не хватаются за головы из-за его сложности.
Он отличается от JavaScript главным образом тем, что это не язык общего назначения, а решение, которое обеспечивает расширенные возможности разработки интерфейсных веб-приложений.
При написании кода в Elm разработчики получают немедленные уведомления о возникновении ошибки, чтобы они могли своевременно ее исправить, что предотвращает многочисленные ошибки на более поздних этапах разработки. Используемый этой программой слоган «на практике нет никаких исключений времени выполнения» означает, что если приложение, написанное на Elm, вообще запустится, оно вряд ли вылетит.
Некоторые из его недостатков включают в себя отсутствие серверной части, более крутой кривой обучения и тот факт, что он пропускает некоторые из высокоуровневых возможностей.
5. CoffeeScript
Говорят, что CoffeeScript улучшает читаемость исходного языка, а также упрощает код и делает его короче. Его совместимость с Node.js является еще одним преимуществом.
Тем не менее, важно отметить, что разработчики, которые хотят использовать CoffeeScript, все еще должны на «ты» обращаться с JavaScript. Одним из его основных недостатков является ограниченный набор функций, а также тот факт, что JavaScript выпустил обновление версии ES6, которое фактически сделало CoffeeScript ненужным (это обновление ускорило JavaScript и сделало его почти таким же быстрым, как CoffeeScript).
Вывод
Короче говоря, JavaScript на данный момент является единственным в своем роде языком программирования на стороне клиента, и от него никуда не деться.
Эти альтернативы могут улучшить его и устранить некоторые из его недостатков, но на самом деле не могут работать без инфраструктуры JavaScript, поэтому можно с уверенностью сказать, что нам все еще придется ждать истинного преемника JavaScript, который сможет работать независимо от него.
Понравилось то, что вы прочитали?
Подписывайтесь на нашу рассылку и получайте ежедневные обновления о новых учебниках, статьях, курсах и о многом другом!
Просто введите ваш адрес электронной почты, чтобы подписаться.
(Без спамов; ежемесячно два письма; отписаться от рассылки можно в любое время)
Спасибо!
Подписка успешно оформлена.
Альтернативы JavaScript. Часть 2
Ранее мы рассказывали о языке программирования TypeScript, созданном Microsoft в качестве замены JavaScript.
В этой статье расскажем вам об еще одной альтернативе JS — языке программирования Dart, созданного Google.
Dart – дротик в спину JavaScript от Google
Естественно, «корпорация добра», разработчик движка V8 и одного из самых популярных браузеров Google Chrome, не могла пройти мимо тенденции «улучшения» JavaScript, и 12 сентября 2011 года наконференции разработчиков Goto была проведена официальная презентация языка Google Dart.
В отличие от аналогов Dart прямо позиционируется в качестве замены JavaScript, «страдающего от фундаментальных изъянов, которые невозможно исправить путем эволюционного развития».
Разработчики языка поставили перед собой следующие задачи: создать структурированный и в то же время гибкий язык для веб-программирования; сделать язык похожим на существующие для упрощения обучения; обеспечить высокую производительность получаемых программ как в браузерах, так и в иных окружениях начиная от смартфонов и заканчивая серверами.
В настоящее время Dart-программы исполняются двумя способами: с использованием виртуальной машины (в браузере Google Chrome) и с промежуточной трансляцией (компиляцией) в JavaScript.
Самое интересное, что Dart претендует на то, чтобы стать прямым конкурентом платформы Node.js – виртуальная машина Dart (VM Dart) является неразрывной частью языка. С помощью нее можно запускать Dart-программы в консольном режиме, и средства для работы на стороне сервера в Dart имеются в достаточном количестве.
Экосистема Dart
Давайте сначала рассмотрим, что собой представляет этот язык. Для этого имеет смысл познакомиться со специализированными инструментами, созданными Google для сопровождения технологии.
На странице проекта мы сразу можем видеть призыв – Download Dart+Editor. Воспользуемся этим предложением и получим, скачав и распаковав архив, много интересных вещей.
Прежде всего это виртуальная машина Dart (Dart VM) – серверная платформа, реализующая событийно-ориентированную, асинхронную модель исполнения, сходную с так хорошо уже знакомым нам принципом работы Node.js. Далее Dart Editor – полноценная интегрированная среда разработки (IDE), основанная на Eclipse. Dart Editor дополнен веб-браузером – специальной модификацией обозревателя Chromium со встроенным Dart (Dart VM) движком.
Наконец, нам теперь доступен набор Dart SDK, куда входят сам интерпретатор dart, утилита для трансляции dart-приложения в JavaScript-файл (dart2js), утилита для генерации документации (docgen) ипрочие полезные инструменты.
Давайте запустим редактор, создадим новый проект (иконка в левом верхнем углу основного окна IDE, следует выбрать тип comand-line application) и напишем нашу первую dart-программу. Ничего оригинального:
main()
Теперь запустим ее на выполнение, кликнув по стрелке на верхней панели инструментов. Судя по появившейся строчке «Hello Dart» в консоли редактора, Dart работает (об особенностях самого языка – чуть ниже).
Того же результата мы можем достичь, сохранив вышеприведенный код в файле hello.dart и запустив его с помощью интерпретатора из командной строки:
$ dart hello.dart Hello Dart
Теперь можно попробовать транслировать нашу программу в JavaScript:
$ dart2js hello/bin/hello.dart Dart file (hello\bin\hello.dart) compiled to JavaScript: out.js
Сделано! Скрипт получился рабочим, но слабочитаемым, поэтому сгенерированные 14 Кб мы тут приводить не будем.
Теперь стоит вспомнить, что Dart задуман в первую очередь как язык, исполняемый в браузере. Если мы создадим новый проект, при этом выбрав тип Wep Application, в качестве заготовки для приложения мы получим следующий dart-код:
import 'dart:html'; void main() < querySelector("#sample_text_id") ..text = "Click me!" ..onClick.listen(reverseText); >void reverseText(MouseEvent event) < var text = querySelector("#sample_text_id").text; var buffer = new StringBuffer(); for (int i = text.length - 1; i >= 0; i--) < buffer.write(text[i]); >querySelector("#sample_text_id").text = buffer.toString(); >
Не будем его трогать, а обратим внимание, что IDE, кроме файла сценария, создала еще и html-шаблон. И его стоит рассмотреть:
