- PVSM.RU - https://www.pvsm.ru -

«Существует только два вида языков: те, на которые жалуются и те, которыми никто не пользуется», — Бьёрн Страуструп, создатель C++
Очень часто слышатся заявления о том, что JavaScript нужно заменить каким-то другим языком. Причиной всегда становится то, что у JavaScript накопилось слишком много странностей, которые давно нужно было исправить.
Но поскольку их не исправили, то это очевидно означает, что JavaScript — отстойный язык, который просто никак не исправишь. И что его нужно заменить, и желательно любимым языком очередного жалобщика.
Но действительно ли это так?
Не стоит ждать, что я назову JavaScript идеальным языком. У него есть странные причуды. Он был спроектирован за десять дней [1], а затем его изменили так, чтобы он напоминал Java. К сожалению, это наследие, с которым мы вынуждены жить.
Но ни один язык не идеален, а JavaScript значительно улучшился после ES6 и продолжает своё развитие. Он эволюционировал из «игрушечного языка», используемого только для анимирования элементов веб-страниц, в серьёзный язык программирования, применяемый сегодня для выполнения больших и сложных веб-приложений.
JavaScript сегодня в буквальном смысле повсюду и является самым используемым языком программирования в мире [2].
Так почему же некоторые разработчики всё равно требуют его заменить?
Больша́я часть критики JavaScript возникла вследствие невежества, незнания языка и нежелания по-настоящему его изучить.
Ключевое слово this, прототипное наследование и нехватка иммутабельности — вот три основных источника путаницы в JavaScript. Я понимаю вас, если вы привыкли к языку, ведущему себя иначе. Мне понятно ваше смятение, а иногда и раздражение.
Но всё это не является непреодолимыми препятствиями. В изучении того, как на самом деле работает JavaScript нет ничего космически сложного, если у вас действительно будет желание учиться.
Вполне можно понять, почему разработчики стремятся к тому, чтобы другой язык заменил JavaScript, раз и навсегда устранив все его проблемы, но это нереалистично и не станет реальным решением.
Главный принцип проектирования [3] для JavaScript, а также для HTML и CSS, заключается в том, что новые возможности никогда не должны «ломать» уже существующие веб-сайты.
По сути, это превращает JavaScript в язык программирования, в котором возможно только добавление: возможности могут добавляться только в том случае, если они не повредят существующим веб-сайтам, но уже имеющиеся возможности никогда не должны меняться или удаляться.
Этот принцип гарантирует, что уже готовые веб-сайты никогда не поломаются, даже если они создавались десятки лет назад, и комитет TC39 прилагает серьёзные усилия [4] для того, чтобы этот принцип не нарушался.
Это хорошая черта, но она накладывает на JavaScript бремя: возможности могут только добавляться в него, но никогда не меняться.
Поэтому несмотря на то, что сбивающие с толку аспекты JavaScript, например, ключевое слово this, теоретически можно исправить, это может нанести урон существующим веб-сайтам, которые идеально работали до внесения изменений. И это просто неприемлемо, потому что нарушает принцип «не ломайте веб».
Теоретически, на замену JavaScript можно реализовать новый язык. Предполагаю, что это станет техническим и логистическим кошмаром, который продлится целую вечность, но в целом это вполне реализуемо.
Но этот новый язык тоже должен будет придерживаться принципа «не ломайте веб», что по сути также превратит его в только дополняемый язык. Думаю, вы уже можете предвидеть, как энтузиазм относительного этого языка постепенно угаснет, и вскоре мы снова услышим те же стоны о необходимости его замены.
Ограничения, накладываемые на JavaScript этим принципом, ограничивают возможные пути его эволюции, и будут относиться к любому языку, который стремится его придерживаться. Именно это превратило JavaScript в то, чем он является сегодня, и язык, который бы заменил его, никоим образом не смог бы избежать той же судьбы.
На самом деле беспрецедентная обратная совместимость JavaScript, сохраняемая два с лишним десятка лет, является огромным достижением. Она сыграла серьёзную роль в эволюции того веба, который мы имеем сейчас, и JavaScript следует за это благодарить, а не ненавидеть.
Надеюсь, теперь вы осознаёте, насколько мала вероятность того, что другой язык полностью заменит JavaScript. Но если вы всё равно не хотите подробно изучать JavaScript, то для вас есть надежда в лице WebAssembly [5] и дюжины других языков, которые компилируются в JavaScript [6].
Меня не перестаёт впечатлять TypeScript [7], добавивший к JavaScript статическую типизацию, и PureScript [8], который по сути является Haskell в браузере, позволяющим писать полностью работоспособный код в парадигме функционального программирования.
Но, как это всегда бывает, дополнительный этап компиляции добавляет сложности и вопрос заключается в том, стоит ли оно того. На данный момент я бы порекомендовал вам изучать TypeScript, потому что он является надмножеством JavaScript, и следовательно, они очень схожи. Кроме того, он активно разрабатывается и имеет большое сообщество.
Также вам понадобится время на его изучение. Время, которое можно потратить на тщательное изучение JavaScript. В нём нет ничего особо трудного, и после того, как вы изучите его причуды, увидите, что это невероятно мощный и гибкий язык.
Он неидеален, но, повторюсь, как и любой другой язык.
Выбор за вами.
Автор: PatientZero
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/337989
Ссылки в тексте:
[1] Он был спроектирован за десять дней: https://en.wikipedia.org/wiki/JavaScript#Beginnings_at_Netscape
[2] самым используемым языком программирования в мире: https://insights.stackoverflow.com/survey/2019#most-popular-technologies
[3] Главный принцип проектирования: https://www.w3.org/TR/html-design-principles/#support-existing-content
[4] прилагает серьёзные усилия: https://developers.google.com/web/updates/2018/03/smooshgate
[5] WebAssembly: https://webassembly.org/
[6] языков, которые компилируются в JavaScript: https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js
[7] TypeScript: https://www.typescriptlang.org/
[8] PureScript: http://www.purescript.org/
[9] Источник: https://habr.com/ru/post/477694/?utm_source=habrahabr&utm_medium=rss&utm_campaign=477694
Нажмите здесь для печати.