13.12.2013, 13:17
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от nerv_
|
Пожалуйста, расскажи мне о "впечатляющих перспективах развития JS"
|
Новшества добавляемые в ECMAScript6 - это заимствования из других языков, вроде Python и Ruby. Перенимать ещё многое можно.
Сообщение от nerv_
|
Можешь перечислить 3 самые острые надуманные проблемы, которые "лечатся соглашениями", и еще 3, кот. нивелирует новый стандарт?
|
1) Невозможно уследить за типами объектов, т.к. прототип объекта может быть изменён, а instanceof проверяет наличие прототипа в объекта указанного как Function.prototype, который также можно изменить, т.е:
function Foo() {}
var foo = new Foo;
foo instanceof Foo; // true
Foo.prototype = {};
foo instanceof Foo; // false
Лечится соглашением: не делайте так, описывайте прототипы, как если бы вы описывали класс, т.е. статически и спокойно сравнивайте типы по instanceof.
В ECMA6 лечится сахаром в виде class
2) Отсутствие модулей приводит к захламлению глобального пространства.
Лечится соглашением: используйте анонимные самовызываемые функции, свойства объектов как пространства имён и паттерн "модуль".
В ECMA6 лечится сахаром module
3) Плохая поддержка автокомплита и статического анализа в ИДЕ, т.к. нет явной декларации типов.
Лечится соглашением об обязательном использовании JSDoc.
4) JavaScript жутко медленный, ужас!
Не складывайте строки с числами, не меняйте динамически прототипы во время исполнения, не вызывайте eval внутри eval и вы удивитесь, как быстро может работать ваш код.
5) Громоздкий старомодный синтаксис функций, функциональная область видимости.
ArrowFunction, let ...
Могу долго перечислять.
Сообщение от nerv_
|
Мне, почему то, монополия JS не кажется жуткой. Жутким кажется 3+ языков в браузере, в кот. придется разбираться.
|
Зачем разбираться в 3-х?
Сообщение от nerv_
|
правильная мысль, т.к. я могу писать в простом блокноте
|
Попиши на Яве или С# в блокноте. Явная декларация типов для того и создана, чтобы IDE могла вам помогать. В Dart тоже явная декларация типов, и тоже с целью поддержки в ИДЕ. Если ты не будешь пользоваться ИДЕ под Дарт, то тебя он будет только бесить.
Последний раз редактировалось kobezzza, 13.12.2013 в 13:29.
|
|
13.12.2013, 13:19
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от DjDiablo
|
Замыкания в Dart таки есть
Function say(String something) { // "Function" is an optional return type annotation
return () => print(something);
}
void main() {
var talk = say("How are you?"); // Function say(...) closes over variable talk.
talk(); // prints "How are you?"
}
|
Не уследил, когда последний раз игрался с ним - то не было
|
|
13.12.2013, 13:20
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от DjDiablo
|
А чем тебе asm.js не альтернатива elf ? (ну кроме веса конечно)
|
Как это вообще связано?
|
|
13.12.2013, 13:27
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Сообщение от monolithed
|
Как это вообще связано?
|
Ну пиши на любом языке, потом компилируй в asm.js, подключай и используй. Или тебе прям elf формат нужен ?
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
|
|
13.12.2013, 13:28
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от DjDiablo
|
Ну есть вообще то виртуальная dart машина, и сборка хромиум с интегрированной машиной. Другое дело что вряд ли она где то кроме хрома появится.
|
Я знаю, только где бенчмарки о сравнении скажем корректного JS (можно даже asm) и VM Dart?
Сообщение от DjDiablo
|
Проблемы языка не должна лечить IDE, и заменять конструкции языка комментами я бы не сказал что это ВАУ как правильно.
|
Многих раздражает писать явные декларации типов (ведь скриптовые языки часто юзаются в повседневных задачах, где эта многословность только мешается). Самым правильно решением имхо является как например в ActionScript 3: хочешь пиши, хочешь не пиши. Я не вижу преград, почему в JS не смогут добавить опциональную поддержку типов данных, т.е. новый язык для этого лепить не надо.
|
|
13.12.2013, 13:48
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
nerv_, я ответил на твои вопросы, а теперь ты назови 3 фичи Дарта, которые не могут быть эволюционно добавлены ЖС и являются фатальным недостатком, из-за которого необходимо пилить новый язык, новую VM, новую IDE, новые фреймворки ?) Просто гугл любит повелосипедить
Последний раз редактировалось kobezzza, 13.12.2013 в 13:53.
|
|
13.12.2013, 13:53
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Сообщение от kobezza
|
Самым правильно решением имхо является как например в ActionScript 3: хочешь пиши, хочешь не пиши.
|
Угу клево мне тоже нравится. В typescript так, можно опускать тип.
Цитата:
|
я ответил на твои вопросы, а теперь ты назови 3 фичи Дарта, которые не могут быть эволюционно добавлены ЖС
|
Осмелюсь предположить что дело не в том чего нельзя добавить в JS а в том чего из него нельзя убрать. Действительно добавить можно что угодно, а вот выпилить мешает обратная совместимость.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 13.12.2013 в 13:58.
|
|
13.12.2013, 13:57
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от DjDiablo
|
Угу клево мне тоже нравится. В typescript так, можно опускать тип.
|
Там это немного криво сделано. Например я не могу сделать так:
Node.prototype.foo = function () {
};
Т.к. в стандартной либе ТС описан интерфейс Node и чтобы ввести новый метод, я должен сначала расширить тот интерфейс. Конечно можно удалить файл описания стандартных типов, но тогда лишимся автокомпилита.
Они говорят, что любой ЖС валиден ТС. Берём Mootools, подключаем без специального плагина и всё ломается
Ваще у ТС ещё много проблем. Когда он вышел я с радостью бросился его юзать, но через недели 2 положил на полку. Я не говорю, что он плохой, а просто он ещё слишком молодой, а когда я узнал про фичи ECMA6 то понял, что и не хочу с JS уходить.
Сообщение от DjDiablo
|
Осмелюсь предположить что дело не в том чего нельзя добавить в JS а в том чего из него нельзя убрать. Добавить можно что угодно, а вот выпилить мешает обратная совместимость.
|
'use strict'; 'use asm'; и т.д.
Так например уже выпилена возможность объявлять переменные без var, arguments.callee, with и т.д. и никто же не умер.
Последний раз редактировалось kobezzza, 13.12.2013 в 14:06.
|
|
13.12.2013, 14:10
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
Сообщение от DjDiablo
|
Осмелюсь предположить что дело не в том чего нельзя добавить в JS а в том чего из него нельзя убрать. Просто логически если подумать то добавить можно что угодно, а вот выпилить мешает обратная совместимость.
|
Сообщение от kobezzza
|
'use strict'; 'use asm'; и т.д.
|
Ну да, asm.js выпилил из языка почти всё, оставив очень ограниченное подмножество. Хотя ничего не мешает написать внутри модуля var a = 'b', всего-то валидация будет забракована и плюшек AOT-компиляции мы не получаем, но код все равно будет работать.
То есть, как бы расширение языка поперек, а не вдоль. Не столько эволюция базы, сколько агрегация субстандартов.
__________________
Гейзенберг, возможно, читал этот тред.
|
|
13.12.2013, 14:10
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от kobezzza
|
Новшества добавляемые в ECMAScript6 - это заимствования из других языков, вроде Python и Ruby
|
Советую всем наконец познакомиться с Lua
Сообщение от kobezzza
|
Не уследил, когда последний раз игрался с ним - то не было
|
Ага:
new List<int>.generate(10, (final int index) => index + index); // [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
|
|
|
|