Хабрахабр

[Перевод] JavaScript не нужно ничем заменять — другие языки тоже столкнутся с теми же проблемами

image

«Существует только два вида языков: те, на которые жалуются и те, которыми никто не пользуется», — Бьёрн Страуструп, создатель C++

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

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

Но действительно ли это так?

Не стоит ждать, что я назову JavaScript идеальным языком. У него есть странные причуды. Он был спроектирован за десять дней, а затем его изменили так, чтобы он напоминал Java. К сожалению, это наследие, с которым мы вынуждены жить.

Он эволюционировал из «игрушечного языка», используемого только для анимирования элементов веб-страниц, в серьёзный язык программирования, применяемый сегодня для выполнения больших и сложных веб-приложений.
JavaScript сегодня в буквальном смысле повсюду и является самым используемым языком программирования в мире. Но ни один язык не идеален, а JavaScript значительно улучшился после ES6 и продолжает своё развитие.

Так почему же некоторые разработчики всё равно требуют его заменить?

Больша́я часть критики 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. Также вам понадобится время на его изучение. В нём нет ничего особо трудного, и после того, как вы изучите его причуды, увидите, что это невероятно мощный и гибкий язык.

Он неидеален, но, повторюсь, как и любой другой язык.

Выбор за вами.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть