Вход

Просмотр полной версии : ECMA ужас


i.o.
13.05.2011, 05:12
Котярин линк - http://www.addconf.ru/event.sdf/ru/add_2011/authors/DmitrySoshnikov/368
Ваши мнения, господа.

BlooDHounD
13.05.2011, 12:26
ну это не то что бы новшества ecma. просто это коснулось js и рашен js-сообщество проснулось.

wvxvw
13.05.2011, 12:28
Понравилось то, что после просмотра Vimeo предложил посмотреть другое видео "Коммуникативные ошибки ИТшников и как их избежать". :)

А по содержанию... не знаю, это все больше и больше выглядит так, что есть несколько разработчиков, которые не могут договориться, как сделать хорошо, поэтому делают много. На уровне полезностей - ну, чего-то есть стоящее, чего-то видится как, наоборот лишнее / плохое. Как бы энтузиазма особо не вызывает... особо дибильным выглядит #(this) { this.чегоТоТам(); } - явно же костыль, уже изначально, еще на этапе проектирования заложеный в язык... эх. Еще более дибильно то, что во многих языках # начинает комментарий. Если там кто-то пытался использовать яваскрипт через CGI, то облом будет с такими именами. Да и вообще не понятно, чем слово function было так плохо и непонятно, что его нужно было заменить каким-то левым значком.

i.o.
13.05.2011, 12:29
лично мне не кажется, что let-ы, #-функции с неявными ретурнами и обилие прототипов облегчат жизнь)
И второе - интуация подсказывает, что кол-во js Г-кода возрастет на порядок, после начала поддержи этого всего в js.

Добавлено через 4 минуты
Да и вообще не понятно, чем слово function было так плохо и непонятно
слишком длинное и создающее "синтаксический" шум.)

wvxvw
13.05.2011, 12:43
Про длину слов и сокращений - как раз недавно пример вспомнил. Как-то меня попросили передать сценарий для мультфильма, и я решил его по-дороге прочитать. Сценарий был про маленькую девочку Женю, у которой то складывалась то не складывалась ее незатейливая детская жизнь. В общем и целом сценарий не предполагал быть смешным... но автор решил, что писать полное имя действующих лиц, в то время как читатель их уже наверное запомнил и так, да и вообще действующее лицо было-то всего одно... вобщем, решил сэкономить. И текст поэтому изобиловал следующими фразами: "В детстве Ж. была сркомной и застенчивой, но когда подросла..."

i.o.
13.05.2011, 12:57
"В детстве Ж. была сркомной и застенчивой, но когда подросла..."
вот ведь :D

Добавлено через 13 минут
Проблема:

let object = {
start: function(){
setTimeout(function(){this.continue();}, 500);
},
continue: function(){...}
}
object.start();



Решение через #

let object = {
start: #(this){
setTimeout(#{this.continue();}, 500);
},
continue: #(this){...}
}
object.start();



Традиционные варианты решения:

вариант 1:

let object = {
start: function(){
setTimeout( (function(){this.continue();}).call, 500, this );
},
continue: function(){...}
}
object.start();


вариант 2:

let object = {
start: function(){
setTimeout(this.continue.call, 500, this);
},
continue: function(){...}
}
object.start();


Выходит, что проблема на пустом месте?

Добавлено через 16 минут
импорты:

import Library.*; // импортировать все
import Library.{query,ajax:xhr}; // импортировать только нужное

омг

Добавлено через 23 минуты
ПС: Кто-то уже исправил название темы... "УжОс" - ошибка была допущена намеряно :)

BlooDHounD
13.05.2011, 21:22
@i.o. читайте правила форума. "удафизмы" запрещены.

i.o.
13.05.2011, 21:44
я не знаком с лексикой "удава"

Котяра
13.05.2011, 21:45
Есть такое понятие, как "синтаксический сахар"...
[1,2,3].map(#(x){x*x});
это вроде и сладко, но что-то аж зубы сводит..

wvxvw
14.05.2011, 02:08
Тут еще фишка с этим сахаром в чем... Изначальная идея создания ECMAScript, да и вообще любого языка с Си-подобным синтаксисом была в том, чтобы за "мета данными" спрятать какие-то низкоуровневые повторяющиеся опреации. Т.е if-else это сокращенная форма записи из трех goto, function - тоже "мета данные" языка. И в этом есть какая-то идея и общий смысл. Т.е. язык работает как своего рода фреймворк, с уже заготовленными шаблонами в виде примитивов этого языка. Есть языки более "простые", в которых этого нет. И в них для того, чтобы объявить функцию, ее действительно нужно описать со всеми регалиями. Чтобы объявить свойство, его нужно описать и описать кучу правил к нему. Достоинство такого подхода - большое разнообразие и неограниченный полет фантазии. Недостаток - сложность, как восприятия, так и реализации.
Я вот не могу понять зачем в языке, который будет в 99% случаев использоваться для манипуляций HTML нужно так подробно описывать свойства объектов, но мало того, они еще и двух типов будут. А при этом еще и нестрогой типизации. Как будто мало было всяких уродских решений, как проверить значение присвоенное переменной - так сейчас к этому добавится еще и проверка на то, что объект реализует toString(), что он перечисляемый, не запечатанный, не замороженный...
И вот тут у меня возникает когнитивный диссонанс :) Почему объявления свойств нужно было неимоверно усложнить, (при этом объявление методов осталось очевидно по-старому простым), и в то же время нужно "упростить" слово function, которое и понятно, и универсально, и да не мешало оно никому...
Тоесть, что получается, вместо const FOO = "bar" предлагается писать Object.createProperty(foo { FOO: "bar" }), а вместо function(), #() - почему?
Мне так кажется, что все это потому, что в C++0x и в C# есть специфический синтаксис для анонимных функций, и тут в ECMAScript приспичило сделать "как у них", вообще не разобравшись что к чему.

"Старые" языки, откуда собственно растут ноги этих новшеств страдают от собственных недостатков - результатов именно тех самых вещей, которые тут предлагается добавить. При этом другие языки, чуть по-моложе, но все же с приличным опытом нашли вполне приемлимые решения. Это я о модулях :) JavaScript изначально объектно-ориентированный, и самый напрашивающийся вариант инкапсуляции - да такой же как в Java, C#. Не понятно, как они собираются решать коллизии имен, которые естесственным образом возникнут при использовании таких модулей. В том смысле, что мне не понятно, как при той системе, которую они придумали они смогут, например, загрузить два модуля с одинаково назваными экспортированными функциями и как они их смогут использовать внутри третей функции без танцев с бубном.
Export / intern предполагают наличие так же shadows, import-from-package, nicknames и use :) Ну в том смысле, что если уже копировать, так полностью, скопированное наполовину не будет работать.