?

Log in

No account? Create an account

Previous Entry | Next Entry

Бнопня по C++

Засада. Как вы думаете, какая C++ (11) функция может быть быстрее при достаточно развесистом классе Foo?

size_t DirectSize(Foo && foo) {
    auto v = std::vector{std::move(foo)};
    return v.size();
}


size_t IndirectSize(Foo && foo) {
    auto v = construct_vector(std::move(foo));
    return v.size();
}


при условии, что construct_vector() — это функция, определённая в другом модуле?

Poll #2054853 Быстрота, милота

Какая функция может быть быстрее?

DirectSize
9(40.9%)
IndirectSize
13(59.1%)


Вопрос специально сформулирован несколько расплывчато. Хочу мнений!

Comments

mpd
Oct. 5th, 2016 04:39 pm (UTC)
Re: Бнопня по C++
Извиняюсь, я не понимаю, к чему этот комментарий?

К чему сюда ещё ML?

Там логика - какая была, мне утверждают:
в Эрланге и Хаскеле - неизменная (persistent)
C++ - изменяемая
с Raft/Paxos на C++ сложнее из-за этого.

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

Зачем сюда привлекать ещё ML?

По общей договорённости мы уже закрыли этот сред.

Всем - удачного окончания дня!
rdia
Oct. 5th, 2016 04:54 pm (UTC)
Re: Бнопня по C++
> Извиняюсь, я не понимаю, к чему этот комментарий?

Просто чётко показываю разницу, которую thesz не объясняет.

Разница не в том, что нельзя объявить персистентно или неперсистентно, а в том, какой из этих вариантов стоит по-умолчанию. Т.е. в С++ было бы так, как в языках ML/Haskell/Erlang, если бы приходилось везде ставить mutable, а не const.

Хаскель - это близкий родственник ML, в данном случае там всё одно и то же.
mpd
Oct. 5th, 2016 06:38 pm (UTC)
Re: Бнопня по C++
Значит, он не ставил под сомнение, что в Си++ - persistent есть, как и в альтернативных ЯП.

Ах, вот, что у него означало

> Надо прилагать усилия, чтобы сделать её изменяемой. В C++ - изменяемая, надо прилагать усилия, чтобы сделать её неизменной.

Т.е. добавить "ref" (или что там в эрланге и хаскеле), и добавить "const" (генетически досталось от Си) - это и называется "прилагать усилия".

Хм. :-\
Толи мне надо уходить уже давно из профессии, либо я что-то не понимаю...
В каждом языке есть свои неписаные правила. Тут я приводил, например, для эрланга: http://lionet.livejournal.com/140057.html?thread=4611353#t4611353
У каждого опытного программиста на Си++ - глаз намётан, отсутствие "&" или "const" во соответствующих контекстах - сразу вызывает тревогу.
Вот, хоть убейте меня, я не вижу здесь каких-то вообще усилий: какая разница, отсутствие или наличие (можно же случайно вставить этот "ref") - код должен быть корректным. Да, для кого-то - шум, да, "неакуратненько", но если это - реальные проблемы языка, то даже и не знаю, ...

Впрочем, я всё больше и больше чувствую состоявшейся жертвой троллинга.
thesz
Oct. 26th, 2016 05:42 pm (UTC)
Re: Бнопня по C++
Вы крутитесь вокруг const, как части синтаксиса.

Неизменность же означает необходимость создавать новые данные, разделяя старые, что приводит с проблемам с владением в C++. Что и приводит к приложению усилий. Понятно?
mpd
Oct. 26th, 2016 07:38 pm (UTC)
Re: Бнопня по C++
С прошедшим ДР!
Мои самые наилучшие пожелания!

Ой, да, бог с ним, с Си++, с ФЯПами, передачей объектов по значению и прочей чушью...
Надеюсь, со временем - разберётся народ, применит нужный инструмент для соответствующей задачи.
Иначе я потеряю окончательно веру в людей и цивилизацию.

Надеюсь, хоть кому-то удаться сходить на юбилей к Кнышеву. ;-)
thesz
Oct. 26th, 2016 11:19 pm (UTC)
Re: Бнопня по C++
Могу ли я получить ответ на мой вопрос?
mpd
Oct. 27th, 2016 07:40 am (UTC)
Re: Бнопня по C++
К сожалению, не обладая опытом разработки на тех языках, которые обсуждаются, как альтернатива Си++, сложно придти к объективному заключению.

В свою очередь, такие понятия, как "приложение усилий" (фигурирующее в объяснениях) - очень субъективны: мне, например, чтобы писать комментарии на немецком языке в исходном коде, нужно прилагать немыслимые усилия (и раньше, и сейчас, и в будущем), а кто-то из нас - так и делал когда-то (аналогично со штангой, я некоторый вес - вообще не подниму, который другому из нас - раз плюнуть, не прилагая усилий). Отсутствие приложения усилий при решении задачи может быть непосредственным следствием подготовки к решению подобного класса задач (например, если ты не можешь поднять половину своего веса, чего ты вообще пошёл разгружать вагоны; не понимаешь, чем передача аргументов по значению отличается от передачи аргументов по ссылке - зачем браться за программирование на этом языке).

Учитывая сказанное, я не могу откровенно сказать, что да, мне - понятно. Скорее, я понял направление, по которому мне стоит в жизни развиваться, чтобы затем сделать моё заключение об обсуждаемом вопросе.

Получен ли ответ на вопрос? (я понимаю, он - ни да, ни нет, но некоторые вопросы не могут иметь такого ответа)
thesz
Oct. 27th, 2016 02:36 pm (UTC)
Re: Бнопня по C++
Вопрос был не в том, на каких языках вы разрабатывали, и что.

Вопрос был в том, понятно ли вам, что создание новых объектов в C++ и разделение старых между разными версиями структуры данных и приводит к увеличению усилий при программировании на С++ (внешне) неизменных структур по сравнению с изменяемыми структурами.

Итак, понятно ли вам это? Если не понятно, то что я должен объяснить или продемонстрировать?
mpd
Oct. 27th, 2016 02:54 pm (UTC)
Re: Бнопня по C++
Вопрос мне - понятен.
Утверждение о увеличении усилий - мне не кажется очевидным.
Объяснять и демонстрировать - ничего не надо, т.к. я постараюсь сам в этом убедиться со временем, чтобы сформировать своё представление, а пока мне не хватает опыта, я - сдаюсь.
Огромнейшее спасибо за прилагаемые усилия по моему просвещению!

Profile

lionet
Lev Walkin
Website

Latest Month

December 2016
S M T W T F S
    123
45678910
11121314151617
18192021222324
25262728293031
Powered by LiveJournal.com
Designed by yoksel