Как стать автором
Обновить

Комментарии 21

Для разработчиков игр явно будут интересны тригонометрические функции и сигнум.
Тогда уж попросить матричные, а лучше потоковые векторные операции
Так они в любом случае будут работать как надстройки над этими операциями. К тому же тригонометрические функции приложимы не только к играм.
JavaScript нуждается не в новых тригонометрических функциях, ввести которые тривиально, а в поддержке нормального ООП, нормальной многопоточности, нормальной модульности. Без этого большие программы писать трудно.

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

>… так как расширения устанавливаются через расширение браузера

В общем, чувствуется, что разработчикам умирающего Silverlight нашлось применение.
> нормальной многопоточности
Воркеры вполне мило выглядят.
> нормальной модульности
Дык уже давно же есть на выбор несколько вариантов организации модульности.
> поддержке нормального ООП
Как бы классы и прототипы — это разные парадигмы программирования, ECMAScript основывается на прототипировании, зачем же на костылях лепить привычное ООП? Чтобы неофитам проще было?
О каких воркерах речь?

Модульности нет ни одного варианта, если есть — представьте.

Нормальное ООП — это то, которое используется в основных языках программирования и не требует ни костылей, ни изысканий. Насчёт неофитов — не надо считать себя умнее всех. К примеру, попытка объяснить что такое ООП в JavaScript от Дмитрия Котерова (кажется набла 40) закончилась тем, что выяснилось, что он (и совсем не неофит) неправильно понимал устройство ООП — кстати дискуссия в его форуме получилась очень интересная. А Вы какие-то слова про неофитов используете — зачем?
> О каких воркерах речь?
Web Workers
> Модульности нет ни одного варианта, если есть — представьте.
Ну хотя бы «классическое» www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
> Нормальное ООП — это то, которое используется в основных языках программирования
Таких как Python, Lua, Ruby (отчасти), AS (до 3.0), да?
> А Вы какие-то слова про неофитов используете — зачем?
Много кто учит классическому классово-объектному ООП, но мало где преподают прототипное ООП.
Поэтому либо начинать изучать самостоятельно, либо использовать «костыли».
Всё это для новичков в языке — непросто => для понижения порога входа в язык нужно ввести всем знакомую парадигму, что пытается, например, сделать Dart.
Web Workers — это не многопоточность, и выглядит не очень хорошо. Вопрос в том — это многопоточность или имитация, имитация возможна и сейчас, и судя по описанию она и используется.

«Классическое» — это не модульность и вообще в данном представлении по Вашей ссылке не часть языка. Тут нечего даже комментировать.

Прототипное ООП в JS — это не ООП, это костыль, созданный за 10 дней от безнадёжности, а не из-за его полезности и удобности.

Собственно говоря, я про неофитов зачем написал: Вы это слово используете, похоже, чтобы повысить свою значимость, я же привёл пример человека, которому ярлык неофита очень трудно повесить, но который не смог самостоятельно разобраться в «ООП» JavaScript'а. Искуственные преграды на пути изучения языка — это не достоинство, это свидетельство ошибок его проектирования. Можно, конечно, любую ошибку назвать фичей.
> Web Workers — это не многопоточность
А что же это?
У нас есть возможность использовать несколько потоков исполнения, отрабатывать какие-либо вычисления в фоне и «отрисовывать» UI.
> это не модульность
Ну скажите, что ли, ваше определение модульности.
По моему — принцип разработки, при котором код разделяется на отдельные сущности, со своим набором внутренних данных/методов и набором данных/методов, которые могут быть использованы другими модулями.
Собственно, JS, используя замыкания, позволяет реализовывать данную парадигму.
> Прототипное ООП в JS — это не ООП, это костыль, созданный за 10 дней от безнадёжности
Ну давайте пруфы что ли.
> Вы это слово используете, похоже, чтобы повысить свою значимость
Я употребляю слово «неофит» в значении «неофит». Как можно здесь найти какой-то потаённый смысл?
Web Workers — это кусок кода, не имеющий доступа к DOM, который управляется событиями. Поток не управляется ничем, его можно только остановить. Другие отличия — доступ к общим данным, приоритет выполнения… в общем event-based потоки это не многопоточность. Это способ выполнить некоторые операции в фоне, причём постоянно отдавая управление.

По остальным вопросам очень не хочется влезать в дискуссии, можно замыканиями сделать «модули», можно приватные переменные, но от этого в языке не появится ни модулей, ни приватных переменных. Будет очередная эмуляция того, что в большинство языков присутствует изначально.

Насчёт неофита — на Вашей совести пусть останется.
Прототипы в JavaScript это не следствие какой-то ущербной реализации ООП, это просто другой подход к ООП. В определённом смысле даже более прогрессивный. Посмотрите вот эту лекцию по истории появления JavaScript (там рассказывается не только известная всем история, как его создали за 10 дней, но и какие теории и практики легли в его основу): youtu.be/JxAXlJEmNMg

Видео длинное и начинается оно с лекции по истории развития компьютеров вообще, поэтому если интересно узнать именно про JavaScript, мотайте на вторую половину, где описывается история развития языков программирования, которая плавно переходит к JavaScript, объясняя почему он именно такой.
Ну с какого перепугу это будет прогрессивным подходом? Можно оправдать практически любой подход, назвать его прогрессивным и другим, но то что прототипное ООП в JS не даёт поддержки процесса программирования такой, какую даёт даже перловое ООП, не говоря о С++ или Java — это факт. В чём прогресс? И почему 10 из 10-ти фреймворков первым делом приводят прототипную модель всеми правдами и неправдами к стандартному виду?
Если
startwith === RegExp('^'+arguments[0]).test(this)
и то же — для endWith, contains,
то в чём здесь упрощение? 3 остальных функции со строками — достаточно редкие, чтобы их тоже определять в языке. Здесь просматривается тенденция вводить гору тривиальных функций, что заставляет массу людей оттянуть свои силы на знание (MSDN) в ущерб другим знаниям. Настоящее упрощение — это невключение в ядро языка лишних элементов и тавтологий. С гиперболическими функциями и sign — согласен, что нужны. Глобализацию — действительно, лучше описать отдельным классом и не для всех языков. К тому же, это дало бы неустойчивость ядра и зависимость от постановлений правительств каждой страны о «правильном формате представления».
После минимального опыта работы со строками приходит понимание, что regexp'ом не заменить тривиальные функции — для этого нужно было бы экранировать в подстроках синтаксис регулярных выражений.
Да регулярных-то выражений там и не надо.

String.prototype.startsWith = function (arg) {
   return this.substring(0, arg.length) === arg;
}
Ну и, соответственно,

String.prototype.endsWith = function (arg) {
   return this.slice(-arg.length) === arg;
}

String.prototype.contains = function (arg) {
   return this.indexOf(arg) !== -1;
}
А как там кстати ES 6 harmony поживает?
Лучше б FileAPI допилили
Вот что за манера. Вместо того что бы спасибо сказать, лучше бы то доделали, лучше бы се сделали. Не согласны? Напишите по пунктам, что не устраивает и почему, аргументируете и опубликуте тезисно, что бы можно было предметно говорить, почему конкретная вещь не устраивает. Чего то не хватает? То же самое. А каждый раз все это напоминает какойто детский сад: криков много, а толку ноль. Интерсно было бы посмотреть, как бы отриагировал ваш менеджер на проекте, будь к нему такие претензии.
Пожалуй вы правы. А что доделать, довольно-таки ясно из моей статьи
Зарегистрируйтесь на Хабре, чтобы оставить комментарий