Почему javascript обречен на гибель ?

автор superman 1 августа 2015 г. 14:29:24

Теги: Javascript



Если верить википедии, то javascript появился в 1995 году. Т.е. языку сейчас уже 20 лет. Солидный возраст неправда ли ? Для примера Python сейчас 24 года, Руби 20 лет как и Java.

Что сейчас происходит с javascript ? Не так давно развития языка сдвинулось с места. Сообщество признала тот факт, что сейчас реальность толкает разработчиков писать довольно сложные веб-приложения на не предназначенном для этого языке. Дак чтоже такое с языком ? Давайте проверим адекватность поведения языка, ожидаемую типичным программистом.

> [1,2,3] == [1,2,3]
false

Данный пример показан на последней версии реализации javascript на NodeJS/IO.JS

[15:53:11 => ~]$ node --version
v2.1.0

Что мы сравнивали в этом примере ? Мы сравнивали два списка чисел. Визуально они равны, дак почему же javascript нам говорит обратное ? Проверим это же выражение на других языках.

на Python 3.4.3

Python 3.4.3 (v3.4.3:b4cbecbc0781, May 28 2015, 15:58:18) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> [1,2,3] == [1,2,3]
True

и на Ruby 2.2.2

[1] pry(main)> [1,2,3] == [1,2,3]
=> true

Как мы видим на этих простых примерах Ruby и Python оправдывают ожидания программиста, а вот javascript нет. И таких несуразностей в языке большое количество. Почему же это так ? Корень проблемы уходит в историю создания языка. Язык создавался очень поспешно, без подробного обдумывания деталей (в отличие от историй создания тех же Ruby и Python).

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

Бешеную популярность языку придал факт появления NodeJS. Это довольно удачная попытка реализации javascript для backend разработки. Удачная с точки зрения машины для выполнения javascipt, но сам язык остался такой же, со всеми своими минусами.

Дальше мы видим принятие стандарта ECMAScript 6. Самое пожалуй обсуждаемое улучшение в этом стандарте это реализация в языке более менее нормального ООП. Т.е. на дворе 2015 год, в языке появляется ООП.

Принятие ECMAScript 6 чуть чуть добавляет адекватного поведения языку, но не настолько как хотелось. Именно по этой причине существуют всевозможные альтернативные языки, компилируемые в javascript. Я говорю в первую очередь о CoffeeScript, TypeScript, ClojureScript.

Так же существуют кардинальные меры по проблеме производительности языка, такие как ASM.JS от Mozilla. Это все довольно нагнетает обстановку и лидеры рынка веб-индустрии принимают вполне логичное решение, а именно полную замену javascipt в виде WebAssembly.

WebAssembly понимает бинарный формат, а это значит что писать для WebAssembly можно будет практически на любом компилируемом языке.

В сухом остатке мы понимаем, что после появления WebAssembly популярность javascript будет сходить на нет, и далее язык будет "скатываться" вниз по инерции как это сейчас происходит с PHP.

А что с NodeJS ? Уже можно забыть PHP / Python / Ruby и писать все на javascript ? Очевидный ответ нет. NodeJS это среда выполнения javascript на backend не более того. Отсюда мы имеем асинхронную природу выполнения кода, т.к. это javascript. Конечно это можно считать преимуществом, но далеко не везде. Например асинхронная модель поведения совершенно не подходит для типовых веб-сайтов. Написать веб-сайт конечно же можно, но трудозатраты на разработку типового сайта на NodeJS будут существенно выше, чем к примеру на PHP / Python / Ruby.

В итоге популярность javascript в основном вызвана тем фактом, что язык уже всем знаком. Каждый веб-разработчик сталкивался с этим языком так или иначе. Вот и все. Асинхронной моделью поведения никого не удивишь, это не более чем маркетинговый булшит. Вам нужна асинхронная модель поведения ? Дак она есть на Python (Twisted, Tornado, async io), Ruby (Eventmachine), Java / Scala (Play framework).

В окончании этой статьи я не прошу вас забыть javascript, я прошу вас не переоценивать возможности этого языка и платформы NodeJS. Помните главное правило, для каждой задачи есть свой инструмент. Серебряной пули нет. Приятной вам разработки!


comments powered by Disqus

2014-2018 © thenextcode.ru