Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как бы скоро не пришлось писать на Dart, TypeScript ... (https://javascript.ru/forum/offtopic/42980-kak-skoro-ne-prishlos-pisat-na-dart-typescript.html)

kobezzza 13.12.2013 13:17

Цитата:

Сообщение от nerv_ (Сообщение 286400)
Пожалуйста, расскажи мне о "впечатляющих перспективах развития JS" :)

Новшества добавляемые в ECMAScript6 - это заимствования из других языков, вроде Python и Ruby. Перенимать ещё многое можно.

Цитата:

Сообщение от nerv_ (Сообщение 286400)
Можешь перечислить 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_ (Сообщение 286400)
Мне, почему то, монополия JS не кажется жуткой. Жутким кажется 3+ языков в браузере, в кот. придется разбираться.

Зачем разбираться в 3-х?


Цитата:

Сообщение от nerv_ (Сообщение 286400)
правильная мысль, т.к. я могу писать в простом блокноте

Попиши на Яве или С# в блокноте. Явная декларация типов для того и создана, чтобы IDE могла вам помогать. В Dart тоже явная декларация типов, и тоже с целью поддержки в ИДЕ. Если ты не будешь пользоваться ИДЕ под Дарт, то тебя он будет только бесить.

kobezzza 13.12.2013 13:19

Цитата:

Сообщение от DjDiablo (Сообщение 286399)
Замыкания в 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?"
}

Не уследил, когда последний раз игрался с ним - то не было:)

monolithed 13.12.2013 13:20

Цитата:

Сообщение от DjDiablo
А чем тебе asm.js не альтернатива elf ? (ну кроме веса конечно)

Как это вообще связано? ;)

DjDiablo 13.12.2013 13:27

Цитата:

Сообщение от monolithed (Сообщение 286406)
Как это вообще связано? ;)

Ну пиши на любом языке, потом компилируй в asm.js, подключай и используй. Или тебе прям elf формат нужен ?

kobezzza 13.12.2013 13:28

Цитата:

Сообщение от DjDiablo (Сообщение 286399)
Ну есть вообще то виртуальная dart машина, и сборка хромиум с интегрированной машиной. Другое дело что вряд ли она где то кроме хрома появится.

Я знаю, только где бенчмарки о сравнении скажем корректного JS (можно даже asm) и VM Dart?

Цитата:

Сообщение от DjDiablo (Сообщение 286399)
Проблемы языка не должна лечить IDE, и заменять конструкции языка комментами я бы не сказал что это ВАУ как правильно.

Многих раздражает писать явные декларации типов (ведь скриптовые языки часто юзаются в повседневных задачах, где эта многословность только мешается). Самым правильно решением имхо является как например в ActionScript 3: хочешь пиши, хочешь не пиши. Я не вижу преград, почему в JS не смогут добавить опциональную поддержку типов данных, т.е. новый язык для этого лепить не надо.

kobezzza 13.12.2013 13:48

nerv_, я ответил на твои вопросы, а теперь ты назови 3 фичи Дарта, которые не могут быть эволюционно добавлены ЖС и являются фатальным недостатком, из-за которого необходимо пилить новый язык, новую VM, новую IDE, новые фреймворки ?) Просто гугл любит повелосипедить :)

DjDiablo 13.12.2013 13:53

Цитата:

Сообщение от kobezza
Самым правильно решением имхо является как например в ActionScript 3: хочешь пиши, хочешь не пиши.

Угу клево мне тоже нравится. В typescript так, можно опускать тип.

Цитата:

я ответил на твои вопросы, а теперь ты назови 3 фичи Дарта, которые не могут быть эволюционно добавлены ЖС
Осмелюсь предположить что дело не в том чего нельзя добавить в JS а в том чего из него нельзя убрать. Действительно добавить можно что угодно, а вот выпилить мешает обратная совместимость.

kobezzza 13.12.2013 13:57

Цитата:

Сообщение от DjDiablo (Сообщение 286426)
Угу клево мне тоже нравится. В typescript так, можно опускать тип.

Там это немного криво сделано. Например я не могу сделать так:
Node.prototype.foo = function () {
};


Т.к. в стандартной либе ТС описан интерфейс Node и чтобы ввести новый метод, я должен сначала расширить тот интерфейс. Конечно можно удалить файл описания стандартных типов, но тогда лишимся автокомпилита.

Они говорят, что любой ЖС валиден ТС. Берём Mootools, подключаем без специального плагина и всё ломается :)

Ваще у ТС ещё много проблем. Когда он вышел я с радостью бросился его юзать, но через недели 2 положил на полку. Я не говорю, что он плохой, а просто он ещё слишком молодой, а когда я узнал про фичи ECMA6 то понял, что и не хочу с JS уходить.

Цитата:

Сообщение от DjDiablo (Сообщение 286426)
Осмелюсь предположить что дело не в том чего нельзя добавить в JS а в том чего из него нельзя убрать. Добавить можно что угодно, а вот выпилить мешает обратная совместимость.

'use strict'; 'use asm'; и т.д.

Так например уже выпилена возможность объявлять переменные без var, arguments.callee, with и т.д. и никто же не умер.

Дзен-трансгуманист 13.12.2013 14:10

Цитата:

Сообщение от DjDiablo
Осмелюсь предположить что дело не в том чего нельзя добавить в JS а в том чего из него нельзя убрать. Просто логически если подумать то добавить можно что угодно, а вот выпилить мешает обратная совместимость.

Цитата:

Сообщение от kobezzza
'use strict'; 'use asm'; и т.д.

Ну да, asm.js выпилил из языка почти всё, оставив очень ограниченное подмножество. Хотя ничего не мешает написать внутри модуля var a = 'b', всего-то валидация будет забракована и плюшек AOT-компиляции мы не получаем, но код все равно будет работать.
То есть, как бы расширение языка поперек, а не вдоль. Не столько эволюция базы, сколько агрегация субстандартов.

monolithed 13.12.2013 14:10

Цитата:

Сообщение от 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]


Часовой пояс GMT +3, время: 15:12.