AW
На JS можно сделать больше разнообразных программ. Например, это класс программ, содержащие Runtime ошибки и класс программ, делающих что-то за пределами задачи "UI в браузере". Например, сервер на node.js.
Elm не даёт нам написать программы из этих классов.
Т.е. Elm предлагает некоторую модель разработки того, что нужно, при это запрещая разработку того, что не нужно и вредно.
Причем проверка запретов происходит на стадии компиляции - до того как программа попадёт к пользователю.
Это прекрасно с точки планирования времени:
1. Для разработчика: если задача решена (скомпилировалось - значит уже целый класс ошибок устранён) - к ней уже можно не возвращаться - можно спокойно думать о другом. Или спать :-)
2. Для менеджера: если таск закрыт, значит он закрыт и крайне маловероятно, что возникнет куча багов по этой задаче, которые сожрут ещё неизвестное количество времени.
Ну и для стартапов это хорошо, т.к. чем быстрее стратап проверяет свои гипотезы (что связано с постоянным переписыванием и дописыванием первоначального продукта), тем больше шансов, что он (стартап) выживет. В большинстве языков программирования это ведёт к тому, что уже через полгода-год в коде продукта разобраться не может никто, и, внедряя новую фичу, постоянно ломается что-то из того, что было написано ранее, а Elm позволяет избежать этой проблемы, т.к. если это компилируется, то это работает.