Подорожуй з gofrie.com

CppCon 2014

CppCon 2014!!!

Відеоматеріали з недавнього CppCon.


Є і відео зі Степановим.

Гурток 11 листопада доведеться посунути на 18.11 у зв'язку із засіданням в цей час Науково-технічної ради НаУКМА ВВ

Automatic Vectorization, and A Curious Case of Java Being Faster Than C++




Speaker: Danylo Fitel

Talk slides.

Demo projects.

11 жовтня 2014, 16:30 переноситься на 18 листопада
Аудиторія 1-331

Гурток 14.10.2014

C++ 11. Покращення вже сьогодні

Доповідач Чайка Андрій
Дата: Вівторок (14.10.2014)
Місце: 1-331
Час: 6 пара

Template Metaprogramming in C++

Практична користь шаблонів в плюсах — не тільки генерація коду (яскравий приклад — стратегії Alexandrescu), але й обчислення на етапі компіляції і оптимізація коду (далі поясню, що маю на увазі).

1. Обчислення на етапі компіляції. Представляють скоріше теоретичний інтерес, хоча і дають простір для оптимізації (в деяких практичних застосуваннях, наприклад, FFT, забезпечують дуже пристойний виграш в швидкості).
На жаль, чомусь всі люблять демонструвати паршиві приклади з неефективними алгоритмами (наприклад, числа Фібоначчі і піднесення до степеня ніколи не роблять правильно). Виправив цю досадну несправедливість.
Починаючи з C++11, такі трюки втрачають актуальність через constexpr, який дозволяє робити те саме, тільки зрозуміліше і естетичніше.

2. Оптимізація коду. Як правило, йдеться про якийсь ітеративний алгоритм, реалізовиний рекурсивними шаблонними визначеннями. Розумний компілятор, який знає трюки типу inlining і loop unrolling, може перетворити таку шаблонну рекурсивну функцію в звичайну послідовність операторів без логіки циклу чи рекурсії, тим самим значно вкоротивши кількість інструкцій.
Для прикладу, так можна перетворити BubbleSort масиву, розмір якого — стала етапу компіляції, в послідовність свопів, більше того, в цій ситуації prefetcher дасть максимальний приріст швидкості. Інший приклад — обчислення функції за розкладом в ряд Тейлора, кількість членів розкладу якого — теж константа етапу компіляції: на виході — код без зайвих змінних/лічильників/викликів функцій.

Проект для студії (версія 2013+) лежить тут. Деякі фічі типу static_assert не працюватимуть в старих студіях, їх можна закоментувати. З іншими компіляторами проблем бути не повинно (хіба якісь нюанси часткової спеціалізації).

А тут непогана презентація про шаблони в плюсах, в тому числі і про їх повноту за Тюрингом.

Enjoy!

Must read books, my advise

Вирішив додати книжечку в Must Read:
Читається легко, щось схоже на Effective C++, але вже більш філософського маштабу:
This book

Варіант розв'язку іспиту з ООП (2012-2013)

Варіант розв'язку іспиту з об'єктно-орієнтованого програмування (2011-2012)
Завантажити

David Abrahams, Aleksey Gurtovoy. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond



«C++ Template Metaprogramming» sheds light on the most powerful idioms of today's C++, at long last delivering practical metaprogramming tools and techniques into the hands of the everyday programmer.
Since the introduction of templates, C++ programmers have discovered surprising and powerful ways to perform computation at compile-time. While the excitement generated by these capabilities among C++ experts has reached the community at large, their practical application remains out-of-reach for many programmers. Literature on C++ template metaprogramming has focused primarily on details of low-level «tricks» at the expense of strong idioms and abstractions, and without illuminating the path from metaprogramming to expressive interfaces and efficient, maintainable software.

This book delivers both «big picture» ideas and practical tools. It explains what metaprogramming is, why it matters, and how the unique combination of features in C++ make it an especially powerful language for metaprogramming. It also presents the Boost Metaprogramming Library, a powerful open source framework of high-level compile-time components based on familiar STL idioms, which makes C++ metaprogramming easy, expressive, and fun.

Бьярн Страуструп. Принципы и практика использования C++



Дана книга являє собою вступний курс програмування, написаний автором мови С++.

Автор книги вважає, що читачі зрештою почнуть писати нетривіальні програми або в якості професійних розробників програмного забезпечення, або в якості програмістів, які працюють в інших галузях науки і техніки. Основні концепції і методи програмування в книзі викладаються глибше, ніж це прийнято в традиційних вступних курсах. Це дозволить читачам розробляти корисні, правильні, зрозумілі і ефективні програми. Книга являє собою введення в програмування взагалі, включаючи об'єктно-орієнтоване і узагальнене програмування. Вона також являє собою прекрасне введення в мову С++, один з найбільш популярних мов програмування в сучасному світі. У книзі описані сучасні методи програмування на С++, включаючи стандартну бібліотеку, що дозволяє спростити програмування.

Книга призначена в основному для людей, які ніколи раніше не програмували. Вона випробувана більш ніж тисячею студентів університету. Проте досвідчені програмісти і студенти, вже вивчили основи програмування, також знайдуть в книзі багато корисної інформації, яка дозволить їм перейти на більш високий рівень майстерності.

Перша половина книги охоплює широкий спектр основних понять, методів проектування і програмування, властивостей мови С++ і його бібліотек. Це дозволить читачам писати програми, виконують введення і виведення даних, обчислення і побудова простих графічних зображень. У другій половині розглядаються більш спеціалізовані теми, такі як обробка тексту і тестування. У ній міститься багато довідкового матеріалу. Вихідні коди і інші додатки читачі можуть знайти на веб-сайті автора.

Брюс Эккель. Философия С++. Введение в стандартный С++



У книзі «Философия С++. Введение в стандартный С++» послідовно і методично викладаються питання використання об'єктно-орієнтованого підходу до створення програм. Автор не просто описує різні проблеми і способи їх вирішення, він розкриває перед читачем особливий спосіб мислення, не володіючи яким неможливо комфортно почувати себе в об'єктно-орієнтованої середовищі.

Це одна з тих книг, які обов'язково повинен прочитати кожен, хто всерйоз займається розробкою програмного забезпечення в C++.

Стенли Б. Липпман. Язык программирования C++. Вводный курс



Нинішнє (4-e) видання такого популярного вступного курсу стандартної мови C++ було повністю перероблено, реорганізовано і переписано так, щоб допомогти швидше і ефективніше навчитися програмувати на цій мові. У міру розвитку мови C++, автор намагається вносити в подальші видання відповідні зміни. Тепер стандартна бібліотека C++ описана з самого початку, що дозволяє читачеві відразу приступити до створення працездатних програм ще до вивчення подробиць мови.
Тут містяться корисні поради, які допоможуть полегшити створення програм, а також підвищити їх ефективність. Приклади, в яких використовуються можливості бібліотек, дозволяють продемонструвати переваги мови C++, а також найбільш ефективні прийоми його застосування. Як і в попередніх виданнях, тут обговорюються фундаментальні концепції і методи мови C++, що робить книгу найціннішим ресурсом навіть для досвідчених програмістів.

Варто зауважити, що 5-е видання вже є у продажу, щоправда поки що тільки англійською мовою.

Angelika Langer. Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference



IOStreams та Locales є двома з найбільш важливих, довгоочікуваних стандартів ISO/ANSI C++ і це перша книга, в якій йдеться тільки про них і матеріал розкривається найбільш повно. Автори пояснюють, які задачі IOStreams та Locales можуть вирішити. Після цього, читачу представляється широкий спектр прикладів і методів — від простих до складних.
Автори наводять концепції, архітектуру компонентів і приклади практичного застосування паттернів.

Книга включає:

  • пояснення ключових відмінностей між стандартним IOStreams та нестандартними версіями, що йому передували;
  • як розширити Locales для ефективної локалізації

У книзі також наведено повний опис можливостей класів IOStreams.
Дана книга буде корисною не тільки професіоналам, оскільки може слугувати чудовим довідником.

Anthony Williams. C++ Concurrency in Action: Practical Multithreading



C++ Concurrency in Action: Practical Multithreading — це ваш путівник по новому стандарту C++11 для досвідчених програмістів С++, а також тих, хто ніколи не писав багатопотокового коду. Ця книга продемонструє вам, як правильно і ефективно писати надійні багатопотокові програми в C++, уникаючи при цьому багатьох поширених помилок.

У книжці ви знайдете:

  • Приклади з застосуванням найновішого стандарту C++11
  • Програмування для багатьох ядер та процессорів
  • Невеликі приклади для навчання, великі приклади для практичного застосування

Дэвид Вандевурд, Николай Джосаттис. Шаблоны C++. Справочник разработчика



Шаблони C++ є частиною мови програмування, що надає програмісту нові можливості швидкої розробки ефективних і надійних програм і повторного використання коду. Дана книга, написана у співавторстві теоретиком C++ і програмістом-практиком з великим досвідом, вдало поєднує строгість викладу і повноту висвітлення теми з питань практичного використання шаблонів. У книзі міститься маса різноманітного матеріалу, що стосується програмування з використанням шаблонів, в тому числі матеріали, що дозволять досвідченим програмістам подолати сучасні обмеження в цій області.

Книга передбачає наявність у читача досить глибоких знань мови C++, проте стиль викладу забезпечує доступність матеріалу як для кваліфікованих фахівців, так і для програмістів середнього рівня.

Герб Саттер. Новые сложные задачи на C++



Дана книга являє собою продовження книги "Решение сложных задач на C++". У формі задач і їх рішень розглядаються сучасні методи проектування і програмування на C++. У книзі сконцентрований багаторічний досвід програмування на C++ не тільки автора, а й усього співтовариства програмістів на C++, тому деякі рекомендації автора можуть здатися несподіваними навіть досвідченим програмістам-професіоналам. Автор розглядає і конкретні методики, прийоми і ідіоми програмування, однак основна тема книги — це стиль програмування, причому в найширшому розумінні цього слова. Особливу увагу у всіх завданнях книги приділено питанню проектування, яке має забезпечити максимальну надійність, безпеку, продуктивність і найбільш ефективний супровід створюваного програмного забезпечення.

Книга розрахована в першу чергу на професійних програмістів з глибокими знаннями мови, однак вона буде корисна будь-якому, хто захоче поглибити свої знання в даній області.

Эндрю Кениг, Барбара Му. Эффективное программирование на С++



Ця книга, в першу чергу, призначена для тих, кому хотілося б швидко навчитися писати повноцінні програми мовою C++. Найчастіше новачки в C++ намагаються освоїти мову чисто механічно, навіть не спробувавши дізнатися, як можна ефективно застосувати його до вирішення повсякденних проблем. Мета даної книги — саме навчити програмуванню на C++, а не просто викласти засоби мови, тому вона корисна не тільки для новачків, але і для тих, хто вже знайомий з C++ і хоче використовувати цю мову в більш натуральному, природному стилі.