Разработчики JavaScript-движка V8 и проекта Chromium представили (http://blog.chromium.org/2012/02/future-of-javascript-take-p...) список новых возможностей JavaScript, доступных в экспериментальной ветке (http://dev.chromium.org/getting-involved/dev-channel) браузера Chrome. Указанные возможности реализуют некоторые элементы будущего стандарта JavaScript, развиваемого (http://wiki.ecmascript.org/doku.php?id=harmony:proposals) комитетом ECMA под кодовым именем "Harmony". Новую спецификацию планируется утвердить до конца следующего года, ожидается, что это будет наиболее значительным обновлением JavaScript за всю историю развития этого языка. Для активации новых элементов JavaScript в браузере Chrome следует активировать опцию "Experimental JavaScript features" в настройках "chrome://flags".
Некоторые из реализованных возможностей:- Лексический контекст (http://wiki.ecmascript.org/doku.php?id=harmony:block_scoped_...): в режиме "ES5 strict" в дополнение к "v...
URL: http://blog.chromium.org/2012/02/future-of-javascript-take-p...
Новость: http://www.opennet.me/opennews/art.shtml?num=33071
Эх, сделали бы они некий вид структур... Передать не могу, как утомило нарываться на то, что кто-то когда-то, передавая хэш с параметрами, перепутал имя одного из параметров.Впрочем, и то, что есть, очень полезно - один лексический контекст чего стоит. Думаю, после его введения использование var моментально станет дурным тоном.
Сделай свои любимые структуры себе сам.
obj = {a:1,b:2}
Object.seal(obj)
obj.a = 5 //Ok
obj.c = 5 //No
1) это должно быть удобным
2) это должно проверяться в момент передачи параметра в функцию.Смысл здесь - защититься от глупых описок и от забытых обязательных параметров.
> 1) это должно быть удобнымчто в этой одной строчке неудобно? Слишком мало печатать?
> 2) это должно проверяться в момент передачи параметра в функцию.function(a,b){
if (arguments.length!==2){throw new Error('Мало параметров')}
}> Смысл здесь - защититься от глупых описок и от забытых обязательных параметров.
Не надо свои быдлокодерские привычки переносить на всех.
По сравнению с 95% покрытием кода тестами, статическая проверка компилятором -детский лепет.
пример функции не катит:
1) ну суну я вместо результат вызова функции саму функцию, заббыв скобки - оно не заметит:
foo(2, bar) вместо foo(2, bar())
2) пачка параметров обычно отдаётся как объект - что туда засунули - один бог знаетА покрытие тестами в модульном RIA, где половина параметров в модуль как пришла, так и ушла транзитом (а в ряде сценариев - не используется вобще), а связи на лету меняются в зависимости от состояния - это 5. Отдельный модуль так протестировать - не вопрос, но не целое приложение. Ну или у вас объем тестов будет в десять раз больше объёма кода.
И самое мне непонятное - за что бьётесь-то? Для пользователя библиотеки или там функции предлагаемая штука ничем не проблемна, проверка происходит при вызове функции. Для разработчика - дык не хочешь - не используй.
И, наконец, такие записи - это отличный способ документирования, кроме всего прочего.
>А покрытие тестами в модульном RIA, где половина параметров в модуль как пришла, так и ушла транзитом (а в ряде сценариев - не используется вобще), а связи на лету меняются в зависимости от состояния - это 5. Отдельный модуль так протестировать - не вопрос, но не целое приложение. Ну или у вас объем тестов будет в десять раз больше объёма кода.Зачем вы лезете в эту область, хотя вы не программист?
> Зачем вы лезете в эту область, хотя вы не программист?Зато Д`Артаньянов в треде явно многовато.
Я как раз программист. И JS у меня не первый язык и даже не десятый, так что сравнить фичи языка я уж как-нибудь в состоянии, как и оправданность 95% покрытия тестами модульного, на лету собирающегося приложения.
Вы заблуждаетесь. Человек высказавший такое мнение - не программист.
Так же как человек ,заявляющий, что может лечить насморк, но только если Венера в созвездии рыб - не доктор.
Интересно было бы услышать от системного архитектора бортовых систем самолета, что дескать, тестировать он их не будет, они больно сложные.
К счастью, на такую работу допускают только программистов.
Перечитайте еще раз. Тестирование модулей - да, кто б спорил. Тестирование целого RIA - нет. Слишком много разных code path - ни о каких 95% покрытия речи быть не может при разумных затратах - подчеркиваю, речь о RIA. У архитектора бортовых систем самолета ситуация "несколько другая", особенно по приемлемым затратам на тестирование. Но если есть желаение - можете поинтересоваться мнением архитектора бортовых система самолетов - вот здесь: http://www.digitalmars.com/ - только к горю вашему он большой сторонник статической типизации.
>Тестирование целого RIA - нет.Домыслы непрограммиста.
>при разумных затратах
Для непрограммистов я могу посоветовать брать исходные тексты из /dev/random.
Работать они не будут, точно так же как и не оттестированное приложения, а если результат одинаков зачем платить за разработку?
Давайте вы всё же смените тон? Мы не в вакууме живём, и всегда есть бюджеты и сроки.
А вы то сами кто?
Знаете, в идеальном мире, где один лишь вы - да, вы программист. В реальном мире, ездите ли вы на Хаммере или на тягаче Скания - это ещё не говорит о том, что вы один - тру водитель, а все остальные - быдло.
> А вы то сами кто?Человек, Который Лучше Всех Знает, Как Надо.
За пять долларов сделаю тебе еще и статическую типизацию в JS.
Не сделаете. С удобным синтаксисом, во всяком случае. Впрочем, если не шутите - пишите в личку, обсудим :-)
> Не сделаете. С удобным синтаксисом, во всяком случае. Впрочем, если не шутите
> — пишите в личку, обсудим :-)а что, проект действительно востребован? не то, чтобы я был готов взяться за него вот прямо сейчас, но…
> За пять долларов сделаю тебе еще и статическую типизацию в JS.Готов скинуться. Сделайте уж для всех :)
>> За пять долларов сделаю тебе еще и статическую типизацию в JS.
> Готов скинуться. Сделайте уж для всех :)благодарю, не стоит за всех расписываться. мне вот не нужна, например.
впрочем, не вижу, на самом деле, проблемы сделать опциональную типизацию с type inference. только какой тогда сакральный смысл писать на js, если всё равно внешним процессором исходник гонять? уж лучше сделать компилятор в js того же стронгтолка, например, или typed scheme.
Браузеры должны поддерживать универсальный байт-код, в который можно было бы компилировать программы на различных языках, а не содержать встроенный высокоуровневый ЯП, который теперь все равно нередко используется в качестве промежуточного представления (компиляторы чего угодно в JavaScript), а он для этого плохо приспособлен.
Оно бы да - но на это шансов яво меньше, чем на (постепенное) приведение JS к приемлемому виду. В принципе, там не так много надо - кроме того, что в топике, осталось добавить необязательную типизацию для примитивных типов и какой-то вид описания сложных типов - что-то вроде:
typedef myType... {
callable foo,
callable bar(AnotherType a, ~int b) : ~int,
~int y,
String z,
AnotherAnotherType t,
Object ?optionalvar
}где ~ означает "корерктно преобразуется" (т.е. для ~int строка "22" будет принята, а строка "10.9" или "foo" отвергнута,
три точки после имени типа означают, что могут быть и другие члены любых типов, ? - необязательное поле.Синтаксис, понятное дело, я от балды нарисовал, но идея ясна:
- можно наложить огранчиение на переменную или параметр функции, указав, какие поля должны быть, какие могут быть и могут ли быть какие-то дополнительные.по сути - это просто способ упростить проверку параметров настолько, чтобы её начали пользоваться.
Лол. "Немного"Вы в курсе сколько необязательной типизации в Питоне ждут ?
Не в курсе. Зато в курсе, что мозилловцы для джаваскрипта её таки сделали.
На самом деле, куда большее неприятие (у меня лично) вызывает полная неопределенность когда что и в какой последовательности выполняется. Причем Deferred тут помогает только отчасти - вопросов все равно масса.Причем, я так понимаю, что эти вопросы не только у меня одного. Иначе гугловский драфт просто был бы просто не нужен.
А в целом монополию на браузеры <troll mode>этого недоязыка</troll mode> ява-скрипта таки стоит прекратить. Байт-код умеют выполнять все, так в чем же дело?! Лично мне, как питонятнику, было бы прикольно писать скрипты на питоне, не только на стороне сервера. Да и рубиновцы, я думаю, тоже не отказались бы писать скрипты на ruby прямиком на страницах.
Единственно, кто при таком раскладе будет против (а баба-яга всегда против), так это жабовцы, имхо. Но, как известно, проблемы негра мало е###т шерифа!
Эм... О какой неопределённости речь? Пример можете привести?
Хм... словами это... да...
Ну пускай так: у меня выполняется колбак, допустим, щелчка мыши по таблице, в котором мне надо за ради проверки получить ряд параметров со стороны сервера. Получаю ебстесно в json и так же ебстесно по rest. Моя трабла в том, что эти данные я получаю так же асинхронно!То есть если бы у меня, к примеру, в колбэке была некая safe переменная, то я мог бы написать следующее:
d = new Defferred();
...function(){
this.a = new safe();
self = this;
d.xrhGet({
url: '/someurl/,
function(){
self.a = 5;
}
});
return this.a;
}зная совершенно точно, что выполняющийся асинхронный Get наложит блокировку на защищенную переменную 'a' и НЕ даст выполнится return ДО своего выполнения. Но у меня такой возможности нет и я должен писать "спагетти".
ОК, можете считать меня неосилятором, но без семафоров, критических секций и защищенных переменных я себя ощущаю как поверх желе - отбросить может в любую сторону. И это несколько напрягает.
> ОК, можете считать меня неосилятором, но без семафоров, критических секций и защищенных
> переменных я себя ощущаю как поверх желе - отбросить может в
> любую сторону. И это несколько напрягает.Вы бредите? Какие семафоры? Какие секции? Потрудитесь перед использованием языка программирования хоть прочитать спецификацию.
А вы прочитать пост целиком!
Я собсно об этом и пишу: напрягает что этих механизмов нет как нет
> А вы прочитать пост целиком!
> Я собсно об этом и пишу: напрягает что этих механизмов нет как
> неткагбэ потому, что в оригинале и многопоточности нет. а потому механизмы, тобой перечисленые, не нужны.
ну, помимо того, что они не обязаны являться частью языка.
> и многопоточности нетПрозвучала та фраза которая нужна! Именно это и есть напряг, поскольку с момента возникновения AJAX многопоточность стала просто.... короч, без нее просто никуда!
Да мы уже поняли, что javascript не для вас.
>Да мы уже поняли
>мыУчимся говорить за себя!
И да, _я_ понял что мгопоточность не для вас!
> Учимся говорить за себя!вот именно. например, прекращаем говорить, что «после аякса без многопоточности никуда».
> И да, _я_ понял что мгопоточность не для вас!Совершенно верно. Мне node.js вполне устраивает.
> Прозвучала та фраза которая нужна! Именно это и есть напряг, поскольку с
> момента возникновения AJAX многопоточность стала просто…. короч, без нее просто никуда!а мужики-то и не знают. я понимаю, что голова — она одна, и две концепции туда уже не помещаются, но зачем это прилюдно демонстрировать-то?
>> Прозвучала та фраза которая нужна! Именно это и есть напряг, поскольку с
>> момента возникновения AJAX многопоточность стала просто…. короч, без нее просто никуда!
> а мужики-то и не знают. я понимаю, что голова — она одна,
> и две концепции туда уже не помещаются, но зачем это прилюдно
> демонстрировать-то?ОК. Покажите мастер-класс и продемонстрируйте кусок кола который стыкует синхронный обработчик с возвращающим данные асинхронным запросом в нем!
P. S.
А мужики в гугле не знали что ява-скрипт такое могет и решили изобрести драфт. Мдя.. лоханулись... Столько кода и зря! :)
> кагбэ потому, что в оригинале и многопоточности нет.С появлением веб-воркеров она появилась. Заметь как работают в peacekeeper тесты с параллельной генерацией картинок. Да, лиса с 1 процессом в аккурат жрет все 4 ядра.
Хм... не знал об этом. Буду грызть доки в этом направлении. Спасиб за наводку.
дык я специально про оригинал оговорку сделал: давал человеку шанс исправить сказаную глупость и поговорить предметно.
> дык я специально про оригинал оговорку сделал: давал человеку шанс исправить сказаную
> глупость и поговорить предметно.Странный какой-то програмер, если я (не являющийся профессиональным JS-программером вообще ни разу) такое знаю, а он - нет :)
"...и почему-то бывает порой, не разобраться кто шут, кто король" :D
он, кажется, вычитал где-то умную вещь: что настоящий программист может писать почти на любом языке не занимаясь глубоким изучением оного. откуда, по-моему, сделал забавный вывод, что настоящие программисты так и пишут — ничему не обучаясь. старается соответствовать.
> обучаясь. старается соответствовать.На самом деле мне просто не понятно как можно пробакланить эту (довольно вкусную) плюшку, хотя-бы минимально интересуясь предметной областью и купиться на твой довольно простой и незатейливый троллинг (который мало того что сработал, так еще и доставил порцию лулзов).
Ну, пользоваться ими пока всё равно нельзя - т.к. IE
> Ну, пользоваться ими пока всё равно нельзя - т.к. IEДык показывай юзерам ишака "replace you browser and press any key". Глядишь MS постепенно призадумается о том что так процент рынка можно и до нуля просрать. Они б и в минус просрали, если б это было возможно :D. С таким "развитием" как у них это было бы заслуженно.
Пропаганда - это хорошо, но пока не бьёт по карману. Упадёт процент IE хотя бы втрое - можно будет и так, при аккуратной реализации. А пока - ну максимум, в очень некоторых проектах можно IE8 дропнуть. Девятка будет поодерживаться всеми разумными людьми еще года два как минимум. ну а к десятке список претензий будем составлять после выхода. Пока - смотрится сравнительно неплохо.
ну вот: кажется, ты его плохому научил. он и обычный-то js не смог осилить… помучается и пойдёт опять на форумах плакаться, на этот раз про то, что вебворкеры плохие, и опять не получилось лочку сделать в XMLHttpRequest.
Машины состояний используйте, они в JS это очень хорошо лечат.
Второй вариант - чтобы не плодить спагетти - через события всё разруливать, тоже вполне приличный код получается и писать проще, но архитектура видна хуже, чем у автомата.
То есть
Dispatcher.bind('XYZresponse', function(arg){
console.log(arg) //prints '5'
})
xrhGet({
url: '/someurl/,
function(){
Dispatcher.trigger("XYZresponse", 5);
});
Первый бесплатный урок:
С большой буквы в js пишутся только имена Конструкторов.
Это общепринятая практика.
> Первый бесплатный урок:
> С большой буквы в js пишутся только имена Конструкторов.
> Это общепринятая практика.вообще-то и имена синглтонов, каковым диспетчер явно является.
Нет.
>диспетчерСамообразование?
Именно синглтон и есть. И события, раскиданные по неймспейсам модулей, если таковые есть: Dispatcher.trigger("myModule.myEvent", arguments) - такой подход позволяет из одного места четко отследить последовательность прохождения событий по всему приложению, и не требует ничего переделывать если какое-то событие в результате рефакторинга признаем глобальным (т.е. на него может отвечать не только водуль, его запустивший) - меняем это дело в документации да в утилите проверки кода ывставляем правило, чтобы не ругалась на подписку на данное событие из чужого модуля.
> Нет.орли?
>>диспетчер
> Самообразование?чем тебе не нравится слово?
А еще с большой буквы чатос пишутся имена глобальных сущностей - например, Backbone из backbone.js. YUI тоже этого правила не придерживается.
а если немного глубже пойти в js (я понимаю, почему ты не стал человека пугать, понимаю), то передавать в триггер можно замыкание. а потом и триггер упразднить, всё равно одно замыкание у нас уже есть. и получим автомат, где состояния представлены замыканиями. диковатая немного конструкция с точки зрения пуриста, но вполне жизнеспособная.ладно, ладно: где *переключение состояний* представлено замыканиями. а потом уже вышеописаного мутанта.
Человек линейный код просил, поэтому так. Плюс это хорошая документация - именованное событие.
> Плюс это хорошая документация - именованное событие.дык замыкание тоже именовать можно, хотя никто почти этого и не делает.
Это да, всё забываю про эту фичу.
Алексей, это действительно работает!Вы мне доказали свою правоту и без слов "бредите", "прочитайте спецификацию" и т. д. Это впечатляет! Надеюсь Вы не будете за иллюстрацию в коде своей правоты просить мзду, как некоторые товасчи? :) Шутю, конечно!
Но (кроме шуток!), переходить от написания бакэндов на строгих ЯП к модели яваскрипта действительно очень не легко, и тут Вы все правильно угадали.
В общем за _вежливый_ диалог - спасиб. За намеки - тем более. Остальное - добью сам.
Удачи во всем!))
P. S.
Кстати, воркеры (я о них оказывается знал, просто не сразу понял о чем речь) в dojo и jquery тоже (местами), - не всегда адекватно себя ведут. Скажем так, я сталкивался с проблемами. Такое чувство. что с контекстами там не все прозрачно, или я не все еще тут понимаю.
> Алексей, это действительно работает!breaking news!
Спасибо :-) Ну вот, говорил я народу - культурнее надо...
> Лично мне, как питонятнику, было бы прикольно писать скрипты на питоне, не только на стороне сервера. Да и рубиновцы, я думаю, тоже не отказались бы писать скрипты на ruby прямиком на страницах.То есть ты хочешь сказать что давай каждый будет писать кто в лес кто по дрова? И теперь вместо использования фаербага надо выучить тучу ваших язычков и плюс найти то что заменит фаербаг для ваших язычков? А для того чтобы поправить для себя какой-нибудь опенсурс форум, портальчик и ещё что-нибудь надо оглядываться и искать не дураков пишущих не на этих ваших язычках?
> То есть ты хочешь сказать что давай каждый будет писать кто в лес кто по дрова?Ну так даже сам гугел не хочет писать на жабоскрипте. И не пришет (и правильно делает).
http://code.google.com/intl/ru-RU/webtoolkit/overview.html
В Google Web Toolkit (GWT) интерфейс AJAX пишется на языке программирования Java, а затем GWT кросс-компилирует его в оптимизированный JavaScript
у меня, скажем, компилятор для гибрида нескольких языков, который выплёвывает на выходе исполняемый js. правда, человекочитаемым выхлоп не является. но js. тебе сильно полегчает от этого, если придётся в скрипт залезть?вообще-то код универсальной виртуальной машины (при условии, что она сделана достаточно минималистично) разобрать попроще будет. а поскольку оно всё изначально объектное (кто сказал c++? прототипы, прототипы), то дописывать и править любой метод любого объекта можно на любом языке, который поддерживает генерацию кода для нашей vm.
не вижу, собственно, откуда столько паники. ну, помимо того, что ты кухонный теоретик, и считаешь, что на работу людей набирают так же, как на пятничное бухалово.
> Браузеры должныБраузеры тебе ничего не должны.
JVM в виде java-аплетов уже пролетела, как фанера над Парижем.
JVM пролетела отнюдь не из-за байткода, а из-за громоздкости языка, толщины рантайма и необходимости этот рантайм отдельно устанавливать. Ну и дыры не последнюю роль сыграли. Причем всё кроме необходимости установки сейчас бы сожрали и не поморщились, включая дыры - каналы толстые, языков под JVM навалом, есть и весьма приличные (скала та же). Ну и не в курсе, насколько хоорошо оном огло с самой страницей взаимодействовать - но это точно лечится, вон, тот же флеш интегрируется идеально.
> вон, тот же флеш интегрируется идеально.Настолько что не работает копипаст и нельзя ссылкой заадресовать часть мувика более гранулярно чем "монолитная болванка, одна штука". Ну вот тут я могу послать юзера на лично ваш отцитированный комент. А теперь то же самое но с флешом - слабо?
Не о том речь. А о том, что можно из JS вызывать AS (и таким образом информировать о DOM-событиях либо запрашивать сервис) и наоборот из AS дергать JS, и таким образом предоставлять флешу возможность делать нужные изменения в DOM, причем изменения эти ограничиваются тем, что допустит JS-обёртка. То есть сам механизм плагинов это позволяет, вопрос лишь в том, умели ли этим пользоваться апплеты. А то, что адоб не осилил нормально реализацию сделать - кто б спорил.Кстати, я не в курсе - а что сейчас модно использовать, чтобы организовать взаимодействие с недоверенным скриптом - ифреймы?
> Не о том речь. А о том, что можно из JS вызывать
> AS (и таким образом информировать о DOM-событиях либо запрашивать сервис) и
> наоборот из AS дергать JS, и таким образом предоставлять флешу возможность
> делать нужные изменения в DOMМожно, но костыльно. Кстати в порядке извращения видится запуск яваскриптового парсера байткода, и далее... хм... ну вы поняли :). Вон например у Фабриса Белларда запускается некистый такой "интерпретатор байткода", после чего пингвин лихо взлетает прямо в браузере. Такой вот байткод из яваскрипта :)
> Кстати, я не в курсе - а что сейчас модно использовать, чтобы
> организовать взаимодействие с недоверенным скриптом - ифреймы?У меня взаимодействие с недоверенными скриптами организует NoScript, мне это кажется наиболее оптимальным вариантом :). Да, моя точка зрения по этому вопросу наверное не совпадет с точкой зрения вебдевелов тянущих всякий шит откуда попало и как попало.
NoScript - это не о том :-) Задача выглядит примерно так. Вот вы хостер какой-то среды - от фейсбука до блгосервиса. И вы хотите дать возможность сторонним программистам писать приложения для вашей среды. Вопрос: как их интегрировать в страницу и при этом не поступиться безопасностью пользователя? у того же фейсбука для этого используется жуткая система костылей и подпорок в виде переопределения доступных стороннему скрипту браузерных объектов. У вконтакта с флешовыми приложениями всё держится как раз на том, что бридж "JS-флеш" может очень точно ограничить взаимодействие флешки со страницей четким API. Вот и вопрос - можно ли подобное сделать как-то менее извращенно, чем у фейсбука?
> Вот и вопрос — можно ли подобное сделать как-то менее
> извращенно, чем у фейсбука?молиться, поститься… будут костыли — просто в силу того, что встроеного механизма песочниц у js нет. костыли можно только немного «украсивить», навесив getters/setters, чтобы каждый метод не переопределять. и то…
Ну вот есть подозрение, что iframe + SameOrigin Policy чем-то таким послужить могут, а так - весьма неутешительный ответ. Очень хочется в одном проекте дать пользователям вставлять в свои страницы виджеты, которые могли бы исполняться у других пользователей.
ну, единственное, что тут может утешить, хоть и с оттенком издевательства — я думаю, что не пройдёт и десяти лет, как песочницы вставят в очередную ревизию стандарта.
поглядим, может, и получится выкрутиться. В принципе, посадить каждого пользователя на совй домен - извращение, но не смертельное, вон ЖЖ так живёт.
> В принципе, посадить каждого пользователя на
> совй домен — извращение, но не смертельное, вон ЖЖ так живёт.…кроме тех, кто выбрал себе имя, начинающееся с подчёркивания, хихикс.
То есть надо делать домены как id пользователей, и наружу не показывать... Логично, зачем ограничиваться правилами для доменых имён.
> То есть надо делать домены как id пользователей, и наружу не показывать…
> Логично, зачем ограничиваться правилами для доменых имён.кстати, может сработать. я, правда, точно security-правил не помню, но.
+1.
Уже много кто допер мозгами до этого. Кто-нибудь понаглее придет в браузерную среду и потеснит существующих олдфагов на рынке.
может тут кто прояснит ситуацию с репозиторием (dev ppa) хромиума под убунту, уже месяц нет обновлений
давно забили на этот РРА, качай скриптом хоть каждый час 64-битный Хромиум:#!/bin/bash
cd ~/Загрузки/VAL=`curl http://commondatastorage.googleapis.com/chromium-browser-sna...
wget http://commondatastorage.googleapis.com/chromium-browser-sna.../$VAL/chrome-linux.zip
killall chrome
rm -rf ~/.local/opt/chrome-linux/
unzip chrome-linux.zip -d ~/.local/opt/
sleep 10
rm chrome-linux.zip--
p.s. авторам РРА нужно высказать... и больше и чаще :)
спасибо
Если включить данную опцию, то в хроме не будет работать включение расширений для gnome-3 с сайта extensions.gnome.org