« first day (551 days earlier)      last day (2766 days later) » 

5:00 PM
@Nofate «Где машины» списком - это вин.
 
грид в центре типично борландовый
 
Да, кстати - там есть "как бы тулбары", но не на всю ширину окна - это точно не VCL, там такого компонента нет.
 
ну то есть я на 3-4м курсе что-то очень похожее рисовал. но я брал карсивые иконки из famfamfam
 
Грид такой в любой библиотеке компонентов есть. Грид на WinForms выглядит точно так же :)
Разве что в WPF такого грида нет. Точнее, тоже есть - но его до такого состояния долго стилизовать нада.
 
@ГончаровАлександр Спасибо! Объединил учетные записи.
 
5:06 PM
@ixSci увидел там ваш спор... Как по мне, так операции shift/unshift понятны и легко запоминаются. А пришли в язык они, к слову, из Perl. splice - вот где все ужасы стандартной библиотеки js! :)
 
предчувствие меня не обмануло
 
@Nofate о боже, все-таки VCL. Что за извращенец это делал? Ему же половину компонентов пришлось создавать самому - и ради чего? Ради вот такого интерфейса?!
 
мультилайн тулбары там есть
может какой-нибудь RxComponents использовали
 
@Nofate да, есть. Но они занимают всю ширину окна, а не половину!
 
@Nofate а машинка innsmouth у тебя есть?
 
5:11 PM
0
A: Актуальность общих языковых меток, на примере C++

alexolutЯ совершенно не возражаю против использования наиболее современного кода в ответах на вопросы, помеченные общей меткой c++. Но есть нюансы, о которых, в том числе уже упоминали другие участники в ответах и комментариях. Попробую изложить их по пунктам: Автор вопроса может использовать старый ко...

 
@PavelMayorov зато денежки идут
 
@strangeqargo есть, но от нее пахнет рыбой. ta-bum-tss!
 
это прекрасно :-)
 
(на самом деле нет)
 
@Nofate nofate@khrebtyOfHorror
 
5:17 PM
@strangeqargo, у меня теперь весь твиттер забит русскоязычными постами с кхм.. странными названиями учеток. в ру.твиттере принято генерировать имена (а может и посты) нейросетями? или это какой-то другой местный тренд?
 
@Nofate ты про "слабоумие и отвага"?
 
@strangeqargo нене. скорее типа "кроссовки и меркантильность". это не дословный пример, но я постарался соответствовать
 
@Nofate какая-то многолетняя мода, не обращаю внимания в основном. иногда бывает смешно
 
@strangeqargo "крысы перорально" и вовсе разбудили воспоминания о Фоксе Йововиче
@strangeqargo у нас дома есть ноут. хост назвается Tyrion, и там учетка - Shae. нувыпоняли
 
5:24 PM
@strangeqargo о! мистер вигглз
еще немного и вы вернете мне мой 2007й (а сентябрь уже закончился)
 
да я чет сегодня комиксы пересматривал, когда узнал что автор нелюбимого мною дилберта стал фанатом трампа :)
 
@PavelMayorov запомнить — не проблема, а вот найти — проблема. Я конечно сам дурак, но где-то с месяц я использовал concat для prepend. Чисто случайно обнаружил этот unshift
 
pbfcomics.com самое любимое конечн
 
@PavelMayorov Ну допустим, вы как бы изобрели DSL и пишете на нём. Но это у меня один вложенный цикл. А если их будет несколько, и если ещё будет throw/catch/finally в async-коде? И вы ведь не назовёте этот код читаемым или лёгким в поддержке? Ну и ранний возврат через throw — это из области запредельного. (Плюс я не вчитывался, и не понял, для чего нужен дубляж кода с if (result % 2 == 0).)
@PavelMayorov Вот это уже больше похоже на ручную реимплементацию примитивов языка. У вас есть while с ранним return'ом. Ещё если к нему break и continue...
 
У пользователя @lampa (ru.stackoverflow.com/users/5030/lampa) в описании профиля находится картинка с криптоматом. Допустимо ли это?
 
5:38 PM
@PavelMayorov Ну, избавляют-то да, но цена достаточно высока, код получается сравнимый с типичным Хаскелем :) Преобразование выходит вовсе не тривиальное.
@PavelMayorov В любом случае, да, это я бы сказал ещё одно обоснование нужности await в ES7.
@PavelMayorov Ну и в целом, респект за функциональный подход. Таки да, функциональное программирование позволяет эмулировать любые языковые конструкции.
 
@VladD ой, там первое условие должно было быть сравнение с нулем, конечно же.
@VladD а в throw как раз нет ничего запредельного. Обычная языковая конструкция. Особенно внутри промизов.
 
@strangeqargo осторожно! опять женщину призовете
 
@Nofate )) привет от чятика
 
@VladD По поводу же "высокой цены" - теперь ваша очередь показывать, как этот код будет выглядеть в виде конечного автомата :) И чтобы без вермишели...
 
5:53 PM
@Nofate, обращаюсь к вам как к модератору: chat.stackexchange.com/transcript/message/32692836#32692836
 
@PavelMayorov Так это ж расписано в eduasync и ещё в тысяче мест
Момент.
7 hours ago, by VladD
@ixSci Вот: https://codeblog.jonskeet.uk/2011/05/30/eduasync-part-9-generated-code-for-multi‌​ple-awaits/
 
нее, вейерштрасс, нее
То, что генерирует компилятор - это не интересно.
 
@PavelMayorov Почему не? Ну так написать это же руками не проблема.
Хотите, напишу, не подглядывая в дизассемблер?
 
@VladD Не проблема. Но если делать в лоб - получится нечитаемо.
 
@PavelMayorov Ну, это да. Мой коллега делал как-то обработчик сетевых запросов на стейт-машине, по сути тоже ручная эмуляция await
Но по крайней мере преобразование тривиально
 
5:57 PM
Я к тому, что асинхронщина через async/await и через конечный автомат - это два совершенно разных подхода.
 
И соответственно значит, его легко отлаживать
 
Так ведь и в then-chains преобразование тоже тривиально!
 
@PavelMayorov Мне после eduasync кажется одним и тем же
 
@Arhad посовещаемся - решим
 
@PavelMayorov на мой вкус, нетривиально. вам пришлось писать собственный while, а написание собственного try/finally будет ещё сложнее. то есть если бы уже была библиотека, предоставляющая нужные примитивы...
а так приходится в уме ещё и их отлаживать
 
5:59 PM
@VladD вот как раз try/finally в промизах встроенный, его не нада писать самому :)
Точнее, встроенный во всех, кроме нативных ES6 xD
 
@PavelMayorov но это не тот try/finally вроде бы? или он таки ложится? это ведь ещё один нелокальный переход
наверное ложится, да
но это не очевидно
 
Promise.prototype.finally = function (f) { return this.then(x => { f(x); return x }, x => { f(x); throw x }) }
В промизах jquery этот метод назывался always
 
а continue?
уложится легко?
 
continue делается так же как break и return - исключением
@VladD Вообще, самый вредный случай для обещаний - состояние из двух-трех переменных. Либо городить "лесенку", либо постоянно пробрасывать, либо вспоминать про локальные переменные...
Остальное имеет нормальные решения.
 
@PavelMayorov а await в finally?
у Microsoft на это ушла целая версия языка
 
6:11 PM
@VladD Тогда так: this.then(x => this.then(f).then(() => x), x => this.catch(f).then(() => throw x))
У меня на это ушел второй комментарий :)
 
avp
@PavelMayorov я так и не смог разобраться что тут должно получиться.
 
@avp то же самое, что в коде VladD выше
 
avp
@PavelMayorov я его не видел. Это какой-то генератор четных до 42?
 
@avp Нет, это случайный код с циклом и ветвлением :)
@VladD вот код VladD
@avp ^
 
avp
@PavelMayorov случайный код -- это новое для меня понятие.
 
6:18 PM
@PavelMayorov Подождите, а кто тут f?
 
@avp ну просто от балды написан пример алгоритма, с целью сравнить читаемость разных способов оформления асинхронности
@VladD Promise.prototype.finally = function (f) { return ... }
 
avp
@PavelMayorov ага, по этому поводу я как раз хотел распросить его как же await работает.
 
25 mins ago, by VladD
7 hours ago, by VladD
@ixSci Вот: https://codeblog.jonskeet.uk/2011/05/30/eduasync-part-9-generated-code-for-multi‌​ple-awaits/
 
avp
@PavelMayorov асинхронность? Вы уверены, что это просто? fork + pipe намного надежней (в концептуальном плане)
 
@avp вот только миллион соединений fork+pipe сервера не держат :)
Кроме того, из pipe тоже еще нужно научиться читать без блокировки...
 
6:32 PM
Сначала делают сервер на милён соединений, а потом ходют, юзеров клянчат, чтобы нагрузить хотя бы на 1% сервер )
 
avp
@PavelMayorov сам не писал, но в ЦУП-е рассказывали, что ручное программирование ПС-2000 (была такая параллельная машина для обработки телеметрии) было чертовски сложным занятием. А в 90-х мы ее заменили парой рабочих станций с первичной тривиальной обработкой данных в самодельных платах на ТМС-ах. Просто производительность железа возрасла на пару порядков и многое упростилось
 
@avp не путайте нормальную асинхронность и параллельные процессоры
 
avp
6:52 PM
@PavelMayorov а что такое нормальная асинхронность? Это когда кто-то как-то за вас уже разрулил реально совмещенные по времени прерывания? Реально надежный способ этого разруливания -- класть данные прерывания в очередь (по сути тот же пайп и все ОС так и поступают) а потом в удобный момент вызывать коллбэки.
 
@avp если смотреть на низком уровне - то да, это один из возможных вариантов.
На высоком уровне о прерываниях говорить бесполезно.
 
avp
@PavelMayorov на высоком уровне все равно остается та же проблема синхронизации, если данные не независимы и поступают из разных источников. Т.е. в концептуально простой схеме вы вернетесь к fork/pipe/poll
 
@avp в том-то и дело, что нормальная асинхронность предполагает, что проблема синхронизации решена на более низком уровне, нежели то на котором пишется код
2
 
@PavelMayorov Разве проблема асинхронности может быть решена в принципе?
 
7:07 PM
@VladimirGamalian а почему нет?
 
@VladimirGamalian А в чём состоит эта проблема?
 
@PavelMayorov так или иначе слой абстрации может дать только какие-то удобные инструменты, но не решить проблемы гонок, общего доступа и тд
@VladD это к @PavelMayorov, он писал, что проблема синхронизации решена на более низком уровне
 
@VladimirGamalian какие нафиг гонки и общий доступ - если поток всего один?
 
@PavelMayorov а, я думал вы про будущее. Ну, если поток один, тогда и задачи такой не стоит.
 
@VladimirGamalian какое будущее?
Зачем в будущем больше потоков?
@VladimirGamalian Какой задачи не стоит?
 
7:10 PM
@PavelMayorov по фундаментальным ограничениям скорости распространения сигналов?
Кто все эти люди? )))
@PavelMayorov Ок, сорри, наверное не въехал в суть дискуссии. Чукча не читатель, чукча камментатор )
 
@PavelMayorov короче, ssh у разраба оказался, я - ссзб. спасибо
 
@VladimirGamalian Не, ну проблема синхронизации — это понятно, у нас есть события в разных потоках, и надо их привести как бы в один. А проблема асинхронности...
 
а о чем сейчас речь, если не секрет?
 
@Etki + тоже охото знать
@strangeqargo привет
всем привет
 
@Naumov и тебе привет
@Etki у них все началось с правильной, без лапши, реализации async/await с тех пор они и не просыхали
 
7:23 PM
подождали бы меня
 
7:39 PM
куда все пропали?
@strangeqargo чем занимаешься?
 
@Naumov разобрался, почему qt так странно с cmake компилировался, сижу дальше виджеты конструирую :-) ну и слежу за нашими северо-корейскими новостями
 
@Naumov асинхронно отправляют ответы
 
@strangeqargo в ручную? или конструктор юзаешь?
 
@Naumov конструктор из qt, а компиляция и прочее - из clion
 
@Etki наасинхронные вопросы :D
@strangeqargo я в смысле графический (вчера glade заюзал для gtk)
 
7:45 PM
@Naumov ну да, в qt creator свой дизайнер форм-виджетов визуальный же
 
0
Q: Что то в разделе php многие вопросы, вставлены через html snipet

NaumovЧто то в разделе php многие вопросы, вставлены через html snipet. В общем сам вопрос "обсуждение" в шапке. Складывается такое ощущение что, что то не так с формой ввода сообщения. Посмотрев на форму ввода сообщение, я осмелюсь предположить что иконка Вставки js кода сильно похожа на иконку вст...

 
@strangeqargo пойду аватарку заменю на профиле пора
 
@Naumov давно пора
 
@strangeqargo заменил но в чате cache видимо
а не сохранить забыл
 
8:00 PM
@Naumov не поменялось. видимо сменится, когда синхронизируются. или тебе перезайти надо :-)
 
@strangeqargo ща попробуем
 
@Naumov только не говори, что ты всех нае.. обманул и залил аватарку-скриншот с граватара
 
@strangeqargo что такое граватар?
 
@Naumov lmgtfy автоматический сгенеренный аватар )
 
@strangeqargo что то туплю после работы:lmgtfy - это что?
 
@strangeqargo банер норм
 
@strangeqargo huifikator.ru/?google.ru lol
 
ты его сломааал
 
@strangeqargo мне эмблема от гугла нравиться в таком стиле
 
8:34 PM
@strangeqargo обновилась всё я спать
 
@Naumov хороших снов
 
9:02 PM
0
Q: Индикатор знака рисуется поверх текста

alexolutВ списке выбора отслеживаемого знака для знака "Спортивное поведение" серебряная точка частично перекрывает первую букву названия: В идеале, нельзя допускать таких длинных имен, чтобы элементы пересекались, но с учетом локализации, это бывает трудно предусмотреть сразу. Для исправления ситуа...

 
9:13 PM
@NickVolynkin не вкурил) тоже считаете юзверя читером?
 
avp
@VladD извините, а можете растолковать, как тут все это с await работает? Пытаясь разобраться я прочел blog.stephencleary.com/2012/02/async-and-await.html С одной стороны идея понятна. С другой совершенно не понятно, как со всем этим работать, чтобы в конец не запутаться с потоками управления, возвращаемыми из функции по незавершенному await. Т.е. в смысле потока (нескольких потоков?) управления. Вот, если взять Ваш пример, то что когда куда возвращается и где завершается
 
9:29 PM
@avp Смотрите.
Async-функция по сути не является функцией. Это самое главное.
То есть она выглядит как функция, но возвращается объект типа Task<T>.
Давайте рассмотрим простой пример.
async Task<int> F()
{
    var google = await new WebClient().DownloadStringAsync("http://google.com");
    var i1 = google.Length;
    var stackoverflow = await new WebClient().DownloadStringAsync("http://stackoverflow.com");
    var i2 = stackoverflow.Length;
    return i1 + i2;
}
что тут происходит:
 
avp
@VladD смотрю
 
создаётся объект типа Task<int>
запускается код
new WebClient() — всё просто, создался объект
DownloadStringAsync("http://google.com") — тут вернулся Task<string>
дальше происходит await на этот task
что это означает? это означает, что выполнение этого кода приостанавливается
и к Task<string> подцепляется callback, который будет вызван, когда этот таск завершится
 
avp
@VladD да, запоминается текущий контекст
 
этот колбек сделает jump на код F() после await, и продолжит его выполнение
перед этим он (опционально) может перекинуть callback в оригинальный поток
 
avp
@VladD в смысле, сделает потом, когда завершится?
 
9:38 PM
@avp ну, он как бы в этом только и состоит: роль колбека — возобновить выполнение F()
 
avp
@VladD ага
 
давайте предположим. что у нас приложение командной строки, там проще
тогда хвост функции F() выполняется в том потоке, в котором пришёл сигнал о завершении внутреннего таска
 
avp
@VladD все же, здесь. Текущий поток управления вернется из F()?
 
вот, это тонкость
смотите
давайте перепишем код так:
var wc1 = new WebClient();
var task2 = wc1.DownloadStringAsync("http://google.com");
var google = await task1;
созданная функция не содержит локальных переменных
 
avp
@VladD хорошо
 
9:41 PM
все локальные переменные превращаются в поля специального класса
 
avp
@VladD какая не содержит?
 
ну то есть по записи содержит, но код переписывается вот как:
new SpecialClass().Run()
а локальные переменные превращаются в поля класса SpecialClass
таким образом, у нас как бы все локальные переменные разместились в heap'е
 
avp
@VladD хорошо. Таких объектов 2 экземпляра?
 
а не в стеке
@avp один, только один
 
avp
@VladD ладно
 
9:44 PM
функция Run есть по сути переписанная функция F()
итак, начинается выполнение как обычно
var wc1 = new WebClient();
var task2 = wc1.DownloadStringAsync("http://google.com");
это проходит синхронно
но wc1 и task2 — поля в SpecialClass
 
avp
@VladD ОК
 
то есть реально получается
this.wc1 = new WebClient();
this.task1 = wc1.DownloadStringAsync("http://google.com");
окей, дальше идёт await
 
avp
Что-то я с task1 и task2 запутался
 
моя ошибка, там везде task1
 
avp
@VladD ОК, понял
 
9:47 PM
итак, код встречает первый await. в этот момент создаётся Task<int> и тоже запоминается в поле класса SpecialClass. Пусть это будет resulttask.
и функция F() с точки зрения пользователя завершается, возвращая этот Task<int>
что происходит дальше:
 
avp
@VladD Task<int> это наша F()?
 
@avp это то, что возвращает наша F(). Task<int> — это лишь специальный объект для возврата, вся реальная работа происходит в SpecialClass
в конце SpecialClass завершит этот таск
 
avp
@VladD я правильно понимаю, что caller должен ждать завершения F()?
 
@avp может ждать, а может и бросить его на произвол судьбы, как ему хочется. но в типичном случае он его должен ждать, да
может записать его в контейнер или переменную, и дождаться позже, например
итак, что происходит дальше
у нас в коде await
точнее await task1
это делает подписывает колбек на завершение task1
и всё
таким образом, что мы имеем на этот момент
у нас бежит task1 где-то и как-то
наш таск в данный момент не бежит вообще, он просто подписался на колбек и прекратил выполнение, вернул его caller'у
 
avp
@VladD как caller отличает возврат со значением от возврата, когда только запустили асинхронное чтение?
 
9:53 PM
@avp а он не получает значение, он получает только Task
для того, чтобы получить значение из Task, нужно провести await
то есть для caller'а нету разницы
давайте посмотрим, что происходит дальше
будет понятнее
 
avp
@VladD вот эту технику программирования я и не понимаю
 
@avp подождите, давайте сначала разберёмся, как выполняется код внутри F()
а потом та часть станет тоже понятна
итак, через две секунды загрузка google.com завершилась
 
avp
@VladD давайте.
 
и в каком-то потоке пришла нотификация о завершении
в этом же потоке вызвался callback
 
avp
@VladD понятно, это остаток нашей F()
 
9:56 PM
и он запустил «хвост» функции F(), при помощи jump'а на точку после await
выполнился код:
var i1 = google.Length;
var wc2 = new WebClient();
var task2 = wc2.DownloadStringAsync("http://stackoverflow.com");
var stackoverflow = await task2;
кусок до await пробежал синхронно
а на await произошёл тот же трюк
await подписался на окончание task2, и на этом колбек завершил выполнение
теперь, пока не добежит до конца task2, наш код как бы нигде не выполняется
 
avp
@VladD а вот тут, куда возвращается незавершенный task2?
 

« first day (551 days earlier)      last day (2766 days later) »