Здравствуйте, gandjustas, Вы писали:
N>>Примеры в студию! G>Сходи на MSDN глянь как в WinRT делать асинхронные вызовы в C++, а потом сравни с .NET и JS.
Здравствуйте, gandjustas, Вы писали:
MTD>>Не сложней, чем на Java, например. G>Неправда твоя. Покажи как сделать продолжения и при этом не устраивать аццкие пляски с деаллокацией памяти.
Здравствуйте, jazzer, Вы писали:
I>>Ну да, это ж я рассказываю как кругом всё шоколадно.
J>Нет, ты рассказываешь, что у тебя в проекте гонокод, и смело экстраполируешь это наблюдение на вообще все проекты на С++.
У меня в проекте нет С++ наверное с 2007го, иногда залажу посмотреть в сторонние проекты, так что ты промахнулся мимо унитаза
Здравствуйте, MTD, Вы писали:
I>>Вопросы перформанса уже давно стали большим, чем подсчет тактов процессора.
MTD>Опять бла-бла-бла. Ну и в чем конкретно в данных случаях преимущество перед плюсами? Или .Net чтобы данные прочитать диск не раскручивает, а из астрала их берет?
Например внятная асинхронщина.
I>>И как то глядя на винду с лялихом, совершенно не очевидно, что "не будить процесс" это легко.
MTD>Нет, это очень легко. Сам можешь посмотреть.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, jazzer, Вы писали:
I>>>Ну да, это ж я рассказываю как кругом всё шоколадно.
J>>Нет, ты рассказываешь, что у тебя в проекте гонокод, и смело экстраполируешь это наблюдение на вообще все проекты на С++.
I>У меня в проекте нет С++ наверное с 2007го, иногда залажу посмотреть в сторонние проекты, так что ты промахнулся мимо унитаза
ну ок, в соседнем проекте. Смелости твоих экстраполяций это не меняет.
Здравствуйте, jazzer, Вы писали:
J>>>Нет, ты рассказываешь, что у тебя в проекте гонокод, и смело экстраполируешь это наблюдение на вообще все проекты на С++. I>>У меня в проекте нет С++ наверное с 2007го, иногда залажу посмотреть в сторонние проекты, так что ты промахнулся мимо унитаза
J>ну ок, в соседнем проекте. Смелости твоих экстраполяций это не меняет.
Сторонние это не соседние, а именно сторонние. Это значит, если непонятно, что ни я, ни команда, ни контора где я работал к ним не имели никакого отношения.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, jazzer, Вы писали:
J>>>>Нет, ты рассказываешь, что у тебя в проекте гонокод, и смело экстраполируешь это наблюдение на вообще все проекты на С++. I>>>У меня в проекте нет С++ наверное с 2007го, иногда залажу посмотреть в сторонние проекты, так что ты промахнулся мимо унитаза
J>>ну ок, в соседнем проекте. Смелости твоих экстраполяций это не меняет.
I>Сторонние это не соседние, а именно сторонние. Это значит, если непонятно, что ни я, ни команда, ни контора где я работал к ним не имели никакого отношения.
Да пофиг. Беда в том, что ты по этим проектам делаешь космического масштаба выводы обо всех плюсовых проектах и плюсовых программерах.
Хотя, имхо, аргументация в стиле "С++ ущербен, я даже знаю несколько проектов с гонокодом внутри" несколько неубедительна, не находишь?
Потому что, ты не поверишь, наверное, но я тоже знаю несколько таких проектов, и в некоторых я даже имел сомнительное удовольствие работать.
И причина гонокодности была чисто административной.
Причем они не все были на С++, некоторые на Java. И почему же это я не делаю таких экстраполяций в отношении программеров на других языках...
Здравствуйте, MTD, Вы писали:
I>>Ты получил внятный ответ — популярные десктоп приложения были написаны еще задолго до 2005го года. Дотнет на тот момент, если не понятно,еще пешком под стол ходил.
MTD>Стало быть их нет?
Кого нет ? Популярных приложений вообще раз два и обчелся, на десктопе такие приложения живут и развиваются по десятку лет и больше. А вот специализированых приложений вполне себе хватает. Софт навроде CAD сгодится ?
> C 2002 года, за 11 лет, всего одно приложение — Paint.NET? В тоже время сколько новых популярных приложений на умирающих плюсах появилось?
Ничего нового 'популярного' даже на плюсах не появилось.
Здравствуйте, jazzer, Вы писали:
I>>>>В общем случае надо организовать корректную схему многопоточного взаимодействия, асинхронщину всякую. Вот это на с++ крайне сложно. MTD>>>Не сложней, чем на Java, например. G>>Неправда твоя. Покажи как сделать продолжения и при этом не устраивать аццкие пляски с деаллокацией памяти.
J>1. Передавать объекты по значению — вопроса деаллокации вообще не возникнет. J>2. Передавать shared_ptr — все сдохнет автоматизированно.
J>хз что из этого ты называешь "аццкими плясками"
Хорош гнать пургу. Открой короутины буста
Boost.Coroutine is implemented around a stack switching model; that is, every time a coroutine is entered, the following actions are carried:
The caller instruction pointer and callee clobbered registers are saved on the caller stack (this is done automatically as part of the call to the context switching routine respectively by the compiler and by the CPU).
the set of callee save registers are saved by the context switching routine on the caller stack.
The caller stack pointer is saved inside the caller context structure. This structure is stored on the coroutine context if a yield_to or yield is being performed, else it is also on the caller stack.
The callee stack pointer is retrieved from the callee context structure and set as current stack pointer.
Callee save registers are popped from the callee stack.
The context switching routine returns, restoring automatically from the new stack the called coroutine instruction pointer and clobbered registers.
Про другому асинхронщину, многопоточность и тд в с++ не сделать.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, jazzer, Вы писали:
I>>>>>В общем случае надо организовать корректную схему многопоточного взаимодействия, асинхронщину всякую. Вот это на с++ крайне сложно. MTD>>>>Не сложней, чем на Java, например. G>>>Неправда твоя. Покажи как сделать продолжения и при этом не устраивать аццкие пляски с деаллокацией памяти.
J>>1. Передавать объекты по значению — вопроса деаллокации вообще не возникнет. J>>2. Передавать shared_ptr — все сдохнет автоматизированно.
J>>хз что из этого ты называешь "аццкими плясками"
I>Хорош гнать пургу. Открой короутины буста I>Про другому асинхронщину, многопоточность и тд в с++ не сделать.
Здравствуйте, jazzer, Вы писали:
I>>Хорош гнать пургу. Открой короутины буста I>>Про другому асинхронщину, многопоточность и тд в с++ не сделать.
J>Да что ты говоришь! Открой для себя Boost.Asio.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, jazzer, Вы писали:
I>>>Хорош гнать пургу. Открой короутины буста I>>>Про другому асинхронщину, многопоточность и тд в с++ не сделать.
J>>Да что ты говоришь! Открой для себя Boost.Asio.
I>Это низкоуровневый отстой.
Убедительность аргументации повергла меня в трепет.
Здравствуйте, jazzer, Вы писали:
J>>>ну ок, в соседнем проекте. Смелости твоих экстраполяций это не меняет. I>>Сторонние это не соседние, а именно сторонние. Это значит, если непонятно, что ни я, ни команда, ни контора где я работал к ним не имели никакого отношения.
J>Да пофиг. Беда в том, что ты по этим проектам делаешь космического масштаба выводы обо всех плюсовых проектах и плюсовых программерах. J>Хотя, имхо, аргументация в стиле "С++ ущербен, я даже знаю несколько проектов с гонокодом внутри" несколько неубедительна, не находишь?
Если бы проектов было несколько, всё было бы очень даже хорошо.
Итого — функция которая асинхронно скачивает файлик, показывает его и дает возможность отменить скачивание. Всех библиотек можешь использовать только asio и мульку для скачивания.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, gandjustas, Вы писали:
MTD>>>Не сложней, чем на Java, например. G>>Неправда твоя. Покажи как сделать продолжения и при этом не устраивать аццкие пляски с деаллокацией памяти.
FR>В boost есть Coroutine
Boost.Coroutine is implemented around a stack switching model; that is, every time a coroutine is entered, the following actions are carried:
The caller instruction pointer and callee clobbered registers are saved on the caller stack (this is done automatically as part of the call to the context switching routine respectively by the compiler and by the CPU).
the set of callee save registers are saved by the context switching routine on the caller stack.
The caller stack pointer is saved inside the caller context structure. This structure is stored on the coroutine context if a yield_to or yield is being performed, else it is also on the caller stack.
The callee stack pointer is retrieved from the callee context structure and set as current stack pointer.
Callee save registers are popped from the callee stack.
The context switching routine returns, restoring automatically from the new stack the called coroutine instruction pointer and clobbered registers.
По моему это есть всяких сортов пляски. Хотя я не уверен, давно пора пляски с памятью и стеком сделать частью языка С++, как это было сделано со смартпоинтерами. Тогда уж точно нельзя будет придраться
Здравствуйте, Ikemefula, Вы писали:
I>По моему это есть всяких сортов пляски. Хотя я не уверен, давно пора пляски с памятью и стеком сделать частью языка С++, как это было сделано со смартпоинтерами. Тогда уж точно нельзя будет придраться
Как будто код с async который ты чуть выше привел не занимается за кулисами тем же самым.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, gandjustas, Вы писали:
MTD>>>Не сложней, чем на Java, например. G>>Неправда твоя. Покажи как сделать продолжения и при этом не устраивать аццкие пляски с деаллокацией памяти.
FR>В boost есть Coroutine
А пример использования есть?
Корутины и продолжения не одно и тоже, но стоит глянуть как оно реализовано.
FR>Микрософт в PPL поддерживает и асинхронность: FR>http://msdn.microsoft.com/en-us/library/dd492427.aspx FR>http://msdn.microsoft.com/en-us/library/dd492627.aspx
Угу, посмотри примеры. Как минимум 10 строк, там где C# укладывается в одну. И это еще нету передачи данных между асинхронными вызовами.
Я об этом и говорю, вся стройность RAII рассыпается из-за продолжений.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, gandjustas, Вы писали:
N>>>Примеры в студию! G>>Сходи на MSDN глянь как в WinRT делать асинхронные вызовы в C++, а потом сравни с .NET и JS.
FR>Тут http://msdn.microsoft.com/ru-ru/magazine/hh781020.aspx не так страшно как ты описываешь FR>Понятно что сахара с неявными продолжениями как в C# нет, но и на лямбдах, хоть и корявые они FR>в C++, вполне нормально.
Пока ты не начинаешь комбинировать асинхронные вызовы это еще нормально смотрится, а попробуй сделать так чтобы при запершении одной асинхронной операции вызывалась другая, а за ней третья и так далее.
Сразу код станет нечитаем совершенно.
А без этого никак. Никто тебе в UI потоке не позволит ожидание завершения IO делать.
I>Покажи мне аналог в asio для вот для такого псевдокода
Если взять микрософтовский WinRT/PPL будет точно также с учетом того
что нет C# сахара с неявными продолжениями, вместо них придется выписывать
явные лямбды, вот первый пример здесь примерно на эту же тему.