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

Сообщение Re[17]: Rust в Dropbox от 01.07.2016 11:59

Изменено 01.07.2016 12:35 Serginio1

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

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


S>>>> А шаблоны сразу в бинарный код?

EP>>>А зачем в текст? Чтобы заново парсить?
S>> А теперь задай себе вопрос, почему шаблоны так долго компилятся?

EP>Думаешь потому что текст заново парсится?

Разворачиваются
EP>1. Потому что мощные — это требует ресурсов компилятора.
EP>2. Они полные по Тьюрингу, и как следствие на них реализуется разнообразные алгоритмы времени компиляции.
EP>3. Потому что компилятор сильно оптимизируют выхлоп от них. Конкретный пример
Автор: Evgeny.Panasyuk
Дата: 20.10.14
.

Угу, а если без оптимизации то должны как в .Net

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

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

EP>Что "да"?

Это относится к тому, что ты охаял.
S>> А можно привести аналог
S>>
S>>var МаксЗнач=source.MinItem(i => i.Value)?.Value;
S>>

S>> Имея расширения мне нужно всего навсего добавиить лямбду доступа к полю. Как это выглядит на C++?

EP>Например:

EP>
EP>auto it = min_element(source, [](auto &i){ return i->value; });
EP>


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

EP>В каком смысле?


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


EP>Добавь filtered во внутрь обёртки, при этом алгоритм фильтрации не нужно расписывать вручную — его заинлайнит компилятор.

EP>
EP>source | filtered([](auto &x){ return x != nullptr; })
EP>


То есть мы должны сначала отфильтровать по null а затем применять искать минимум?
Пока это никак не тянет на
var МаксЗнач=source.MinItem(i => i.Value)?.Value

S>>>>Я решаю кучу различных задач. И кстати GUI мне только помогает. А то консоль наше всё.

EP>>>Причём тут консоль? Думаешь если не-GUI задача, то значит консоль?
S>> А ну да есть еще log файлы и VS для отладки.

EP>


S>>>>async await

EP>>>Await реализуется на stackful coroutines, причём получается даже удобнее так как нет инфецирования await'ами/async'ами по всему callstack, и мощнее — так как намного легче интегрировать асинхронные вставки в существующий код.
S>> Пример пожалуйста.

EP>http://rsdn.ru/forum/cpp/5219587.1
Автор: Evgeny.Panasyuk
Дата: 03.07.13


Рад за вас если у вас все прекрасно. Кстати. Я так понимаю async([i]{ return reschedule(), i*100; }); возвращает аналог Task?
А кто готовит автомат? В .Net этим занимается компилятор. Кстати по поводу
// await is not limited by "one level" as in C
Есть мнтоды Task WhenAll , WhenAny


S>>>>И как там в C++ c Nullable?

EP>>>Есть boost::optional.
EP>>>Но, в контексте алгоритмов намного мощнее не optional, а итератор — так как сделано в STL. Итератор одним махом даёт:
EP>>>1) Позицию элемента — например минимальный можно swap'нуть с первым элементом
EP>>>2) Два диапазона [first, min) и [min, last), которые можно обрабатывать в следующих алгоритмах
EP>>>3) Информацию о том найдено ли что-то или нет
S>>На Linq это делается значительно проще.

EP>Да неужели? Именно поэтому EqualRange из CodeJam возвращает два унылых индекса?


Ты всю эту библиотеку изучил?
S>>И можно писать свои расширения как с MinItem
S>>Методы Skip и Take

EP>Расширения для этого не нужны.


Вот когда покажешь такой же ваприант тогда поверю. Пока все мимо.
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


S>>>> А шаблоны сразу в бинарный код?

EP>>>А зачем в текст? Чтобы заново парсить?
S>> А теперь задай себе вопрос, почему шаблоны так долго компилятся?

EP>Думаешь потому что текст заново парсится?

Разворачиваются
EP>1. Потому что мощные — это требует ресурсов компилятора.
EP>2. Они полные по Тьюрингу, и как следствие на них реализуется разнообразные алгоритмы времени компиляции.
EP>3. Потому что компилятор сильно оптимизируют выхлоп от них. Конкретный пример
Автор: Evgeny.Panasyuk
Дата: 20.10.14
.

Угу, а если без оптимизации то должны как в .Net

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

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

EP>Что "да"?

Это относится к тому, что ты охаял.
S>> А можно привести аналог
S>>
S>>var МаксЗнач=source.MinItem(i => i.Value)?.Value;
S>>

S>> Имея расширения мне нужно всего навсего добавиить лямбду доступа к полю. Как это выглядит на C++?

EP>Например:

EP>
EP>auto it = min_element(source, [](auto &i){ return i->value; });
EP>


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

EP>В каком смысле?


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


EP>Добавь filtered во внутрь обёртки, при этом алгоритм фильтрации не нужно расписывать вручную — его заинлайнит компилятор.

EP>
EP>source | filtered([](auto &x){ return x != nullptr; })
EP>


То есть мы должны сначала отфильтровать по null а затем применять искать минимум?
Пока это никак не тянет на
var МаксЗнач=source.MinItem(i => i.Value)?.Value

S>>>>Я решаю кучу различных задач. И кстати GUI мне только помогает. А то консоль наше всё.

EP>>>Причём тут консоль? Думаешь если не-GUI задача, то значит консоль?
S>> А ну да есть еще log файлы и VS для отладки.

EP>


S>>>>async await

EP>>>Await реализуется на stackful coroutines, причём получается даже удобнее так как нет инфецирования await'ами/async'ами по всему callstack, и мощнее — так как намного легче интегрировать асинхронные вставки в существующий код.
S>> Пример пожалуйста.

EP>http://rsdn.ru/forum/cpp/5219587.1
Автор: Evgeny.Panasyuk
Дата: 03.07.13


Рад за вас если у вас все прекрасно. Кстати. Я так понимаю async([i]{ return reschedule(), i*100; }); возвращает аналог Task?
А кто готовит автомат? В .Net этим занимается компилятор. Кстати по поводу
// await is not limited by "one level" as in C
Есть мнтоды Task WhenAll , WhenAny


S>>>>И как там в C++ c Nullable?

EP>>>Есть boost::optional.
EP>>>Но, в контексте алгоритмов намного мощнее не optional, а итератор — так как сделано в STL. Итератор одним махом даёт:
EP>>>1) Позицию элемента — например минимальный можно swap'нуть с первым элементом
EP>>>2) Два диапазона [first, min) и [min, last), которые можно обрабатывать в следующих алгоритмах
EP>>>3) Информацию о том найдено ли что-то или нет
S>>На Linq это делается значительно проще.

EP>Да неужели? Именно поэтому EqualRange из CodeJam возвращает два унылых индекса?


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

S>>И можно писать свои расширения как с MinItem

S>>Методы Skip и Take

EP>Расширения для этого не нужны.


Вот когда покажешь такой же ваприант тогда поверю. Пока все мимо.
То есть твой вариант не универсален.