9 грудня відбувся вебінар “Why Should You Learn C++ in 2021-22?”
Розглянули, наскільки популярною є C/C++ і де її можна використовувати. Поговорили про основні переваги та недоліки цієї мови програмування. Розповіли, як розвивається C/C++ і, нарешті, ми зрозуміли, як почати вивчати C/C++.
Більше про захід: https://www.globallogic.com/ua/about/events/c-webinar-why-you-should-learn-c-in-2021-22/
Приємного перегляду і не забудьте залишити коментар про враження від вебінару!
7. 7
Confidential
1. Operating System
2. Services
3. Game development
4. IoT devices
5. Embedded (Automotive, Medical devices, etc)
6. Banking Applications
7. Compilers/Programing Languages
8. Many many more industries
Usage
11. 11
Confidential
static void First(benchmark::State& state) {
for (auto _ : state) {
const auto inch{6.0};
const auto mm {InchToMm(inch)};
benchmark::DoNotOptimize(inch);
benchmark::DoNotOptimize(mm);
}
}
BENCHMARK(First);
constexpr auto InchToMm(auto inch) {return inch * 25.4;}
static void Second(benchmark::State& state) {
for (auto _ : state) {
auto inch{6.0};
const auto mm {InchToMm(inch)};
benchmark::DoNotOptimize(inch);
benchmark::DoNotOptimize(mm);
}
}
BENCHMARK(Second);
Performance is not that simple
Quick C++ Benchmark
20. 20
Confidential
Ranges
std::sort(v.begin(), v.end());
std::vector<int> filtered;
std::copy_if (v.begin(), v.end(), std::back_inserter(filtered), [](int i){return i % 2 == 0;} );
filtered.resize(2);
for(const auto i : filtered) {
std::cout << i << " ";
}
std::ranges::sort(v);
for (auto const i : v
| std::views::filter([](auto const i) {return i % 2 == 0; })
| std::views::take(2)) {
std::cout << i << " ";
};
21. 21
Confidential
Parallel Algorithms
// runs the program sequentially
std::transform(std::execution::seq, workVec.begin(), workVec.end(), workVec.begin(), [](double arg){
return std::tan(arg); });
// runs the program in parallel on multiple threads
std::transform(std::execution::par, workVec.begin(), workVec.end(), workVec.begin(), [](double arg){
return std::tan(arg); });
// runs the program in parallel on multiple threads and allows the interleaving of individual loops
std::transform(std::execution::par_unseq, workVec.begin(), workVec.end(), workVec.begin(), [](double
arg){ return std::tan(arg); });
2021 всетаки варто почати вчити як най скоріше але так як починаються свята я все розумію тому 2022 рік також піходить
Головна ідея презентаці це допомогти з рішення чи варто вчити С++ і це не обовязково як основну мову програмування ви також можете розглянути її як додаткову мову яка буде допомагати в розробці
Але перед початком хочу попросити вас перейти за посиланням і написати мови які ви вже знаєте, почали вивчати ну а бо плануєте
https://www.menti.com/
2994 8937
Дуже коротко пройдемся по історії
Подивимося наскільки вона популярна
Також розглянемо галузі в яких використовується мова ну і відповідно переваги та недоліки
І в кінці я попробую показати куда рухається мова і з чого варто почати вивчення
Як завжди все починається з історії тому коротко відмічу основні етапи розвитку С++. Це звичайно створення самої мови, почалося це в Bell Labs невеликою групою інженерів. Творцем мови вважається Страуструп
“When I joined Bell Labs, I was basically told to do something interesting...” — Bjarne Stroustrup
Початкова назва мала бути С з класами
але з часом це переросло в повноцінну мову
Наступний вагомий резіл це був офіційний стандарт в 1989
С++11
С++17
С++20
С++23 In progress
Як працює рейтинг
Враховується мова програмування яка має сторінку в вікіпедії де вказано що це мова програмуванні -(Ruby on) Rails, Excel, Android
least 5,000 hits for +"<language> programming" for Google.
Дані беруться з багатьох систем пошуку не тільки з гугл, а також з сайтів які мають пошук і відповідають критеріям таких як амазон
Python, java прекрасні мови але їхньою особливістю є те що на ринку багато вакансій по автоматизованому програмуванню (можливо хтось хоче попробувати себе в цій сфері) і за рахунок цього рейтинг збільшується
Python, java також рекомендую до вивчення, але поділюся трохи своїм досвідом починав з С - С++ - Java - Python
The hall of fame listing all "Programming Language of the Year" award winners is shown below. The award is given to the programming language that has the highest rise in ratings in a year.
C++ - 2003
C - 2008, 2017, 2019
Highest Position (since 2001): #3 in May 2019
Lowest Position (since 2001): #5 in Feb 2008
Java JavaScript Python Go R
Ukraine search, World wide Період пошуку
Netflix не знашов дані про використання але в інших фірмах активно використовується для побудови бекенду або facebook, youtube, search engine
Не просто використовують є займають основну частину в комітеті по стандартизації
Andrei alexandrescu працював
Більше 40 і всі основні проблеми мови вже вирішені
Тяжко виділити недоліки або переваги тому що все залежить від того як подивитися тому я вирішив показати особливості а ви вже вирішете чи це переваги чи недолік для вас
Обєктно орієнтованість переваги чи недолік (не чисто обєктоно орієнтована
Компіляція можна запускати без віртуальних машин і інтерпритаторів
Можливість роботи з хардвером / Особливості меморі менеджменту смарт поінтери / Відсутність гарбадж колектору / Складність
Величезне комюніті / комітет від ~40 зараз ~350 / дуже багато статтей і відповідей на стек оферфлов / більшість проблем мають відповідь
Що це таке?
Пройтися по характеристиках /використання памяті | загрузка CPU | загрузка потоків
В більшості змагань використовується С++ так як обмеження по швидкодії
constexpr auto InchToMm(auto inch) {return inch *25.4;}
static void First(benchmark::State& state) {
for (auto _ : state) {
const auto inch_const{6.0};
const auto mm {InchToMm(inch_const)};
benchmark::DoNotOptimize(inch_const);
benchmark::DoNotOptimize(mm);
}
}
BENCHMARK(First);
static void Second(benchmark::State& state) {
for (auto _ : state) {
auto inch_dynamic{6.0};
const auto mm {InchToMm(inch_dynamic)};
benchmark::DoNotOptimize(inch_dynamic);
benchmark::DoNotOptimize(mm);
}
}
BENCHMARK(Second);
https://quick-bench.com/q/WtQEP0JAyRKIa3VYQ2-bDCnUgH4 clang second faster
https://quick-bench.com/q/JQztmv34j6V2-Bcus2G5mCH9n9I gcc first facter
Зміна порядку змінних може покращити перформанс
Показати приклад з int асемблерний код
Перформанс складно і краще почекати коли процесори стануть швидші
Закон мура працює кількість транзисторів
Споживча потужність і частота
Нічого спільного з криптографією
Кожна мова має свої недолікі можна переглянути наприклад на sonarsouce
Як таке можливо?
Допустимо аплікація використовує сторьоню динамічну бібіліотеку
За допомого вказівника
Тяжко передбачити так як я не можу знати майбутнє
Є основні проблеми які фокусується комітет такі як:
Стандартна білд система \ менеджер пакетів з центральним репозиторієм \ більше бібліотек і краща підтримка багатопоточності
Zero overhead | shorter | safer | faster
Що таке інклуд
Два інслуди можуть впливати один на одного в залежності відпорядку
Модулі можуть пришвидшити процес компіляції
Стандартний менеджер пакетів з централізованим сховищем
The constinit specifier declares a variable with static or thread storage duration. If a variable is declared with constinit,
Значно покращує перформанс виконнання коду підчас компіляції
https://coliru.stacked-crooked.com/
https://wandbox.org/
Теплейти як було до того
Простіше, читабельніше
template <typename T>
concept Number = (std::integral<T> || std::floating_point<T>) && !std::same_as<T, char>;
auto add(Number auto lth, Number auto rth)
Coroutines are a convenient mechanism for implementing multiple algorithms in separate code blocks rather than combining those algorithms into a single block of convoluted code.
Спочатку функції | потім ламбди | і тепер
Все ще в процесі розробки
Багато інших мов вже мають
Вибирають корисні речі і додають в мову
https://www.youtube.com/watch?v=d_E-VLyUnzc&ab_channel=CppCon
Сортувати, фільтрувати по парних числах і взяти перші 2 елементи
Безпечніше нема проблем з ітераторами
Простіше читабельніше
https://www.modernescpp.com/index.php/parallel-algorithms-of-the-stl-with-gcc
Тансформ модифікує контейнер відповідно до заданої функції
Виконано пятсот тис ітерацій з рандомними числами
Нахил на багато почтоність