Russian Qt Forum
Ноябрь 23, 2024, 11:52
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Корутины (модное слово)
Страниц:
1
2
3
[
4
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Корутины (модное слово) (Прочитано 24537 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Корутины (модное слово)
«
Ответ #45 :
Октябрь 07, 2020, 09:50 »
Цитата: Авварон от Октябрь 06, 2020, 18:24
Уже приводил 2 раза - генератор, lazy, продьюсер-консьюмер.
Ну они мне не кажутся столь убедительными как с событийным циклом. Скорее "лямбда вместо функтора" - да, возможно/иногда получше, поудобнее, но не более того.
Ну ладно, я ведь тоже не знаю убедительных, так что претензий нет
А вообще "кооператив" - классная вещь. Это сейчас каждый засранец нитки запускает, а раньше делали по таймеру - и все прекрасно получалось. Приходилось даже диспатчить т.к. что-то делать в фоне хотели многие окна
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Корутины (модное слово)
«
Ответ #46 :
Октябрь 07, 2020, 12:03 »
генераторы - это очень прикольно, они позволяют экономить память - сейчас вы жонглируете временными векторами с кучей аллокаций и тому подобного, в питончике же можно оперировать над исходным контейнером "лениво" - это начинает ролять когда вы жонгируете гигабайтными матрицами.
Записан
AkonResumed
Чайник
Offline
Сообщений: 81
Re: Корутины (модное слово)
«
Ответ #47 :
Октябрь 18, 2020, 18:15 »
Как уже здесь многие отмечали, концепции этой "корутины" уже сто лет в обед. Мейнстрим практика - например, в Win32 API, начиная с NT 3.51, есть функция CreateFiber (читай корутина), которая в свою очередь создавалась с целью облегчения портирования Unix-овых программ под Windows. Соответственно, в Unix-ах это API появилось ... даже не знаю когда.
Востребованность? А часто ли требуется ручное переключение контекста? Часто ли вы использовали setjump/longjump? Ну если только вы пишите специфичный инструментарий, манипулирующий контекстом, например, такой как обработка исключений (есть разные реализации, в т.ч. через setjump/longjump).
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Корутины (модное слово)
«
Ответ #48 :
Октябрь 19, 2020, 12:48 »
Цитата: AkonResumed от Октябрь 18, 2020, 18:15
Востребованность? А часто ли требуется ручное переключение контекста? Часто ли вы использовали setjump/longjump? Ну если только вы пишите специфичный инструментарий, манипулирующий контекстом, например, такой как обработка исключений (есть разные реализации, в т.ч. через setjump/longjump).
По-моему другая крайность - недооценка. Как Вы делаете драг? Наверное корутиной - ведь Вам это давно известно? Или "спагетти" с 3 событиями? Или мучаетесь с processEvents как я? Думаю что ответа не последует
Др случаи эффективного применения тоже найдутся, пусть они не так уж часты. Напр конечные автоматы/пулеметы или синтаксический разбор.
Цитата: AkonResumed от Октябрь 18, 2020, 18:15
Как уже здесь многие отмечали, концепции этой "корутины" уже сто лет в обед.
Так приходит старость
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Корутины (модное слово)
«
Ответ #49 :
Октябрь 19, 2020, 14:15 »
Цитата: Igors от Октябрь 19, 2020, 12:48
пусть они не так уж часты.
вся асинхронка? сетевое взаимодействие, доступ к БД. Вас не напрягает что QSqlDatabase блокирующий?
Записан
AkonResumed
Чайник
Offline
Сообщений: 81
Re: Корутины (модное слово)
«
Ответ #50 :
Октябрь 19, 2020, 23:26 »
Цитировать
По-моему другая крайность - недооценка.
Возможно, лет через 5 увидим.
Драг бы делал на событиях. Собственно, у нас событийная модель программирования, а вы переходите опять к последовательной, в которой эти события все равно должны обрабатываться по ходу последовательности.
processEvents(): навскидку, нужно запилить свой эвент диспатчер (наследник QAbstractEventDispatcher), который будет иметь режим извлечения и обработки событий поштучно, т.е. QAbstractEventDispatcher::processEvents() будет извлекать одно событие и возвращать управление. По MouseRelease будет возможность завершить драг перед обработкой последующих событий, например, Esc keypress, которое в противном случае отменило бы завершившийся драг.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Корутины (модное слово)
«
Ответ #51 :
Октябрь 20, 2020, 10:47 »
Цитата: Авварон от Октябрь 19, 2020, 14:15
Вас не напрягает что QSqlDatabase блокирующий?
Цитировать
- Ну как я играл ?
- В общем хорошо, но почему Вы не сделали ни одного хода конями?
- Так я не знаю как они ходют
Никогда не имел дела с QSqlDatabase, ни с др СУБД (хотя наверное скоро буду знакомиться). Все же рискну утверждать что этот пример ничего нового не вносит - ну опять-таки эффективный/удобный уход в событийный цикл, что есть - то есть.
Цитата: AkonResumed от Октябрь 19, 2020, 23:26
Драг бы делал на событиях.
Не понял, что значит "бы"? Не представляю как Вам удалось отмазаться от этой работы, которая в UI всегда есть.
Цитата: AkonResumed от Октябрь 19, 2020, 23:26
Собственно, у нас событийная модель программирования, а вы переходите опять к последовательной, в которой эти события все равно должны обрабатываться по ходу последовательности.
Даже чисто концептуально гораздо более естественно представить/трактовать драг как единое действие/акцию, которая и реализована должна быть одним методом/ф-цией. Эта операция имеющая начало и конец, да, в ходе ее запрашивается ввод юзера, и что, разве мы обязаны дробить код по обработчикам? Это вынуждает заводить "драговые" члены класса лишь с той целью чтобы напр в MouseMoved иметь то что было установлено в MousePressed и.т.п. Заметьте что мы сразу лишаемся возможности сделать общий класс драга, остается лишь как-то (коряво) наследовать окно. Число проблем лавинообразно нарастает с увеличением числа драгов в одном окне, мы вынуждены "свитчеваться" в каждом обработчике.
Цитата: AkonResumed от Октябрь 19, 2020, 23:26
processEvents(): навскидку, нужно запилить свой эвент диспатчер (наследник QAbstractEventDispatcher), который будет иметь режим извлечения и обработки событий поштучно, т.е. QAbstractEventDispatcher::processEvents() будет извлекать одно событие и возвращать управление. По MouseRelease будет возможность завершить драг перед обработкой последующих событий, например, Esc keypress, которое в противном случае отменило бы завершившийся драг.
Если мы связываемся с processEvents, то тем самым уже признаем что хотим иметь 1 драг = 1 метод, т.е. последовательный код. Предложение перекрыть диспатчер мне кажется слишком смелым, все равно не видно как добиться "поштучной" выемки. Пробовал задействовать метод interrupt (вроде "оно"), но увы, "поштучных" событий он не гарантирует
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Корутины (модное слово)
«
Ответ #52 :
Октябрь 21, 2020, 08:23 »
Ну ладно, вот мы (элегантно) "махнули хвостиком" и вышли из корутины в событийный цикл. При этом надеясь что рано или поздно упр-е вернется в корутину. А если нет? Ну где-то насвистели и кто-то сожрал тот же MouseReleased. И потом приходит MousePressed по которому корутина должна запуститься "с нуля". Что произойдет? И как бороться с такими коллизиями?
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Корутины (модное слово)
«
Ответ #53 :
Октябрь 21, 2020, 17:58 »
Корутина - это объект с конкретным состоянием. Чтобы завершить корутину, достаточно удалить конкретный её экземпляр. Если необходимо запустить корутину "с нуля", то необходимо сформировать другой экземпляр корутины.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Корутины (модное слово)
«
Ответ #54 :
Октябрь 22, 2020, 12:25 »
Цитата: ssoft от Октябрь 21, 2020, 17:58
Корутина - это объект с конкретным состоянием. Чтобы завершить корутину, достаточно удалить конкретный её экземпляр. Если необходимо запустить корутину "с нуля", то необходимо сформировать другой экземпляр корутины.
Корректный, но какой-то "казенный" (неживой) ответ.
Цитировать
А можно пример?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Корутины (модное слово)
«
Ответ #55 :
Октябрь 22, 2020, 14:39 »
легко:
Код:
{
auto coro = getCoro();
Q_UNUSED(coro);
}
Записан
Painter
Новичок
Offline
Сообщений: 8
Re: Корутины (модное слово)
«
Ответ #56 :
Январь 16, 2021, 22:41 »
У нас буржуи говорят, что это тупо сокращение от Code Routine и ничего больше
А это значит только одно -> код программы
Просто, знатоков "аглицкого" языка все еще "хватат"
А вообще-то прыткий молодой человек в самом начале сказал, что он ничего не понял и так оно и есть,
Речь идет о теории кодирования с научной точки зрения.
«
Последнее редактирование: Январь 22, 2021, 14:57 от Painter
»
Записан
Страниц:
1
2
3
[
4
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...