Re[61]: Что посоветуете как аналог С++
От: alex_public  
Дата: 08.07.13 20:03
Оценка:
I>Я пока что не пишу на C# а tpl не знаю досконально. В .net не требуется знать все методы всех классов

Вообще весьма симптоматично, что самым верным защитником управляемых языков и C# в частности, оказался не использующий C# на практике.

А всякие официальные пользователи C# типа gandjustas и прочих IT резко слились из темы, как только дело дошло до обсуждения конкретики. )))

P.S. А Ikemefula хотя и дико упёртый, но в любом случае достоин уважения. )
Re[39]: Что посоветуете как аналог С++
От: artelk  
Дата: 09.07.13 07:13
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>По смыслу, это примерно тоже самое, что и:

EP>
EP>async Task<Result> bar(istream client1, istream client2)
EP>{
EP>    var result = await foo(client1) + await foo(client2);
EP>    return result;
EP>}
EP>

EP>Вызывающий поток(thread) не блокируется, а возвращается к другим задачам, например по event loop.

Т.е. твоя реализация ограничена кооперативной многозадачностью поверх event loop?
Для async/await это лишь один из способов выполнения.

А еще, то, что возвращается именно Task позволяет нам, например, написать так:
async Task<int> bar(client1, client2)
{
  var taskR1 = foo(client1);
  var taskR2 = foo(client2);
  M1();
  M2();
  return await taskR1 + await taskR2;
}

Т.е. распараллелить все. Задачи taskR1, taskR2 выполняются параллельно, в то время как bar продолжает работать, выполняя M1() и M2().

A>>TcpStream — это какой-то специальный stream, который периодически делает yield?

EP>Да, только не периодически, а по необходимости. Внутри у него что-то типа:
EP>
EP>async_read(connection, buffer, /* completion callback: */ [coro]{ coro.resume(); } );
EP>coro.yeild(); // "sleep", will be awakened by completion callback
EP>

EP>Причём у него интерфейс как у обычного блокирующего потока, без намёков на асинхронность, поэтому он и совместим с std::istream.
Понятно. Т.е. нужно не забывать, что инстанцировать нужно именно специальные стримы, которые "знают" о нашем трюке.
А как быть с задачами, которые вообще со стримами не работают?
Re[62]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.07.13 07:42
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Вообще весьма симптоматично, что самым верным защитником управляемых языков и C# в частности, оказался не использующий C# на практике.


10 лет C# этого разве недостаточно ?

_>А всякие официальные пользователи C# типа gandjustas и прочих IT резко слились из темы, как только дело дошло до обсуждения конкретики. )))


Наверное им было скучно по сто раз одно и то же объяснять.
Re[73]: Что посоветуете как аналог С++
От: vdimas Россия  
Дата: 09.07.13 12:38
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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

I>Кроме как расставить все руками у тебя ничего нет, правильно ?

Я же тебе сказал, если ты сам в состоянии управлять очередью исполнения кода в кооперативной многозадачности, то тебе не нужен никакой "приоритет".


I>От тебя было утверждение про некие гарантии. Хочу увидеть эти гарантии примером кода.


Еще раз сформулируй, гарантии чего именно. Пример кода я привел. Гарантий никогда нет. С async/await тоже, ес-но.
Re[31]: Что посоветуете как аналог С++
От: vdimas Россия  
Дата: 09.07.13 13:02
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

AVK>>>Тогда поясни — либо "их" это все таки несколько более узкий круг, чем заявлено, либо я не принадлежу к "более опытным разработчикам".

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

Столь несложная демагогия даже оскорбительна для почти 10-тилетнего оппонирования. )))

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

Поэтому, вопрос про точный целочисленный тип в силе. Конкретный пример/сниппет можно взять отсюда: http://www.rsdn.ru/forum/philosophy/5221988.1
Автор: vdimas
Дата: 05.07.13
Re[74]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.07.13 13:26
Оценка:
Здравствуйте, vdimas, Вы писали:

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

I>>Кроме как расставить все руками у тебя ничего нет, правильно ?

V>Я же тебе сказал, если ты сам в состоянии управлять очередью исполнения кода в кооперативной многозадачности, то тебе не нужен никакой "приоритет".


Нужен, в том то и дело. Одна короутина должна отработать пораньше, а другая может хоть пол-часа ждать.

I>>От тебя было утверждение про некие гарантии. Хочу увидеть эти гарантии примером кода.


V>Еще раз сформулируй, гарантии чего именно. Пример кода я привел. Гарантий никогда нет. С async/await тоже, ес-но.


Ты сам вспомни, чего ты вещал про гарантии
Re[40]: Что посоветуете как аналог С++
От: Evgeny.Panasyuk Россия  
Дата: 09.07.13 14:19
Оценка:
Здравствуйте, artelk, Вы писали:

EP>>По смыслу, это примерно тоже самое, что и:

EP>>
EP>>async Task<Result> bar(istream client1, istream client2)
EP>>{
EP>>    var result = await foo(client1) + await foo(client2);
EP>>    return result;
EP>>}
EP>>

EP>>Вызывающий поток(thread) не блокируется, а возвращается к другим задачам, например по event loop.
A>Т.е. твоя реализация ограничена кооперативной многозадачностью поверх event loop?

Мой пример показывает то, чего на C# нельзя достичь.

A>Для async/await это лишь один из способов выполнения.

A>А еще, то, что возвращается именно Task позволяет нам, например, написать так:
A>
A>async Task<int> bar(client1, client2)
A>{
A>  var taskR1 = foo(client1);
A>  var taskR2 = foo(client2);
A>  M1();
A>  M2();
A>  return await taskR1 + await taskR2;
A>}
A>

A>Т.е. распараллелить все. Задачи taskR1, taskR2 выполняются параллельно, в то время как bar продолжает работать, выполняя M1() и M2().

Точно такой же синтаксис оператора await можно получить с помощью stackful coroutine, только он будет мощнее, так как может yield'ить через много уровней, а не один.

A>>>TcpStream — это какой-то специальный stream, который периодически делает yield?

EP>>Да, только не периодически, а по необходимости. Внутри у него что-то типа:
EP>>
EP>>async_read(connection, buffer, /* completion callback: */ [coro]{ coro.resume(); } );
EP>>coro.yeild(); // "sleep", will be awakened by completion callback
EP>>

EP>>Причём у него интерфейс как у обычного блокирующего потока, без намёков на асинхронность, поэтому он и совместим с std::istream.
A>Понятно. Т.е. нужно не забывать, что инстанцировать нужно именно специальные стримы, которые "знают" о нашем трюке.
A>А как быть с задачами, которые вообще со стримами не работают?

Ещё раз, это конкретный пример инкапсуляции асинхронной логики таким образом, что много уровней клиентского кода могут и не догадываться об этом — на C# так не получится, послушай своего коллегу
Автор: Ikemefula
Дата: 08.07.13
.
Очевидно, что так можно инкапсулировать что угодно, а не только стримы, в том числе реализовать более мощный аналог await
Re[41]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.07.13 15:01
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Мой пример показывает то, чего на C# нельзя достичь.


А надо ? Твой пример похож на "я и так могу".

A>>Т.е. распараллелить все. Задачи taskR1, taskR2 выполняются параллельно, в то время как bar продолжает работать, выполняя M1() и M2().


EP>Точно такой же синтаксис оператора await можно получить с помощью stackful coroutine, только он будет мощнее, так как может yield'ить через много уровней, а не один.


Это именно то чего делать ни в коем случае не нужно.

EP>Ещё раз, это конкретный пример инкапсуляции асинхронной логики таким образом, что много уровней клиентского кода могут и не догадываться об этом — на C# так не получится, послушай своего коллегу
Автор: Ikemefula
Дата: 08.07.13
.

EP>Очевидно, что так можно инкапсулировать что угодно, а не только стримы, в том числе реализовать более мощный аналог await

аналог await это хорошо, а если "через много уровней", то хуже некуда, хаос в коде гарантирован.
Re[42]: Что посоветуете как аналог С++
От: Evgeny.Panasyuk Россия  
Дата: 09.07.13 15:34
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

EP>>Мой пример показывает то, чего на C# нельзя достичь.

I>А надо ? Твой пример похож на "я и так могу".

Я показал
Автор: Evgeny.Panasyuk
Дата: 21.06.13
одну из фишек stackful coroutine. artelk подумал что это едиственная фишка, на что я сделал пояснение.

A>>>Т.е. распараллелить все. Задачи taskR1, taskR2 выполняются параллельно, в то время как bar продолжает работать, выполняя M1() и M2().

EP>>Точно такой же синтаксис оператора await можно получить с помощью stackful coroutine, только он будет мощнее, так как может yield'ить через много уровней, а не один.
I>Это именно то чего делать ни в коем случае не нужно.

Можно без проблем ограничить одним уровнем, а можно и не ограничивать.

EP>>Ещё раз, это конкретный пример инкапсуляции асинхронной логики таким образом, что много уровней клиентского кода могут и не догадываться об этом — на C# так не получится, послушай своего коллегу
Автор: Ikemefula
Дата: 08.07.13
.

EP>>Очевидно, что так можно инкапсулировать что угодно, а не только стримы, в том числе реализовать более мощный аналог await
I>аналог await это хорошо, а если "через много уровней", то хуже некуда, хаос в коде гарантирован.

При использовании await'а, часто вырастают "вынужденные" цепочки await'ов/async'ов вверх по call stack'у — об этом говорится во многих туториалах по await.
Имея возможность "через много уровней", можно по необходимости ввести ограничение на "один уровень".

Будет ли хаос при использовании "через много уровней" — сходу сказать не могу, ибо не использовал. Рассказы про "хаос" вообще окружают каждую фишку которая даёт что-то в обмен на потерю контроля.
function pointer, virtual function, overloading — "хаос, неизвестно что вызывается"
type inference, auto, template argument deduction — "хаос, неизвестно какие типы, и вообще duck typing" (даже в этой теме успели это пережевать)
Как показывает история, зачастую все эти страхи от банального blub-парадокса и инерции
Re[43]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.07.13 16:28
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>При использовании await'а, часто вырастают "вынужденные" цепочки await'ов/async'ов вверх по call stack'у — об этом говорится во многих туториалах по await.

EP>Имея возможность "через много уровней", можно по необходимости ввести ограничение на "один уровень".

Правильно быть в курсе, что ты в такой вот цепочке.

EP>Будет ли хаос при использовании "через много уровней" — сходу сказать не могу, ибо не использовал. Рассказы про "хаос" вообще окружают каждую фишку которая даёт что-то в обмен на потерю контроля.

EP>function pointer, virtual function, overloading — "хаос, неизвестно что вызывается"
EP>type inference, auto, template argument deduction — "хаос, неизвестно какие типы, и вообще duck typing" (даже в этой теме успели это пережевать)
EP>Как показывает история, зачастую все эти страхи от банального blub-парадокса и инерции

Ты лучше посмотри насколько "широко" используются файберы. Это собтсвенно демонстрация никчемности твоих короутин.
Re[44]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.07.13 16:53
Оценка:
Здравствуйте, Ikemefula, Вы писали:

EP>>Будет ли хаос при использовании "через много уровней" — сходу сказать не могу, ибо не использовал. Рассказы про "хаос" вообще окружают каждую фишку которая даёт что-то в обмен на потерю контроля.

EP>>function pointer, virtual function, overloading — "хаос, неизвестно что вызывается"
EP>>type inference, auto, template argument deduction — "хаос, неизвестно какие типы, и вообще duck typing" (даже в этой теме успели это пережевать)
EP>>Как показывает история, зачастую все эти страхи от банального blub-парадокса и инерции

I>Ты лучше посмотри насколько "широко" используются файберы. Это собтсвенно демонстрация никчемности твоих короутин.


Ты предлагаешь неочевидный инструмент, который будут делать чтото интересное в глубоком стеке который и так непонятно, как контролировать.
Сейчас другой тренд — во все языки проникают всякие монады и разные вкусные вещи для декларативного кода. Эта хрень позволяет ужать стек вызовов до безобразия.
Re[63]: Что посоветуете как аналог С++
От: alex_public  
Дата: 09.07.13 18:15
Оценка: +2
Здравствуйте, Ikemefula, Вы писали:

I>10 лет C# этого разве недостаточно ?


Что-то по отсутствию знания базовых примитивов многопоточности эти 10 лет совсем не чувствуются... )

I>Наверное им было скучно по сто раз одно и то же объяснять.


Если бы. На деле там были громкие крики в стиле "а вот фиг вы сделаете такое на C++". И соответственно после того, как бы представлен код делающий именно это самое, мгновенный тихий слив из темки...
Re[62]: Что посоветуете как аналог С++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 09.07.13 21:10
Оценка: :))
Здравствуйте, alex_public, Вы писали:


_>А всякие официальные пользователи C# типа gandjustas и прочих IT резко слились из темы, как только дело дошло до обсуждения конкретики. )))


не, я просто в отпуск уехал, а когда вернулся стало лениво все читать. Но я так понял что до сих пор никто не показал пример GUI Фреймворка с интегрированными stickful coroutines, так что все примеры ни о чем.

Поправьте, если я ошибаюсь.

_>P.S. А Ikemefula хотя и дико упёртый, но в любом случае достоин уважения. )

ИМХО он может до бесконечности спорить на любую тему.
Re[5]: Что посоветуете как аналог С++
От: Figaro Россия  
Дата: 10.07.13 04:02
Оценка:
[skipped]

OFF: не пишу сюда как правило — теоритики собираются

Но, так как в чужом коде постоянно приходиться разбираться, то замечу — если человек поверхностно глянул, а потом проект "спустил" заказчику, то в той "армии" даже дубы не растут, Вы не заставляете себя вдуматься, что конкретный код делает... А плюсы заставляют...

P.S. Не ради флэйма... я могу, если трезвый и по-английский свободно, и на русском-командо-матерном и разговаривать и читать, и ту же Аду читать с вместе Паскакалем Остальное просто расслабляет программерский контингент, особенно сдача проекта вовремя...
avalon/1.0.433
Re[75]: Что посоветуете как аналог С++
От: vdimas Россия  
Дата: 10.07.13 06:53
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

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


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

I>>>Кроме как расставить все руками у тебя ничего нет, правильно ?

V>>Я же тебе сказал, если ты сам в состоянии управлять очередью исполнения кода в кооперативной многозадачности, то тебе не нужен никакой "приоритет".


I>Нужен, в том то и дело. Одна короутина должна отработать пораньше, а другая может хоть пол-часа ждать.


Для этого не нужен никакой числовой "приоритет", если мы все еще говорим о зависимых друг от друга короутинах, т.е. обладаем информацией об этой зависимости и о способе получать мгновеннную прикладную картинку востребованности ресурсов. Независимые же короутины вполне можно разносить по разным аппаратным потокам.


V>>Еще раз сформулируй, гарантии чего именно. Пример кода я привел. Гарантий никогда нет. С async/await тоже, ес-но.

I>Ты сам вспомни, чего ты вещал про гарантии

Гарантии в обоих языках даются системой типов. Ты же попросил меня отличить синхронный вызов от асинхронного. Сорри, но в C# они отличаются лишь синтаксическим сахаром. Я вполне могу в действующей системе типов расписать происходящее без await.
Re[64]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.07.13 07:52
Оценка:
Здравствуйте, alex_public, Вы писали:

I>>10 лет C# этого разве недостаточно ?


_>Что-то по отсутствию знания базовых примитивов многопоточности эти 10 лет совсем не чувствуются... )


Про базовые примитивы многопоточности здесь ни в одном месте речи не было Но вообще ты прав, я многопоточностью занимался совсем немного и в основном по собтсвенной инициативе.

I>>Наверное им было скучно по сто раз одно и то же объяснять.


_>Если бы. На деле там были громкие крики в стиле "а вот фиг вы сделаете такое на C++". И соответственно после того, как бы представлен код делающий именно это самое, мгновенный тихий слив из темки...


Ваши короутины это плак по тем возможностям которые были утеряны вместе с ассемблером.

На ассемблере это детский лепет, уровня лабораторной задачи на втором семестре ассемблера. Скажем вытесняющая и кооперативная многозадачность это примерно уровень курсовой работы. Щас вот функционалисты ищут способы оптимизации хвостовой рекурсии, а в ассемблере это само работало — continuations, рекурсия на бесконечном стеке и тд и тд и тд.

И кстати говоря, все согласуется с парадоксом Блаба — не хочешь учить ассемблер, значит пишешь на Блабе
Re[76]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.07.13 07:55
Оценка:
Здравствуйте, vdimas, Вы писали:

I>>Нужен, в том то и дело. Одна короутина должна отработать пораньше, а другая может хоть пол-часа ждать.


V>Для этого не нужен никакой числовой "приоритет", если мы все еще говорим о зависимых друг от друга короутинах, т.е. обладаем информацией об этой зависимости и о способе получать мгновеннную прикладную картинку востребованности ресурсов. Независимые же короутины вполне можно разносить по разным аппаратным потокам.


Для двух-трех короутин это работает, да.

I>>Ты сам вспомни, чего ты вещал про гарантии


V>Гарантии в обоих языках даются системой типов. Ты же попросил меня отличить синхронный вызов от асинхронного. Сорри, но в C# они отличаются лишь синтаксическим сахаром. Я вполне могу в действующей системе типов расписать происходящее без await.


Весь твой с++ это просто сахар для ассемблера. Вобщем, раз ты ничего не можешь вспомнить про гарантии, то можно и закончить.
Re[6]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.07.13 07:57
Оценка:
Здравствуйте, Figaro, Вы писали:

F>Но, так как в чужом коде постоянно приходиться разбираться, то замечу — если человек поверхностно глянул, а потом проект "спустил" заказчику, то в той "армии" даже дубы не растут, Вы не заставляете себя вдуматься, что конкретный код делает... А плюсы заставляют...


Что же ты на ассемблере не пишешь, он так заставит думать, не передать словами, только и будешь этим заниматься ? Что, парадокс Блаба мешает ?
Re[63]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.07.13 08:00
Оценка:
Здравствуйте, gandjustas, Вы писали:

_>>А всякие официальные пользователи C# типа gandjustas и прочих IT резко слились из темы, как только дело дошло до обсуждения конкретики. )))


G>не, я просто в отпуск уехал, а когда вернулся стало лениво все читать. Но я так понял что до сих пор никто не показал пример GUI Фреймворка с интегрированными stickful coroutines, так что все примеры ни о чем.


А может тебе сразу операционную систему накидать на коленке ?

G>Поправьте, если я ошибаюсь.


Все что надо уже давно показано.

_>>P.S. А Ikemefula хотя и дико упёртый, но в любом случае достоин уважения. )

G>ИМХО он может до бесконечности спорить на любую тему.

На любую не умею, в отличие от тебя я не лезу туда, где ничего не знаю. Ты подрываешь авторитет дотнетчиков своими аргументами
Re[64]: Что посоветуете как аналог С++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.07.13 15:04
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


_>>>А всякие официальные пользователи C# типа gandjustas и прочих IT резко слились из темы, как только дело дошло до обсуждения конкретики. )))


G>>не, я просто в отпуск уехал, а когда вернулся стало лениво все читать. Но я так понял что до сих пор никто не показал пример GUI Фреймворка с интегрированными stickful coroutines, так что все примеры ни о чем.


I>А может тебе сразу операционную систему накидать на коленке ?


Если интеграция stackful coroutines с гуйней сравнима с написанием ОС, то это конечно говорит в пользу C++

G>>Поправьте, если я ошибаюсь.

I>Все что надо уже давно показано.
А ссылку не модно?

_>>>P.S. А Ikemefula хотя и дико упёртый, но в любом случае достоин уважения. )

G>>ИМХО он может до бесконечности спорить на любую тему.
I>На любую не умею, в отличие от тебя я не лезу туда, где ничего не знаю. Ты подрываешь авторитет дотнетчиков своими аргументами
Практика показывает обратное, но к данной теме отношения не имеет.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.