Re[14]: Что посоветуете как аналог С++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.06.13 11:12
Оценка:
Здравствуйте, MTD, Вы писали:

MTD>Здравствуйте, gandjustas, Вы писали:


G>>Отлично

G>>1) Если пользователь часто нажимает, то время ожидания растет.

MTD>Как повезет. Чисто физически у тебя кабель один, так что если пакеты данных большие, а кликают часто, то как ни крутись, а очередь возникнет.


Но у тебя следующий пакет обработается когда полный цикл отправить-получить-сохранить-отправить.
А кабель не при чем, больше всего времени уходит в ожидание ответа сервера.


G>>2) race condition в очереди.


MTD>Откуда?


А Queue у тебя thread-safe?

G>>3) запись в базу и в сеть идет последовательно, а не параллельно.

MTD>С чего вдруг? Очередь может иметь пул и по ним раскидывать данные.
Код в студию.
Вот уже сложность растет.

G>>4) нету кода, который вызывает ProcessTask, он у тебя довольно нетривальный будет.


MTD>Он будет тривиальный — wait/notify, просто писать лень.

Угу.

Вот самое интересное ты и пропустил — как собственно скомбинировать асинхронные операции, а написал банальный линейный код, который должен внутри как-то эффективно работать.
Ты пот покажи как сделать эту самую эффективную работу, чтобы не ожидать завершения IO в потоке и параллелить операции.
Re[13]: Что посоветуете как аналог С++
От: FR  
Дата: 20.06.13 11:13
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>Пока ты не начинаешь комбинировать асинхронные вызовы это еще нормально смотрится, а попробуй сделать так чтобы при запершении одной асинхронной операции вызывалась другая, а за ней третья и так далее.


G>Сразу код станет нечитаем совершенно.


Не спорю будет гораздо корявее чем в C#, но вполне читабельно.
Если уж смотреть где красиво это в F# с его async.

G>А без этого никак. Никто тебе в UI потоке не позволит ожидание завершения IO делать.


Да ладно как будто до асинхронной моды UI приложения не писали.
Re[17]: Что посоветуете как аналог С++
От: FR  
Дата: 20.06.13 11:20
Оценка:
Здравствуйте, gandjustas, Вы писали:

FR>>В boost есть Coroutine

G>А пример использования есть?

Я сам только приглядываюсь.

G>Корутины и продолжения не одно и тоже, но стоит глянуть как оно реализовано.


Ну полноценных то продолжений в мейнстриме нет, а то что есть вполне эквивалентно.

FR>>Микрософт в PPL поддерживает и асинхронность:

FR>>http://msdn.microsoft.com/en-us/library/dd492427.aspx
FR>>http://msdn.microsoft.com/en-us/library/dd492627.aspx
G>Угу, посмотри примеры. Как минимум 10 строк, там где C# укладывается в одну. И это еще нету передачи данных между асинхронными вызовами.

Тык сахар рулит.
В F# еще лучше.

G>Я об этом и говорю, вся стройность RAII рассыпается из-за продолжений.


Тут скорее согласен, нужны некоторые дополнения в язык чтобы было не так коряво.
Лучше всего взять пример с F# и сразу ввести Computation Expressions (монады)
Re[17]: Что посоветуете как аналог С++
От: jazzer Россия Skype: enerjazzer
Дата: 20.06.13 11:23
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Корутины и продолжения не одно и тоже, но стоит глянуть как оно реализовано.

G>Я об этом и говорю, вся стройность RAII рассыпается из-за продолжений.

Чем тебя не устроил мой пример с продолжениями?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[15]: Что посоветуете как аналог С++
От: MTD https://github.com/mtrempoltsev
Дата: 20.06.13 11:24
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Но у тебя следующий пакет обработается когда полный цикл отправить-получить-сохранить-отправить.


Это не так. Из кода очевидно, что в очередь добавляется задача выполняющаяся асинхронно и без всяких задержек начинается новая итерация.

G>>>2) race condition в очереди.


MTD>>Откуда?


G>А Queue у тебя thread-safe?


Она такая какая надо.

G>>>3) запись в базу и в сеть идет последовательно, а не параллельно.

MTD>>С чего вдруг? Очередь может иметь пул и по ним раскидывать данные.
G>Код в студию.
G>Вот уже сложность растет.

Код приведен.

G>>>4) нету кода, который вызывает ProcessTask, он у тебя довольно нетривальный будет.


MTD>>Он будет тривиальный — wait/notify, просто писать лень.

G>Угу.

G>Вот самое интересное ты и пропустил — как собственно скомбинировать асинхронные операции, а написал банальный линейный код, который должен внутри как-то эффективно работать.

G>Ты пот покажи как сделать эту самую эффективную работу, чтобы не ожидать завершения IO в потоке и параллелить операции.

Мне банально лень, нужен стимул. В самом коде ничего сложного нет.
Re[18]: Что посоветуете как аналог С++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.06.13 11:28
Оценка: :)
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, gandjustas, Вы писали:


G>>Корутины и продолжения не одно и тоже, но стоит глянуть как оно реализовано.

G>>Я об этом и говорю, вся стройность RAII рассыпается из-за продолжений.

J>Чем тебя не устроил мой пример с продолжениями?


Так он не асинхронный, в чем смысл тогда? Основная суть продолжений что они позволяют не ожидать завершения IO в потоке. Или, напрмиер, ожидать действий пользователя. И очень важно уметь комбинировать продолжения, в том числе асинхронные, с передачей данных между ними.

А что ты показал? Передача указателя на функцию? Даже без замыканий.
Re[16]: Что посоветуете как аналог С++
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 20.06.13 11:34
Оценка: 1 (1) +1
Здравствуйте, MTD, Вы писали:

DM>>Кстати, да, сколько? Сколько новых популярных десктопных приложений появилось на плюсах за последние годы?


MTD>Много. Только из того, что у меня сейчас открыто: Google Chrome, Skype, Virtual Box, Qt Creator.


Google Chrome — обертка над WebKit, который тянется с прошлого века (Initial release November 4, 1998).
Skype вообще на Delphi написан.
Остальные два ок. Но на каждый Qt Creator найдется свой Eclipse (Java) и MonoDevelop (C#).
Re[18]: Что посоветуете как аналог С++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.06.13 11:36
Оценка:
Здравствуйте, FR, Вы писали:

FR>>>Микрософт в PPL поддерживает и асинхронность:

FR>>>http://msdn.microsoft.com/en-us/library/dd492427.aspx
FR>>>http://msdn.microsoft.com/en-us/library/dd492627.aspx
G>>Угу, посмотри примеры. Как минимум 10 строк, там где C# укладывается в одну. И это еще нету передачи данных между асинхронными вызовами.

FR>Тык сахар рулит.

FR>В F# еще лучше.

Не только в сахаре дело, если ты попробуешь написать код на C++ как в F#, то он не только гораздо многословнее будет, но и возникнут сложности с передачей данных между продолжениями.
Re[17]: Что посоветуете как аналог С++
От: MTD https://github.com/mtrempoltsev
Дата: 20.06.13 11:39
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Google Chrome — обертка над WebKit, который тянется с прошлого века (Initial release November 4, 1998).


Отчего его в .Net не обернули?

DM>Skype вообще на Delphi написан.


Что? Разве что самая первая версия.

DM>Остальные два ок. Но на каждый Qt Creator найдется свой Eclipse (Java) и MonoDevelop (C#).


Ну да, на Java есть ровно три десктопных приложений — NetBeans, Eclipse, Idea
Re[18]: Что посоветуете как аналог С++
От: Jack128  
Дата: 20.06.13 11:49
Оценка:
Здравствуйте, MTD, Вы писали:

DM>>Skype вообще на Delphi написан.


MTD>Что? Разве что самая первая версия.


по крайней мере гуй — гарантированно. Недавно какой то специфический касяк в vcl нашли, и в скайпе он воспроизводился.
Re[19]: Что посоветуете как аналог С++
От: jazzer Россия Skype: enerjazzer
Дата: 20.06.13 12:08
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

J>>Чем тебя не устроил мой пример с продолжениями?


G>Так он не асинхронный, в чем смысл тогда? Основная суть продолжений что они позволяют не ожидать завершения IO в потоке. Или, напрмиер, ожидать действий пользователя. И очень важно уметь комбинировать продолжения, в том числе асинхронные, с передачей данных между ними.


G>А что ты показал? Передача указателя на функцию?

Да, это и есть продолжение, вообще-то. Его можно использовать в том числе и для IO, но оно этим не ограничивается, естественно.
Но если тебе нужно именно IO:
void cont( const error_code& error, std::size_t bytes_transferred );

boost::asio::async_read(async_stream, boost::asio::buffer(data, size), cont);

cont асинхронно позовется, когда асинхронно же считается все, что нужно.
Это заодно и ответ для Ikemefula про его качалку файлов.

G>Даже без замыканий.

Детский сад. Замыкания — это либо Boost.Bind для C++03, либо встроенные лямбды для C++11. Так что, я надеюсь, ты больше замыкания не будешь упоминать в приличном обществе.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[19]: Что посоветуете как аналог С++
От: jazzer Россия Skype: enerjazzer
Дата: 20.06.13 12:15
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>возникнут сложности с передачей данных между продолжениями.


Продемонстрируй "сложности", пожалуйста.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[18]: Что посоветуете как аналог С++
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 20.06.13 12:16
Оценка: 5 (1)
Здравствуйте, MTD, Вы писали:

DM>>Google Chrome — обертка над WebKit, который тянется с прошлого века (Initial release November 4, 1998).

MTD>Отчего его в .Net не обернули?

Не было смысла, полагаю.

DM>>Skype вообще на Delphi написан.

MTD>Что? Разве что самая первая версия.

Да нет, виндовая версия 4.2 (спустя 7 лет после первой) все еще на Дельфи. Надо будет на более свежие взглянуть.

MTD>Ну да, на Java есть ровно три десктопных приложений — NetBeans, Eclipse, Idea


Вроде того.
Если смотреть у кого что установлено, то у меня еще:
vReveal — обработка видео, гуй на дотнете, алгоритмы на CUDA и чем-то нативном.
SourceTree — git клиент, .NET + WPF. Супер аппаратно ускоренный, запускается полчаса.
Mercurial — и вовсе на питоне.
компиляторы всякие (Haxe, GHC, Idris) — на окамле и хаскеле.

Плюс самописный десктопный софт на D (обработка графики, визуализация дисков с поиском дублей).
Re[18]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.06.13 12:36
Оценка:
Здравствуйте, FR, Вы писали:

I>>По моему это есть всяких сортов пляски. Хотя я не уверен, давно пора пляски с памятью и стеком сделать частью языка С++, как это было сделано со смартпоинтерами. Тогда уж точно нельзя будет придраться


FR>Как будто код с async который ты чуть выше привел не занимается за кулисами тем же самым.


Очевидно — нет.
Re[16]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.06.13 13:05
Оценка:
Здравствуйте, MTD, Вы писали:

DM>>Кстати, да, сколько? Сколько новых популярных десктопных приложений появилось на плюсах за последние годы?


MTD>Много. Только из того, что у меня сейчас открыто: Google Chrome, Skype, Virtual Box, Qt Creator.


Здесь один только хром можно рассматривать и это именно та область, где менеджед особо некуда всунуть. Притом сам WebKit это древняя вещь — 1998.
Skype — 2003,
Virtual Box и Qt Creator сложно назвать популярным, эдак в качестве популярных сгодится SharpDevelop, ExpressionBlend и подобные вещи.

Можно зайти с другой стороны — какие известные бизнес приложения были написаны на С++ ? Ну скажем для бухгалтерии, инвентаризации, страхования, учет и тд и тд ?

Какие известные веб-приложения были написаны на С++ ?

Мобайл ?
Re[18]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.06.13 13:07
Оценка:
Здравствуйте, MTD, Вы писали:

DM>>Google Chrome — обертка над WebKit, который тянется с прошлого века (Initial release November 4, 1998).

MTD>Отчего его в .Net не обернули?

А зачем ?

DM>>Skype вообще на Delphi написан.


MTD>Что? Разве что самая первая версия.


2003й год все таки, а мы смотрим после 2005го.

DM>>Остальные два ок. Но на каждый Qt Creator найдется свой Eclipse (Java) и MonoDevelop (C#).


MTD>Ну да, на Java есть ровно три десктопных приложений — NetBeans, Eclipse, Idea


На джаве полно софта для проектирования, CAD/CAM и тд.
Re[15]: Что посоветуете как аналог С++
От: Evgeny.Panasyuk Россия  
Дата: 20.06.13 13:12
Оценка:
Здравствуйте, Ikemefula, Вы писали:

EP>>>>В большинстве же приложений — это то, во что упирается производительность. А это не только скорость, но и энергоэффективность, и цена железа.

I>>>Большинство оно сильно разное. И если уж совсем про большинство говорить, то проблемы точно не с производительность.
EP>>А я не спорю что высокая производительность не везде нужна.
I>Ну вот видишь.

Ты не поверишь, для некоторых задач я советую людям изучить/использовать C#, а сам частенько использую Python.
[sarcasm mode]только не рассказывай ребятам с форума C++, а то они меня побьют и заберут партбилет[/sarcasm mode]

EP>>>>Как пример — эти аллокации вылезают по всему коду, при простейших абстракциях — просадка 16x на ровном месте.

I>>>Такой код в своём уме никто не пишет, кроме вчерашних плюсовиков, которые не знают как устроена память.
EP>>Talk is cheap, show me the code.
I>А задача какая, выделить массив в сто тыщ мульёнов и пройтись по ём в цикле ?

Задача сделать простейшею абстракцию, которая существует с незапамятных времён и используется повсеместно, в виде группировки разнотипных данных(хотя бы однотипных) в одну сущность(структуру/запись/класс), так чтобы её можно было использовать с разными типами контейнеров, в том числе массивов, без просадки скорости на порядок.

I>>>Это ни о чем.

EP>>Это мнение человека который разрабатывал алгоритмические библиотеки для Scheme, Ada, Java, C++
I>Это уже устаревший подход.

Допустим эффективные алгоритмы и структуры данных это устаревший подход, тогда какой современный? "Петрович, подвози исчё кластера"

I>>>А если скажем сюда внести работу с диском, базой или сетью, все поворачивается ровно наоборот — С++ не в состоянии обеспечить перформанс, например потому что тяжело контролировать асинхронные операции. Всё, до свидания.

EP>>stackless coroutines, stackfull coroutines, state machine, лямбды в конце концов
I>И ничего из этого в сиплюсплюсе нет

stackful coroutines — реализованы с использованием system-specific вызовов
stackless coroutines — реализованы на чистом ISO C++, меньше чем 100 строками кода
state machine — бери хоть банальный switch, хоть готовые библиотеки

I>а лямбды сильно кастрированые что бы их называть таким словом.


конкретные аргументы?

EP>>Покажи где например здесь "практически на С или подобным образом"?

I>Вот сюда смотри
I>https://code.google.com/p/sphinxsearch/source/browse/
I>Как думаешь, нужен ли здесь перформанс ?

То что где-то используют C или "C-подобный подход" отнюдь не означает что по другому нельзя. А вот наличие библиотеки с другим подходом которая быстра и резва, как раз и является примером тому что таки можно.
Re[20]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.06.13 13:14
Оценка:
Здравствуйте, jazzer, Вы писали:

J>cont асинхронно позовется, когда асинхронно же считается все, что нужно.

J>Это заодно и ответ для Ikemefula про его качалку файлов.

Если это твой ответ, то ты слился, кода нет, только сигнатуры Собственно для сиплюсника это стандартный ответ — показать сигнатуры и рассказать что всё классно.

Мне скажем дописать пару строк и будет совершенно другая вещь, комбинация синхронного и асинхронного. А у тебя что получится ?

private async void handler(object sender, TaskArgs args)
{
    string result = await new Task(() => Download(args.Url, args.Cancellation));
    if(SomeCondition(rawResult))
    {
     result = await new Task(() => Preproces(result, args.Cancellation));
    }

    textBox.Text += result;
}


Вобщем отдыхай.
Re[17]: Что посоветуете как аналог С++
От: jazzer Россия Skype: enerjazzer
Дата: 20.06.13 13:20
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Можно зайти с другой стороны — какие известные бизнес приложения были написаны на С++ ? Ну скажем для бухгалтерии, инвентаризации, страхования, учет и тд и тд ?


1С, вестимо
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[21]: Что посоветуете как аналог С++
От: jazzer Россия Skype: enerjazzer
Дата: 20.06.13 13:25
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, jazzer, Вы писали:


J>>cont асинхронно позовется, когда асинхронно же считается все, что нужно.

J>>Это заодно и ответ для Ikemefula про его качалку файлов.

I>Если это твой ответ, то ты слился, кода нет, только сигнатуры Собственно для сиплюсника это стандартный ответ — показать сигнатуры и рассказать что всё классно.


А какой тебе код нужен? Код cont? Так он вот таким будет: "textBox.Text += result"

I>Мне скажем дописать пару строк и будет совершенно другая вещь, комбинация синхронного и асинхронного. А у тебя что получится ?


I>
I>private async void handler(object sender, TaskArgs args)
I>{
I>    string result = await new Task(() => Download(args.Url, args.Cancellation));
I>    if(SomeCondition(rawResult))
I>    {
I>     result = await new Task(() => Preproces(result, args.Cancellation));
I>    }

I>    textBox.Text += result;
I>}
I>


И где тут "совершенно другая вещь"?
Всё то же самое.

I>Вобщем отдыхай.

В общем, не хами.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.