Pull to refresh
15
0
Дмитрий Ефименко @Duny

Разработчик

Send message

C++20. Coroutines

Reading time33 min
Views62K

В этой статье мы подробно разберем понятие сопрограмм (coroutines), их классификацию, детально рассмотрим реализацию, допущения и компромиссы, предлагаемые новым стандартом C++20.


image

Читать дальше →
Total votes 32: ↑29 and ↓3+42
Comments27

std::atomic. Модель памяти C++ в примерах

Reading time11 min
Views117K

Для написания эффективных и корректных многопоточных приложений очень важно знать какие существуют механизмы синхронизации памяти между потоками исполнения, какие гарантии предоставляют элементы многопоточного программирования, такие как мьютекс, join потока и другие. Особенно это касается модели памяти C++, которая была создана сложной таковой, чтобы обеспечивать оптимальный многопоточный код под множество архитектур процессоров. Кстати, язык программирования Rust, будучи построенным на LLVM, использует модель памяти такую же, как в C++. Поэтому материал в этой статье будет полезен программистам на обоих языках. Но все примеры будут на языке C++. Я буду рассказывать про std::atomic, std::memory_order и на каких трех слонах стоят атомики.

Читать далее
Total votes 52: ↑52 and ↓0+52
Comments39

C++ vtables. Часть 2 (Virtual Inheritance + Compiler-Generated Code)

Reading time10 min
Views14K

Перевод статьи подготовлен специально для студентов курса «Разработчик С++». Интересно развиваться в данном направлении? Смотрите запись мастер-класса «Практика использования Google Test Framework»!



Часть 3 — Виртуальное наследование


В первой и второй части этой статьи мы говорили о том, как vtables работают в простейших случаях, а затем в множественном наследовании. Виртуальное наследование усложняет ситуацию еще больше.

Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments2

C++ vtables. Часть 1 (basics + multiple Inheritance)

Reading time9 min
Views27K

Всем привет! Перевод статьи подготовлен специально для студентов курса «Разработчик С++». Интересно развиваться в данном направлении? Приходите онлайн 13 декабря в 20:00 по мск. на мастер-класс «Практика использования Google Test Framework»!



В этой статье мы рассмотрим, как clang реализует vtables (таблицы виртуальных методов) и RTTI (идентификацию типа времени исполнения). В первой части мы начнем с базовых классов, а затем рассмотрим множественное и виртуальное наследование.

Читать дальше →
Total votes 17: ↑14 and ↓3+14
Comments6

Что такое таблица виртуальных таблиц?

Reading time7 min
Views14K
Однажды в Slack я наткнулся на новый акроним для моего глоссария акронимов C++: “VTT.” Godbolt:

test.o: In function `MyClass':
test.cc:3: undefined reference to `VTT for MyClass'

“VTT” в данном контексте означает «таблица виртуальных таблиц» (virtual table table). Это вспомогательная структура данных, используемая (в Itanium C++ ABI) при создании некоторых базовых классов, которые сами унаследованы от виртуальных базовых классов. VTT следуют тем же правилам размещения, что и виртуальные таблицы (vtable) и информация о типе (typeinfo), так что если вы получили ошибку, приведённую выше, вы можете просто мысленно подставить «vtable» вместо «VTT», и начать отладку. (Скорее всего, вы оставили неопределённой ключевую функцию класса). Для того, чтобы увидеть, почему VTT, или аналогичная структура, необходима, начнём с основ.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments2

Концепты: упрощаем реализацию классов STD Utility

Reading time28 min
Views14K


Появляющиеся в C++20 концепты — давно и широко обсуждаемая тема. Несмотря на избыток материала, накопившегося за годы (в т.ч. выступления экспертов мирового уровня), среди прикладных программистов (не засыпающих ежедневно в обнимку со стандартом) все еще остается неразбериха, что же такое С++20-концепты и так ли они нам нужны, если есть проверенный годами enable_if. Частично виной тому то, как концепты эволюционировали за ~15 лет (Concepts Full + Concept Map -> Concepts Lite), а частично то, что концепты получились непохожими на аналогичные средства в других языках (Java/С# generic bounds, Rust traits, ...).


Под катом — видео и расшифровка доклада Андрея Давыдова из команды ReSharper C++ с конференции C++ Russia 2019. Андрей сделал краткий обзор concept-related нововведений C++20, после чего рассмотрел реализацию некоторых классов и функций STL, сравнивая C++17 и С++20-решения. Далее повествование — от его лица.

Total votes 27: ↑27 and ↓0+27
Comments6

Как сделать SFINAE изящным и надежным

Reading time9 min
Views12K
И снова здравствуйте. Делимся с вами интересной статьёй, перевод которой подготовлен специально для студентов курса «Разработчик C++».





Сегодня у нас гостевой пост Адама Балаша (Ádám Balázs). Адам является инженером-программистом в Verizon Smart Communities Hungary и занимается разработкой видеоаналитики для встраиваемых систем. Одна из его страстей — оптимизации времени компиляции, поэтому он сразу согласился написать гостевой пост на эту тему. Вы можете найти Адама в онлайне на LinkedIn.
Читать дальше →
Total votes 29: ↑28 and ↓1+27
Comments17

Умножение матриц: эффективная реализация шаг за шагом

Reading time14 min
Views105K


Введение


Умножение матриц — это один из базовых алгоритмов, который широко применяется в различных численных методах, и в частности в алгоритмах машинного обучения. Многие реализации прямого и обратного распространения сигнала в сверточных слоях неронной сети базируются на этой операции. Так порой до 90-95% всего времени, затрачиваемого на машинное обучение, приходится именно на эту операцию. Почему так происходит? Ответ кроется в очень эффективной реализации этого алгоритма для процессоров, графических ускорителей (а в последнее время и специальных ускорителей матричного умножения). Матричное умножение — один из немногих алгоритмов, которые позволяет эффективно задействовать все вычислительные ресурсы современных процессоров и графических ускорителей. Поэтому не удивительно, что многие алгоритмы стараются свести к матричному умножению — дополнительная расходы, связанные с подготовкой данных, как правило с лихвой окупаются общим ускорением алгоритмов.

Так как реализован алгоритм матричного умножения? Хотя сейчас существуют множество реализаций данного алгоритма, в том числе и в открытых исходных кодах. Но к сожалению, код данных реализаций (большей частью на ассемблере) весьма сложен. Существует хорошая англоязычная статья, подробно описывающая эти алгоритмы. К моему удивлению, я не обнаружил аналогов на Хабре. Как по мне, этого повода вполне достаточно, чтобы написать собственную статью. С целью ограничить объем изложения, я ограничился описанием однопоточного алгоритма для обычных процессоров. Тема многопоточности и алгоритмов для графических ускорителей явно заслуживает отдельной статьи.

Процесс изложения будет вестись ввиде шагов с примерами по последовательному ускорению алгоритма. Я старался писать максимально упрощая задачу, но не более того. Надеюсь у меня получилось…
Читать дальше →
Total votes 90: ↑90 and ↓0+90
Comments49

Разрушительные исключения

Reading time9 min
Views22K

Ещё раз о том, почему плохо бросать исключения в деструкторах


Многие знатоки C++ (например, Герб Саттер) учат нас, что бросать исключения в деструкторах плохо, потому что в деструктор можно попасть во время раскрутки стека при уже выброшенном исключении, и если в этот момент будет выброшено ещё одно исключение, в результате будет вызван std::terminate(). Стандарт языка C++17 (здесь и далее я ссылаюсь на свободно доступную версию драфта N4713) на эту тему сообщает нам следующее:

Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments16

Принцип наименьшего действия. Часть 2

Reading time12 min
Views18K


В прошлый раз мы кратко рассмотрели один из самых замечательных физических принципов — принцип наименьшего действия, и остановились на примере, который, казалось бы, ему противоречит. В данной статье мы разберемся с этим принципом немного подробнее и посмотрим, что происходит в данном примере.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments49

Компрессия больших массивов простых чисел

Reading time20 min
Views17K
песочница

Свойства простых чисел редко позволяют работать с ними иначе, чем в виде заранее вычисленного массива — и желательно как можно более объемного. Естественный формат хранения в виде целых чисел той или иной разрядности страдает при этом некоторыми недостатками, которые становятся существенными при росте объема данных.

 

Так, формат 16-разрядных беззнаковых целых при размере такой таблицы около 13 килобайт вмещает всего лишь 6542 простых числа: вслед за числом 65531 идут значения более высокой разрядности. Такая таблица годится разве что в качестве игрушки.

 

Наиболее ходовой в программировании формат 32-разрядных целых выглядит значительно солиднее — он позволяет хранить около 203 млн простых. Но такая таблица занимает уже около 775 мегабайт.

 

Еще больше перспектив у 64-разрядного формата. Однако при теоретической мощности порядка 1e+19 значений, таблица имела бы размер 64 экзабайта.


Читать дальше →
Total votes 55: ↑54 and ↓1+53
Comments59

Излучение Хокинга возникает не на горизонте событий черных дыр

Reading time5 min
Views34K
[Этот пост является переводом статьи от Сабины Хоссенфельдер]

«Краткая история времени» Стивена Хокинга была одна из первых научно-популярных книг, прочитанных мною, и я ее возненавидела. Возненавидела, потому что не понимала. Фрустрация от этой книги стала одной из основных причин, почему я стала физиком — ну, по крайней мере, я знаю, кого винить в этом.

image
Читать дальше →
Total votes 41: ↑40 and ↓1+39
Comments91

Россия, Германия и Япония готовятся к синтезу элементов 119 и 120

Reading time3 min
Views25K

Периодическая таблица химических элементов (на начало 2018 года)

В этом году Лаборатория ядерных реакций имени Г.Н. Флерова в Объединённом институте ядерных исследований (ОИЯИ) в Дубне запустят новый ускорительный комплекс — Фабрику сверхтяжёлых элементов. Этот комплекс станет базой для синтеза новых химических элементов.

«Мы готовимся к синтезу первых двух элементов восьмого периода — 119-го и 120-го. Планируем начать соответствующие эксперименты в 2019 году», — сказал «Известиям» учёный секретарь Лаборатории ядерных реакций ОИЯИ Александр Карпов.

Именно в Дубне на ускорительном комплексе У-400 были открыты 113-й элемент (нихоний, Nh, получился как побочный продукт при синтезе 115-го элемента), 115-й (московий, Mc), 117-й (теннесин, Ts) и 118-й (оганесон, Og).
Читать дальше →
Total votes 35: ↑35 and ↓0+35
Comments37

Жизнь внутри черной дыры

Reading time10 min
Views121K
Знаю, что здесь это якобы не приветствуется, но делаю кросс-пост отсюда по прямой просьбе автора — Горькавого Николая Николаевича. Есть некоторый шанс, что их идея перевернёт современную науку. И лучше прочитать о ней в оригинале, чем в пересказе рен-тв или ленты.ру.

image

Для тех, кто не следил за темой. Рассмотрим две вращающихся друг вокруг друга чёрных дыры, допустим, массами 15 и 20 единиц (масс Солнца). Рано или поздно они сольются в одну черную дыру, но её масса будет не 35 единиц, а, скажем, всего 30. Остальные 5 улетят в виде гравитационных волн. Именно эту энергию улавливает гравитационный телескоп LIGO.

Суть идеи Горькавого и Василькова в следующем. Допустим, вы наблюдатель, сидите в своём кресле и чувствуете притяжение 35 единиц массы делить на квадрат расстояния. И тут бац — буквально за секунду их масса уменьшается до 30 единиц. Для вас, в силу принципа относительности, это будет неотличимо от ситуации, когда вас отбросило в обратном направлении с силой в 5 единиц, делить на квадрат расстояния. То есть, неотличимо от антигравитации.

Читать дальше →
Total votes 91: ↑86 and ↓5+81
Comments600

Что такое протон, и что у него внутри?

Reading time12 min
Views63K

Рис. 1: атом водорода. Не в масштабе.

Вы знаете, что Большой адронный коллайдер в основном занимается тем, что сталкивает друг с другом протоны. Но что такое протон?

В первую очередь – ужасная и полная неразбериха. Настолько же уродливая и хаотичная, насколько прост и элегантен атом водорода.

Но что тогда такое атом водорода?

Это простейший пример того, что физики называют «связанным состоянием». «Состояние», по сути, означает некую штуку, существующую довольно долгое время, а «связанное» означает, что её компоненты связаны друг с другом, будто супруги в браке. На самом деле, пример супружеской пары, в которой один супруг гораздо тяжелее другого, сюда очень хорошо подходит. Протон сидит в центре, едва двигаясь, а по краям объекта движется электрон, движется быстрее, чем вы и я, но гораздо медленнее скорости света, всеобщего скоростного ограничения. Мирный образ брачной идиллии.

Или он кажется таким, пока мы не заглянем в сам протон. Внутренности самого протона больше напоминают коммуну, где плотно расположено множество холостых взрослых и детей: чистый хаос. Это тоже связанное состояние, но связывает оно не нечто простое, вроде протона с электроном, как в водороде, или хотя бы несколько десятков электронов с атомным ядром, как в более сложных атомах типа золота – но несметное количество (то есть, их слишком много и они слишком быстро меняются, чтобы их можно было подсчитать практически) легковесных частиц под названием кварки, антикварки и глюоны. Невозможно просто описать структуру протона, нарисовать простые картинки – он чрезвычайно дезорганизован. Все кварки, глюоны, антикварки, мечутся внутри с максимально возможной скоростью, почти со скоростью света.
Читать дальше →
Total votes 19: ↑17 and ↓2+15
Comments17

Естественность и Стандартная Модель

Reading time17 min
Views7.9K

Что такое «естественность?»


Что имеют в виду специалисты по физике частиц и теории струн, говоря, что определённый набор частиц и взаимодействий является «естественным»? Они не имеют в виду то, что он является «частью природы». Во Вселенной всё по определению является частью природы.

У слова «естественный» есть много значений. Учёные в нашем контексте используют не значение «связанный с природой», а значение «типичный» или «обобщённый», «ожидаемый», «обычный». Например: «естественно, ребёнок, ударившись головой, заорал», или «естественно, ближе к центру жить стоит дороже», или «я не носил эти очки много месяцев, и они, естественно, запылились». А неестественно – это когда ребёнок не кричит, когда в центре города дёшево, и когда очки чистые. Обычно, когда происходит что-то неестественное, тому есть причина.

В большинстве контекстов физики частиц и связанных с этой тем сюрпризы встречаются крайне редко. Это значит, что взглянув на физическую систему, вы увидите, что она ведёт себя так, как вы, набрав некоторого научного опыта, можете от неё ожидать. А если она так себя не ведёт, то, как показывает опыт, тому есть причина. А если эта причина неочевидна, то неестественное поведение системы может говорить о каком-то экстремальном эффекте, который вам пока неизвестен.
Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments10

Квантовые флуктуации и их энергия

Reading time10 min
Views38K
В этой статье я расскажу вам кое-что о том, как работает квантовая механика, в частности, об удивительном явлении под названием «квантовые флуктуации», и как оно применяется в квантовой теории поля, примером которой служит Стандартная Модель (уравнения, используемые нами для предсказания поведения известных элементарных частиц и взаимодействий). Глубокое понимание этого явления и связанной с ним энергии ведёт нас прямиком к одному из самых серьёзных и неразрешённых конфликтов в науке: проблеме космологической постоянной. Также оно ведёт нас к загадке естественности, или к проблеме иерархии.

В квантовой теории поля квантовые флуктуации иногда называют или описывают, как «появление и исчезновение двух или более виртуальных частиц». Этот технический жаргон оказывается очень неудачным, поскольку эти штуки (как бы мы их ни называли), однозначно не являются частицами – к примеру, у них нет определённой массы – а также, поскольку понятие «виртуальной частицы» точно определяется только в присутствии относительно слабых взаимодействий.


Рис. 1
Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments21

Что было бы, если бы поле Хиггса было нулевым

Reading time7 min
Views17K
Поле Хиггса – тема столь важная, что она даже заслужила себе целый экспериментальный комплекс, Большой адронный коллайдер, предназначенный для её изучения. Это загадочное поле в среднем ненулевое, оно покрывает всю Вселенную, будто невидимая жидкость, и влияет на массы известных элементарных частиц. А что, если бы оно было в среднем нулевым? Каков был бы наш мир?

Он был бы смертелен для нас – в нём не было бы атомов – но в определённом смысле он был бы гораздо проще и лучше организован. Давайте посмотрим, как именно.

image
Рис. 2
Читать дальше →
Total votes 12: ↑10 and ↓2+8
Comments15

Сравнение библиотек логирования

Reading time26 min
Views72K


В сети огромное количество площадок формата Q&A где задаются вопросы из разряда:

  • Предложите С++ логер? (C++ logging framework suggestions)
  • Какой наиболее эффективный потоко-безопасный С++ логер? (What is the most efficient thread-safe C++ logger)
  • Библиотека логирования для игр (Logging library for c games)
  • Асинхронный потоко-безопасный С++ логер? (Asynchronous thread-safe logging in C++)

Люди делятся своим опытом и знаниями, но формат таких площадок позволяет лишь показать личные предпочтения отвечающего. К примеру, одним из самых производительных логеров чаще всего называют Pantheios, который даже по тестам производителя тратит больше 100 секунд на запись 1M строк лога, на современном железе это около 30 секунд, быстро ли это?

В этой статье я сравню наиболее известные и заслуженные логеры последних лет и несколько относительно молодых логеров по более чем 25 критериям.
Читать дальше →
Total votes 59: ↑59 and ↓0+59
Comments42

Мост из ниоткуда: можно ли получить что-либо из ничего?

Reading time10 min
Views28K


«Вопрос бытия – темнейший во всей философии». Так заключил Уильям Джеймс, размышляя над самой основной из загадок: как что-то возникло из ничего? Этот вопрос выводит из себя, решил Джеймс, поскольку требует объяснения, отрицая саму возможность его наличия. «Для перехода из ничего в бытие не существует логического моста», писал он.

В науке объяснения строятся на причинах и следствиях. Но если ничто на самом деле ничто, у него нет возможности стать причиной. Дело не в том, что мы не можем найти правильного объяснения – просто перед лицом «ничто» объяснение не работает.

Этот отказ бьёт по больному месту. Мы существа, любящие повествования. Наши простейшие понятия приходят через истории, а как нечто появилось из ничего – это самая главная история, доисторическая повесть, более фундаментальная, чем «путешествие героя» или «парень встречает девушку». Но эта история подрывает суть истории. Эта повесть соткана из самоуничтожения и парадокса.
Читать дальше →
Total votes 29: ↑24 and ↓5+19
Comments57

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity