#include <iostream>
int main()
{
std::cout << "Здравейте, аз съм Борислав!\n";
std::cout << "Тези слайдове са тук: https://is.gd/unrealizedv1\n";
return 0;
}
Блог пост за това какво правим там: ibob.bg/blog
... и още
Аналогията с мениджърския триъгълник е възможна
Ефективност на разработка: некачествен код
няма да се занимаваме с тях
Често имаме от всичко по малко
😞
Имаме избор
... което не винаги е възможно или практично
But that's just, like, my opinion, man
class big_obj {
public:
big_obj();
big_obj(const big_obj&);
big_obj& operator=(const big_obj&);
big_obj(big_obj&&);
big_obj& operator=(big_obj&&);
private:
big_data m_data;
};
// ...
std::vector<big_obj> objects;
// ...
objects.push_back(std::move(new_object));
Какъв е проблемът тук?
std::vector използва std::move_if_noexcept
class big_obj {
public:
big_obj();
big_obj(const big_obj&);
big_obj& operator=(const big_obj&);
big_obj(big_obj&&) noexcept;
big_obj& operator=(big_obj&&) noexcept;
private:
big_data m_data;
};
// ...
std::vector<big_obj> objects;
// ...
objects.push_back(std::move(new_object));
Aз мисля, че exception от move-constructor е пълна глупост и никога не трябва да съществува
Една история със std::function
struct simple_struct {
std::function<void(int)> func;
std::vector<int> data; // call func with each element in data
};
//...
std::vector stuffs;
vector::vector(const vector&)😲
std::function
ufunctionitlib::ufunctionstd::function
auto pfoo = std::make_unique<foo>
itlib::ufunction<void()> func = [p = std::move(pfoo)]() mutable {
// ...
consumer.consume(std::move(pfoo));
}
push_task(func)
Според мен в почти всички случаи std::function
може да бъде заменена с ufunction
И след като говорихме за small function optimization...
small_vectorsmall_vectorboost::small_vector - супер мощна имплементацияitlib::small_vectorstd::move_if_noexceptАми ако размерът е по-малък от N в 100% от времето?
std::array?
std::arraystatic_vectorsmall_vectorboost::static_vector - супер мощна имплементацияitlib::static_vectorstd::move_if_noexceptАми ако размерът напълно произволен?
std::vector?
reallocИмаме памет:
std::vector и reallocmemcpy пропуска конструкторите и деструкторите_expandpod_vectoritlib::pod_vectorrealloc, memcpy и memmoveПри custom алокатор извън Windows: търсете _expand
optimal_alloc_vector
Имаме сто вида вектор. Как да напишем алгоритъм?
void work(const std::vector<obj>& data);
вече не работи
Темплейтите, естествено, работят, но си имат цена.
span, memory_viewspan, memory_viewstd::spanboost::span - съвместим със C++20itlib::memory_viewflat_map, flat_set - map with cache localitysentry - finally-type blocksБорислав Станимиров / ibob.bg / @stanimirovb
Тези слайдове: ibob.bg/slides/unrealized-alpha/
Демо код: github.com/iboB/unrealized-problems-demo
Лиценз на слайдовете Creative Commons By 4.0