Информация об изменениях

Сообщение Re[19]: Rust в Dropbox от 01.07.2016 14:00

Изменено 01.07.2016 14:02 Serginio1

Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


SS>>>>>>>> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два

S>>>>>>>>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null
EP>>>>>>>К чему ты ведёшь? Как это относится к обсуждаемому вопросу?
S>>>> Да.
EP>>>Что "да"?
S>> Это относится к тому, что ты охаял.

EP>Где охаял? Можешь целиком сформулировать мысль?

https://github.com/rsdn/CodeJam/blob/e86dc27fadd28f7932a0c840f5356e98cfa7a40c/Main/src/Collections/EnumerableExtensions.AggregateFuncs.cs
EP>>>Например:
EP>>>
EP>>>auto it = min_element(source, [](auto &i){ return i->value; });
EP>>>

S>> А теперь код element. И что бы было различие между ссылочными и валуе типами.

EP>Я приводил код, нужен только wrapper в пару строк для Range интерфейса, о котором я сразу и сказал
Автор: Evgeny.Panasyuk
Дата: 23.03.16
.

Ну вот нужно добавить. По сути и получится тоже самое. Да и на самом деле мне как пользователю наплевать как внутри реализовано. Главное быстро и удобно. Смотри на конечный результат.

S>>>> По алгоритму указанному в MinItem. А именно null не сравниваются для указателей.

EP>>>Добавь filtered во внутрь обёртки, при этом алгоритм фильтрации не нужно расписывать вручную — его заинлайнит компилятор.
EP>>>
EP>>>source | filtered([](auto &x){ return x != nullptr; })
EP>>>

S>> То есть мы должны сначала отфильтровать по null а затем применять искать минимум?

EP>Нет, не "сначала" отфильтровать, а применить ленивый фильтр, который даст вид range без nullptr.

То есть делать то же самое, что тебе не понравилось. У ребят сделано тоже самое. Только две ветки для валуе типов и Nullable

S>>Пока это никак не тянет на

S>>var МаксЗнач=source.MinItem(i => i.Value)?.Value

EP>Спрячь применение фильтра во внутрь обёртки, если тебе нужен именно этот вариант

И будет в итоге тоже самое.
S>>Я так понимаю async([i]{ return reschedule(), i*100; }); возвращает аналог Task?

EP>Да.


S>>А кто готовит автомат? В .Net этим занимается компилятор.


EP>Никто специальный автомат не готовит, я же говорю что это на основе stackful coroutines. Автомат нужен для stackless.

Я с вас хренею любите вы словами бросаться. По поводу await async куча статей с разбором как все работает. По С++ все туго.
Хоть бы ссылку на толковую статью.

S>>Кстати по поводу

S>> // await is not limited by "one level" as in C
S>>Есть мнтоды Task WhenAll , WhenAny

EP>Это не в тему. Смотри пример по ссылке — await из bar'а возвращает управление на самый вверх, в C# пришлось бы ставить await bar внутри foo, добавлять async, и так на всех уровнях. Тут же можно вызывать await на самом глубоком уровне, не меняя код на промежуточных.

Так await и показывает, что функция асинхронная. А вот вызов просто bar воспринимается как синхронная. Где логика?

S>> Ты всю эту библиотеку изучил? Лучше бы Linq изучил. Тогда вопросов бы таких не было.


EP>Лучше бы ты изучил STL, тогда хотя бы понял о чём речь

Я то как раз изучаю и понимаю о чем ты говоришь. Советую и тебе C# подтянуть.
S>>Вот когда покажешь такой же ваприант тогда поверю. Пока все мимо.
S>> То есть твой вариант не универсален.

EP>Почему он не универсален?

Я не могу его применить одинаково для валуе и ссылочных типов с учетом null.
Re[19]: Rust в Dropbox
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


SS>>>>>>>> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два

S>>>>>>>>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null
EP>>>>>>>К чему ты ведёшь? Как это относится к обсуждаемому вопросу?
S>>>> Да.
EP>>>Что "да"?
S>> Это относится к тому, что ты охаял.

EP>Где охаял? Можешь целиком сформулировать мысль?

https://github.com/rsdn/CodeJam/blob/e86dc27fadd28f7932a0c840f5356e98cfa7a40c/Main/src/Collections/EnumerableExtensions.AggregateFuncs.cs
EP>>>Например:
EP>>>
EP>>>auto it = min_element(source, [](auto &i){ return i->value; });
EP>>>

S>> А теперь код element. И что бы было различие между ссылочными и валуе типами.

EP>Я приводил код, нужен только wrapper в пару строк для Range интерфейса, о котором я сразу и сказал
Автор: Evgeny.Panasyuk
Дата: 23.03.16
.

Ну вот нужно добавить. По сути и получится тоже самое. Да и на самом деле мне как пользователю наплевать как внутри реализовано. Главное быстро и удобно. Смотри на конечный результат.

S>>>> По алгоритму указанному в MinItem. А именно null не сравниваются для указателей.

EP>>>Добавь filtered во внутрь обёртки, при этом алгоритм фильтрации не нужно расписывать вручную — его заинлайнит компилятор.
EP>>>
EP>>>source | filtered([](auto &x){ return x != nullptr; })
EP>>>

S>> То есть мы должны сначала отфильтровать по null а затем применять искать минимум?

EP>Нет, не "сначала" отфильтровать, а применить ленивый фильтр, который даст вид range без nullptr.

То есть делать то же самое, что тебе не понравилось. У ребят сделано тоже самое. Только две ветки для валуе типов и Nullable

S>>Пока это никак не тянет на

S>>var МаксЗнач=source.MinItem(i => i.Value)?.Value

EP>Спрячь применение фильтра во внутрь обёртки, если тебе нужен именно этот вариант

И будет в итоге тоже самое.
S>>Я так понимаю async([i]{ return reschedule(), i*100; }); возвращает аналог Task?

EP>Да.


S>>А кто готовит автомат? В .Net этим занимается компилятор.


EP>Никто специальный автомат не готовит, я же говорю что это на основе stackful coroutines. Автомат нужен для stackless.

Я с вас хренею любите вы словами бросаться. По поводу await async куча статей с разбором как все работает. По С++ все туго.
Хоть бы ссылку на толковую статью.

S>>Кстати по поводу

S>> // await is not limited by "one level" as in C
S>>Есть мнтоды Task WhenAll , WhenAny

EP>Это не в тему. Смотри пример по ссылке — await из bar'а возвращает управление на самый вверх, в C# пришлось бы ставить await bar внутри foo, добавлять async, и так на всех уровнях. Тут же можно вызывать await на самом глубоком уровне, не меняя код на промежуточных.

Так await и показывает, что функция асинхронная. А вот вызов просто bar воспринимается как синхронная. Где логика?

S>> Ты всю эту библиотеку изучил? Лучше бы Linq изучил. Тогда вопросов бы таких не было.


EP>Лучше бы ты изучил STL, тогда хотя бы понял о чём речь

Я то как раз изучаю и понимаю о чем ты говоришь.
Выложил статью Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
Исходники лежат Здесь


Выложил статью
Разработка → Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux
Исходники здесь

Советую и тебе C# подтянуть.
S>>Вот когда покажешь такой же ваприант тогда поверю. Пока все мимо.
S>> То есть твой вариант не универсален.

EP>Почему он не универсален?

Я не могу его применить одинаково для валуе и ссылочных типов с учетом null.