- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
function loading() {
$('#close').hide(function() {
$('#loading').show(function () {
setTimeout(function(){
$('#loading2').show(function() {
setTimeout(function(){
$('#loading3').show(function () {
setTimeout(function(){
$('#vk').show(function() {
setTimeout(function(){
$('#odn').show(function() {
setTimeout(function(){
$('#fb').show(function() {
setTimeout(function(){
$('#tw').show(function () {
$('#geo').show();
setTimeout(function(){
payment();
},1300);
});
},1600);
});
},1700);
});
},1400);
});
},1600);
});
},1900);
});
},1600);
});
});
}
Из исходного кода сайта, "раскрывающего" анонимов на аск.фм
guest 14.05.2014 02:18 # +2
1024-- 14.05.2014 08:26 # +4
guest 14.05.2014 08:37 # 0
bormand 14.05.2014 09:42 # +1
1024-- 14.05.2014 10:30 # +3
> прекрасного языка
прекрасный язык, мне очень нравится
> фор нормальный
фор нормальный
> типы не туда приводятся
Инт неявно приводится к даблу - пожалуй, единственная проблема. Возникает она, когда начинаешь использовать жс не по назначению вместо сишки в погоне за перфомансом. В этом случае следует начать спокойно дышать, выбросить из головы богомерзкие мысли и взять более уместный язык.
brutushafens 14.05.2014 10:42 # +2
3.14159265 15.05.2014 01:42 # +2
Удваиваю.
Вот пусть борманд первый и бросает на нём писать.
LispGovno 14.05.2014 10:57 # 0
На JS то? Их использовние же выглядеть будет как говно не меньше чем у топикстартера
bormand 14.05.2014 11:18 # 0
guest 14.05.2014 20:45 # 0
Расчет на то, что у юзеров отключены ники?
1024-- 15.05.2014 17:20 # +2
Посмотрите на главную... Зачем Вы их созвали? :)
bormand 14.05.2014 09:11 # +1
Циклов там дохуя:
for (a in b)
for each (a in b)
for (a of b)
Вот только первый - неюзабельное говно, второй успели объявить устаревшим до его внедрения, а третий пока только в огнелисе ;)
3.14159265 15.05.2014 01:36 # +1
for each (a in b)
SyntaxError
for (a of b)
SyntaxError
Цикл for там ровно 1 (один).
for (var a=0;a<n;++a){...}
bormand 15.05.2014 05:33 # +1
Ну толсто же... В новых фф, к примеру, они работают: > Цикл for там ровно 1 (один)
Вменяемо работающий и кроссплатформенный цикл там ровно 1 (один).
fxd
В крестах, пыхе, жабе, шарпе, питоне, да и в других языка уже давным-давно есть форич для коллекций. И только жабоскриптоёбы продолжают жрать кактус с сишным for'ом, и утверждать, что все нормально, так и надо.
guest 15.05.2014 09:18 # 0
bormand 15.05.2014 09:30 # 0
3.14159265 15.05.2014 13:56 # +4
В фф много чего полезного работает - генераторы-итераторы, yield, let.
Проблема в том что больше нигде кроме фф они не работают.
eth0 16.05.2014 19:13 # 0
Жаль только, что огнелис ВНЕЗАПНО стал говном.
P.S. Пишу с 28-го, брата никогда не было.
brutushafens 16.05.2014 20:25 # +1
guest 16.05.2014 20:33 # +2
Тарасокомп?
bormand 16.05.2014 21:04 # +1
А результат GetElementByTagName никуда не сохраняешь случаем? Сейчас затестим.
bormand 16.05.2014 21:10 # +2
Запускалось 10 таких таймеров.
До теста - 1.3Gb виртуальной, 0.5Gb юзается
Во время теста - 1.3Gb виртуальной, 0.5Gb юзается
Разницы никакой. Видимо или пофиксили, или эти 500 мег - порог для сборщика мусора.
Кинь код, которым получалось завалить, если он у тебя сохранился.
wvxvw 17.05.2014 16:31 # 0
wvxvw 17.05.2014 16:38 # 0
eth0 17.05.2014 17:31 # 0
wvxvw 17.05.2014 20:38 # 0
Vasiliy 15.05.2014 14:03 # 0
bormand 15.05.2014 05:43 # +2
ПРИШЛО ВРЕМЯ ЗАМУТИТЬ СКОП.
СКОП САМ НЕ ЗАМУТИТСЯ.
ЗАВЕРНИ ЕГО В ФУНКЦИЮ, ЗАВЕРНИ ЕЩЕ РАЗ.
ЗАЧЕМ МНЕ НУЖЕН LET, У МЕНЯ НЕТ ВРЕМЕНИ ЕБАТЬСЯ С НИМ.
ЛУЧШЕ ЕЩЕ РАЗ ОБЕРНУТЬ СКОП В ФУНКЦИЮ.
guest 15.05.2014 21:21 # 0
3.14159265 16.05.2014 00:43 # +3
Я тебя немного просвещу, чтоб ты не выдавал очередную порцию херни.
Капсболд - это когда текст написан одновременно КАПСОМ и болдом.
guest 16.05.2014 00:45 # −4
guest 16.05.2014 20:34 # 0
guest 14.05.2014 20:45 # 0
1024-- 15.05.2014 05:43 # 0
Что-то такое:
guest 15.05.2014 09:17 # 0
То есть, стандартного await нет, все должны пилить все реально удобно, реально падсибя?
1024-- 15.05.2014 12:12 # 0
P.S. array[i].call(this); надо заменить на array[i].call(context);, т.к. внутри функции вызывающий может его потерять. Но свой код я не ещё запускал - может ещё баги есть.
brutushafens 14.05.2014 10:37 # +1
LispGovno 14.05.2014 10:54 # +1
brutushafens 14.05.2014 10:58 # +2
bormand 15.05.2014 05:36 # +1
3.14159265 15.05.2014 13:53 # +1
Эдакий thread sleed/yield.
brutushafens 15.05.2014 20:48 # +1
LispGovno 14.05.2014 10:55 # +1
wvxvw 14.05.2014 13:54 # 0
Т.е. у ячейки должно быть два метода принимающие "рабочего": "старт" и "финиш". Старт вызывает у "рабочего" "ждать", а "финиш" вызывает у рабочего "следующий". Своего рода комбинация посетителя со стейтом.
roman-kashitsyn 14.05.2014 14:02 # 0
wvxvw 14.05.2014 14:09 # 0
roman-kashitsyn 14.05.2014 14:11 # 0
wvxvw 14.05.2014 14:30 # 0
Может и не дословно, но примерно так.
3.14159265 15.05.2014 01:39 # +2
Гугли javascript promises, js deferred
http://wiki.commonjs.org/wiki/Promises
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Как-то так.
Думаю тут что-то от монад и cps есть.
wvxvw 15.05.2014 09:04 # 0
Т.е. например, если у нас есть элемент, который может загружать в себя картинку больше одного раза, и мы хотим реагировать на загрузку одинаково каждый раз: deferred не сможет это сделать, т.как он срабатывает только первый раз, когда событие произошло, потом его можно только удалять.
Предположим, все тот же элемент, но у нас есть два других участка кода, которые хотят получать сообщения о смене картинки, пердположим один из обработчиков сообщения бросил ошибку: что делать во втором обработчике? Считать ли, что deferred завершился с ошибкой (и вызывать соответствующий метод) или продолжать работать в обычном режиме? Когда у нас есть просто колбеки такие вопросы не возникают.
Вобщем, я к тому, что deferred - плохая абстракция.
3.14159265 15.05.2014 14:00 # +3
Они как раз созданы чтобы решить эти проблемы.
>пердположим один из обработчиков сообщения бросил ошибку: что делать во втором обработчике?
>Считать ли, что deferred завершился с ошибкой (и вызывать соответствующий метод)
Всё зависит от заданной монады стратегии исполнения.
wvxvw 15.05.2014 14:08 # 0
roman-kashitsyn 15.05.2014 12:22 # +1
Monad + cps = Control.Monad.Cont(T)
Это адский вынос мозга
guest 15.05.2014 02:22 # 0
roman-kashitsyn 15.05.2014 12:24 # +4
bormand 15.05.2014 13:58 # +1
roman-kashitsyn 15.05.2014 14:34 # 0
Если этот async эквивалентен фьючерсу, а await - это get, тогда для корректной работы нужно два потока, и тогда все три await - лишние.
Даже если магический await sleep сообщает шедулеру, что он может переключить нас на другую корутину (ещё и с указанием, когда разбудить), нужно полноценная поддержка корутин с суспендом/резьюмом, а такого рантайм js вроде бы никогда не умел (в lua такое есть, но и там сложно заранее узнать, когда тебя разбудят).
bormand 15.05.2014 14:49 # 0
Асинк метод в шарпе - это необычный метод - он компилится то ли в конечный автомат, то ли в лапшу из коллбеков. И возвращает он future. А await проверяет future на завершеность, и если не завершено - отдает управление. Причем авейт можно юзать ТОЛЬКО в асинк методах, т.к. остальные нельзя просто взять и прервать (понадобится поддержка короутин и т.п. т рантайма).
Короче это просто красивый и удобный сахар вокруг фьючерсов.
LispGovno 15.05.2014 14:58 # +1
Ага. И исключения работают неадекватно. Полумера. Не нужно.
bormand 15.05.2014 15:02 # 0
А что ты хотел от синтаксического сахара? :)
bormand 15.05.2014 16:24 # 0
roman-kashitsyn 15.05.2014 16:32 # 0
так это основной сценарий использования фьючерсов :)
запустить один потенциально блокирующий процесс в бэкграунд, поделать, что-то самому (например, запустить ещё один процесс), обработать результаты. Фьючерс, на котором сразу делают get(), практически бесполезен.
bormand 15.05.2014 16:36 # 0
> Фьючерс, на котором сразу делают get(), практически бесполезен.
Да, согласен.
bormand 15.05.2014 16:42 # 0
Но await это не get :)
roman-kashitsyn 15.05.2014 16:51 # 0
это из типа видно :) в шарпе Task<T> (точнее, всё, что умеет GetWaiter()), но мы-то знаем, что это всё монады
> Но await это не get :)
вот это я всё никак не пойму, попозже ещё повтыкаю.
bormand 15.05.2014 17:17 # 0
Что-то в духе "если задача уже выполнена - берем ее результат и продолжаем выполнять следующий кусок, если нет - просим задачу выполнить следующий кусок когда она завершится".
P.S. Блин, вот спорю-спорю с шарпеями, а ведь шарп потихоньку осваивается, и что самое ужасное, начинает мне нравиться...
roman-kashitsyn 15.05.2014 17:34 # +1
Попиши в вижуалстудии, должно отпустить
bormand 15.05.2014 17:37 # 0
guest 15.05.2014 19:56 # 0
3.14159265 16.05.2014 00:46 # +3
Тарас тоже так начинал.
Обилие синтаксического сахара, много зачастую бесполезных фич и сложность стандарта - это на любителя. Кстати в этом плане шарп во многом схож крестами, только с managed-среда с clr и gc.
С выходом нового стандарта мне всё больше начинают нравиться кресты, точнее их сабсет - как нынче модно писать. Обилие стандартных эффективных многопоточных блоков - это вообще небесный дар.
guest 17.05.2014 20:44 # +1
Lure Of Chaos 18.05.2014 09:10 # 0
во многом схож крестами, только с
managed-среда с clr и gc.
и наконец обошлись без сырых указателей
bormand 18.05.2014 09:28 # 0
В unsafe вроде есть.
3.14159265 16.05.2014 01:03 # +1
Divide et impera.
Это еще римляне знали. MS просто заимствовали стратегию успеха.
guest 16.05.2014 03:45 # −2
3.14159265 16.05.2014 13:57 # +3
Подробности твоей личной жизни мне не особо интересны.
guest 16.05.2014 20:35 # 0
guest 16.05.2014 14:02 # +1
guest 15.05.2014 19:54 # 0
Загугли, ёба, во что декомпилируется await в C#.
roman-kashitsyn 15.05.2014 14:50 # 0
roman-kashitsyn 15.05.2014 14:58 # 0
bormand 15.05.2014 15:00 # +3
async/await не требуют никаких дополнительных потоков. И выполняются они в строгом порядке, как колбечная лапша из топика.
Сейчас попробую изобразить это на жс...
1024-- 15.05.2014 17:08 # 0
+
В данном случае это просто буквы, код с этими буквами будет эквивалентен коду без них.
bormand 15.05.2014 15:57 # +1
С исключениями код будет посложнее, но вполне реализуемо (отлавливать в кусках, упихивать во future через что-нибудь в духе raiseException(), и сделать коллбек onException).
То, что await принимает только одного слушателя - косяк моей рахитектуры, признаю. Да и это всего лишь пример, а не боевая реализация ;)
bormand 15.05.2014 16:04 # 0
З.Ы. Можно сделать массив waiter'ов и вызвать их в цикле, но для демонстрации async/await это непринципиально.
bormand 15.05.2014 16:20 # 0
Хм, а это идея! Ведь жс может кастануть функцию в строку и получить ее исходник. А затем можно распарсить ее и перепидорасить преобразовать await'ы в лапшу из коллбеков...
И ведь всяко кто-нибудь уже реализовал это для своей любимой ноды жс.
LispGovno 15.05.2014 14:56 # 0
Щта эта?
bormand 15.05.2014 15:02 # +1
$ = jQuery
roman-kashitsyn 15.05.2014 14:17 # 0
bormand 15.05.2014 14:37 # 0
roman-kashitsyn 15.05.2014 14:39 # 0
guest 16.05.2014 00:45 # −6
guest 16.05.2014 00:41 # −6
guest 16.05.2014 03:44 # +1