Вы назвали много языков программирования, которые компилируются в JS. Хоть js и не compilation target, люди всё равно продолжают создавать новые языки чтобы заменить JS. Думаю это не потому что JS плохой, а потому что у него статут-кво в веб-разработке
Как я упоминал выше, условно все эти языки мы можем поделить на 2 группы: существующие и новые. Существующие это те языки, которые существуют вне экосистемы JS, но компилируются в JS чтобы было. Чтобы существующие разрабы могли войти в браузер и что-то состряпать.
Крайне сомневаюсь в эффективности такого подхода. Ведь знание языка это совсем малая доля: тебе ещё нужно знать всякие web api, DOM, css и кучу другой фигни помимо языка. Ну может ты скалу в жс перегонять, а что толку, если знаний фронта у тебя всё равно нет
Вот языки, которые специально таргетятся в JS, это другое дело. Их обычно создают чтобы решить какую-то проблему, которая есть в JS. CoffeeScript был призван исправить синтаксис JS, TypeScript - убогую типизацию.
ReasonML - принести ФП и Хиндли - Милнер в мир фронтенд-разработки. У всех разная степень успеха, и как бы мне не хотелось писать на своем любимом языке для веб, кажется исход их всегда будет одинаков. Забвение после следующего релиза ECMA
Всё, конечно, может измениться с появлением common runtime в браузере. Может WebAssembly и поможет, но пока слишком рано об этом говорить, слишком тяжелый доступ к браузерным апишкам у него
Ну и я хотел был рассказать вам про язык, который считаю лучшим из compile-to-js.
Встречайте, ClojureScript 🥳
Да-да, вам не по казалось, я считаю этот инопланетный язык с кучей скобочек best-fit в экосистему js
Вот как выглядит его синтаксис если кто никогда не видел
Этот язык лаконичен, минималистичен, а главное, очень хорошо продуман. @richhickey потратил очень много времени на дизайн этого языка, отполировал со всех сторон.
Он использует динамическую типизацию (как и жс), только не слабую, а сильную. Обращение к js коду идет без каких-либо обёрток.
Код получается раза в 3 короче и выразительнее.
Выходной js правда великоват, но это решается с помощью google closure compiler
Он оптимизирует, делает tree-shaking и ещё много всяких приколюх. Ну и конечно тебе не надо ставить тысячу инструментов для сборки своего проекта. Всякие бандлеры, минифаеры и прочая ересь просто не нужны, всё внутри
А самое главная фишка в том, что clojurescript полностью меняет dev cycle. Вы можете компилировать ваши функции отдельно от всего кода, в любой момент посмотреть/поменять значение любой переменной, вызвать любую функцию прямо из редактора и увидеть результат в браузере
И это не ваш обычный hot-reload. Clojurescript не перезагружает всё приложение, ваш Стейт никуда не пропадает)