#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
ufunction
itlib::ufunction
std::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_vector
small_vector
boost::small_vector
- супер мощна имплементацияitlib::small_vector
std::move_if_noexcept
Ами ако размерът е по-малък от N в 100% от времето?
std::array
?
std::array
static_vector
small_vector
boost::static_vector
- супер мощна имплементацияitlib::static_vector
std::move_if_noexcept
Ами ако размерът напълно произволен?
std::vector
?
realloc
Имаме памет:
std::vector
и realloc
memcpy
пропуска конструкторите и деструкторите_expand
pod_vector
itlib::pod_vector
realloc
, memcpy
и memmove
При custom алокатор извън Windows: търсете _expand
optimal_alloc_vector
Имаме сто вида вектор. Как да напишем алгоритъм?
void work(const std::vector<obj>& data);
вече не работи
Темплейтите, естествено, работят, но си имат цена.
span, memory_view
span, memory_view
std::span
boost::span
- съвместим със C++20itlib::memory_view
flat_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