All streams
Search
Write a publication
Pull to refresh
4
0.1
Сергей @gres_84

C++ Developer

Send message

Проблема тонкой настройки Вселенной и её решения: разумный замысел или мультивселенная?

Reading time43 min
Views4.2K

Тонкая настройка Вселенной – последний оплот сторонников разумного замысла в сражении с атеистами, прибежище для тех, кто уже не в силах отрицать законы физики и дарвиновскую эволюцию, но всё ещё верит в сверхъестественную силу, которая заблаговременно позаботилась о нашем благополучии и предопределила наперёд всю космологическую эволюцию. Якобы невозможность существования разумной жизни во вселенных с другими значениями фундаментальных констант – самое явное доказательство, что мир был сотворён Богом, настроившим физические параметры так, чтобы мы могли появиться и жить в разумно устроенном мире. Научной альтернативой этому объяснению считается инфляционная мультивселенная, в которой существуют все возможные миры со всеми значениями констант. Большинство этих миров необитаемы, а наша вселенная пригодна для жизни просто потому, что в других вселенных некому задавать вопросы о тонкой настройке. В данной статье мы попробуем кратко разобрать столь обширную тему с точки зрения современной космологии и понять, какая теория ближе всех подошла к решению этой проблемы. В процессе мы выясним, поставила ли наука точку в вопросе о наличии или отсутствии в эволюции Вселенной разумного замысла, а также узнаем, есть ли сегодня хоть какое-то основание для антропоцентризма и веры в Творца.

Читать далее

Имя enum'a C++ в рантайме

Reading time10 min
Views7.6K

Получение имени типа, не важно это структура или перечисление, в C++ — проблема. То, что тривиально известно компилятору на этапе парсинга исходников, не получится перевести в человеко-читаемый вид в рантайме. Можно использовать std::type_info::name, который не является переносимым решением, потому что зависит от реализации манглинга в компиляторе. Некоторые компиляторы (например, MSVC, IBM, Oracle) создают "удобное" имя типа, а вот gcc и clang, возвращают искаженное имя, котороe можно преобразовать в удобочитаемую форму с помощью дополнительных функций, например abi::__cxa_demangle. Чтобы вся эта магия работала нужно подключить RTTI, который тоже не всегда доступен, а иногда и вообще-то вреден, потому что сжирает драгоценную производительность, но можно сделать по другому.

follow the white rabbit

Детальный обзор полей Галуа

Level of difficultyMedium
Reading time15 min
Views19K

"Попросите Якоби или Гаусса публично высказать своё мнение — не о истинности, а о важности этих теорем. Позже, я надеюсь, найдутся люди, которым будет выгодно разобраться во всём этом хаосе."

Этими словами заканчивалось письмо Эвариста Галуа, написанное для своего друга Огюста Шевалье за два дня до его смерти от полученных на дуэли ран на 21 году жизни. Ни Якоби, ни Гаусс в его теоремах не разобрались, зато спустя 15 лет разобрался Жозеф Лиувилль и опубликовал работы Галуа, ставшие впоследствии фундаментом современной алгебры, известные сейчас как теория Галуа. В статье расскажу про одну из частей этой теории - поля Галуа, получившая настолько повсеместное применение в криптографии и избыточном кодировании, что Intel и AMD выпустили набор процессорных расширений для эффективной реализации операций над этими полями.

Заметка! Если вам довелось использовать/реализовывать поля Галуа, то большая часть статьи для вас скорее всего будет не интересна, но возможно в последних разделах будет что-то для вас новое.

Читать далее

Лаконичный макрос defer для C++17

Level of difficultyMedium
Reading time5 min
Views6.7K

Ручное управление ресурсами в низкоуровневом си-подобном коде на C++ — довольно хлопотное занятие. Создание достойных RAII-врапперов для каждого используемого сишного API не всегда практично, а использование подходов с goto cleanup или множеством вложенных if (success) вредит читаемости кода.

Макрос defer как никогда кстати! Отложенная лямбда будет выполнена при выходе из области видимости, независимо от того, будет ли выполнен return, брошено исключение, или даже выполнен goto наружу. Данный макрос по-настоящему zero-cost и не зависит от рантайма C или стандартной библиотеки, поэтому его можно использовать даже в разработке под ядро ОС.

Читать далее

Что такое энтропия

Level of difficultyHard
Reading time25 min
Views19K

Об энтропии говорят всякое: энтропия увеличивается со временем, энтропия — это беспорядок, энтропия увеличивается с ростом энергии, энтропия определяет стрелу времени и т. д.. Но я понятия не имел, что такое энтропия, и, судя по тому, что я обнаружил, большинство других людей тоже. Вот вам объяснение, которое я и сам хотел бы получить, когда мне впервые рассказали об энтропии, так что, надеюсь, вы найдёте его полезным. Моя цель состоит в том, чтобы к концу этого длинного поста у нас было строгое и интуитивное понимание этих утверждений, и в частности того, почему Вселенная выглядит по-разному при движении вперёд во времени и при движении назад во времени.

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

Читать далее

std::launder: зачем и когда нужен

Level of difficultyEasy
Reading time7 min
Views8.8K

Привет, Хабр!

В этой статье разберём мутный, но крайне важный инструмент ‒ std::launder. Мы поглядим, зачем его протащили в C++17 и что компилятор делает, когда видит launder.

Читать далее

Game++. Performance traps

Reading time27 min
Views10K

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

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

Статья рассчитана на читателей, которые не являются гуру C++ или знатоками тонкостей языка, но в целом знакомы с языком и его идеями, хотя знание ассемблера x86 не требуется, я буду прикладывать ссылки на примеры кода quickbench, чтобы объяснить, почему даю те или иные советы.

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

Читать далее

5 игровых проектов, которые разрушают ожидания за 15 минут. И это прекрасно

Level of difficultyEasy
Reading time6 min
Views11K

Привет!
Меня зовут Мария Аксютина, я гейм-дизайнер, автора блога Хорошие маленькие игры и
я очень люблю рефлексировать свой опыт.

Почти всегда к веб-играм и играм с гейм-джемов относятся снисходительно: как к играм, созданным только для получения прибыли или как к незавершенным поделкам. Да, почти всегда это так. Но есть настоящие жемчужины.

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

Отличный повод сделать перерыв — и вернуться с парой новых мыслей.

Читать далее

Пятничная головоломка

Reading time1 min
Views1.5K
Решил поддержать andyshevchenko в публикации пятничных головоломок, и задать, наверное, самую сложную задачку, которую когда-либо решал.

Король созвал 100 своих мудрецов вечером и объявил, что утром он им устроит испытание. Если они его пройдут, то он обеспечит золотом их на все оставшуюся жизнь, если нет, то он их всех казнит. Король рассказал мудрецам в чем будет испытание: он наденет на каждого мудреца шляпу, которая может быть одного из 100 цветов, каждый мудрец не видит, какого цвета шляпа на нем, но он видит каких цветов шляпы на его товарищах. Мудрецам запрещено будет общаться. По команде они должны будут одновременно сказать, как они думают, какая шляпа на них, и если хоть один угадает, то испытание считается пройденным. У них есть ночь перед испытанием чтобы придумать стратегию. Представьте себя на месте мудрецов, и попытайтесь придумать правильную стратегию

Пояснение: у каждого мудреца шляпа может быть одного цвета, так же возможна ситуация, когда цвета шляп на некоторых мудрецах совпадают, кроме того, король может на всех мудрецов одеть шляпы одного цвета. Известно только, что цветов для шляп всего 100 и они известны.

Ссылки и указатели в C++

Level of difficultyEasy
Reading time6 min
Views15K

Привет, Хабр!

Сегодня разбираем &&* неувядающую классику C++ — ссылки & и указатели *. Казалось бы, два оператора, делов-то, но стгоит нырнуть под крышку — и выясняется: тут и разное время жизни, и несменяемость адреса, и прочие вещички. Разберемся в статье подробнее.

Читать далее

Современный C++23/26: концепты, корутины и многое другое в высокопроизводительных службах

Level of difficultyMedium
Reading time11 min
Views9.9K

C++ уже десятки лет является краеугольным камнем, на котором строятся программы, ориентированные на высокую производительность. Он лежит в основе самых разных проектов, относящихся практически ко всем аспектам человеческой деятельности — от встроенных систем до платформ высокочастотной торговли. Его возможности по совмещению низкоуровневых средств управления вычислительными ресурсами с высокоуровневыми абстракциями превращают его в уникальный инструмент, подходящий для создания программ, при выполнении которых значение имеет каждая микросекунда. По мере того, как язык развивается, новые стандарты, вроде C++23 и ожидаемого C++26, вводят в него функционал, который улучшает и его возможности по созданию высокопроизводительных программ, и продуктивность пользующихся им программистов. Особенно это касается разработки высокопроизводительных служб — систем, которым требуются низкие задержки и высокие значения пропускной способности, которые нуждаются в эффективном использовании ресурсов. Среди них — аналитические системы, работающие в режиме реального времени, игровые серверы и распределённые системы управления базами данных.

Читать далее

Дискретное преобразование Фурье в живых картинках для девятиклассников

Level of difficultyMedium
Reading time19 min
Views34K

Мало что настолько меня угнетает, как невозможность что‑либо понять так, чтобы потом объяснить это самому себе:) И хоть я уже давно не девятиклассник, этот период запомнился мне внезапным переходом от заучивания материала «чтобы не схватить парашу» к некоторой степени осознания «а как оно там устроено и почему именно так». Сложнее всего было с математикой и я постоянно изобретал для себя «объяснялки». Этот навык, к счастью, прижился и стал привычкой.

В виртуальную лабораторию!

Оптимизируем C++ шаблоны: от инлайнинга до модулей

Level of difficultyMedium
Reading time18 min
Views4.3K

Мы рассмотрим, чем опасны шаблоны для проекта на C++ и как минимизировать эти риски. В оптимизации нам помогут инлайн-файлы, явные инстанциации и даже модули из C++20.

Читать далее

Важнейшая модель теории вероятностей

Level of difficultyMedium
Reading time14 min
Views15K

Что объединяет частицу в воде, биржевой курс и кота Барсика, бродящего по району в поисках ларька с рыбой?


Всё это — примеры случайного блуждания. Эта простая модель из теории вероятностей помогает описывать самые разные явления: от диффузии молекул до принятия решений и работы алгоритмов. Она кажется интуитивной — но за ней скрывается множество нетривиальных и красивых свойств.

Мы начнём с истории открытия броуновского движения — от наблюдений Роберта Броуна до формулы Альберта Эйнштейна, которая связала наблюдаемое явление с атомной гипотезой. Покажем, как идея случайного движения превратилась из гипотезы в надёжный инструмент научного анализа.

Затем перейдём к математической модели случайных блужданий, разберём, как она устроена и где используется. Научимся с ней работать: найдём среднюю скорость удаления, обсудим задачу о разорении игрока и вернёмся к нашему коту Барсику.

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

В финале — красивая задача для самостоятельного решения: её можно решить математически или запрограммировать симуляцию. Выбирайте способ по вкусу.

Читать далее

Корутины в C++20: архитектура и практическое применение

Level of difficultyMedium
Reading time19 min
Views9.3K

Корутины в C++20 открывают новые возможности для асинхронного программирования, но они также могут привести к ошибкам, связанным с управлением памятью и синхронизацией. Здесь о том, какие проблемы могут возникнуть и чего ожидать от будущих обновлений корутин в C++.

Читать далее

Иерархия мультивселенных и Конечный ансамбль Макса Тегмарка. Космологическая интерпретация квантовой механики

Level of difficultyMedium
Reading time32 min
Views4.6K

Вспомните свои самые заветные мечты и самые безумные фантазии. Если вам кажется, что они неосуществимы, не нужно отчаиваться. В нашем мире возможно всё, что не противоречит законам физики. Более того, если предположить, что Вселенная бесконечна в пространстве или во времени, то эти фантазии уже где-то или когда-то осуществились, причём бесконечное число раз. Конечно, слабо утешает, что богатым и счастливым стали не вы, а ваш двойник, проживающий от вас на расстоянии порядка 10^10^28 м. Всё-таки непривычно осознавать, что в бесконечной Вселенной существует бесконечное число ваших копий. Но даже если ограничиться наблюдаемой Вселенной с её космологическим горизонтом, в её пределах тоже может произойти много интересного. Любой мыслимый материальный объект и любой жизненный сценарий обязательно реализуется, если подождать достаточно долго. Вопрос лишь в том, насколько долго. В любом случае за время, равное 10^10^120 лет, Вселенная успеет побывать во всех своих возможных состояниях и перебрать все возможные комбинации элементарных частиц. Какая-то из них и будет воплощением вашей мечты.

Приглашаю вас на экскурсию по всем четырём уровням мультивселенной Макса Тегмарка!

Читать далее

Может ли звук охлаждать?

Reading time7 min
Views3.7K
image

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

Но, как ни странно, есть один способ, который позволяет применять энергию звуковой волны для несколько необычных целей: для использования в холодильниках, двигателях и даже генераторах электричества!

И интересным способом такого применения энергии звуковой волны являются устройства, которые носят в одном случае название термоакустического холодильника, а в другом — двигателя.
Читать дальше →

Nomina nuda tenemus: открываем ли мы математические законы или просто придумываем их?

Level of difficultyEasy
Reading time13 min
Views6.2K

Diva Philippica, vox ubi coelica nunc Ciceronis?
Pax ubi civibus atque rebellibus ira Catonis?
Nunc ubi Regulus aut ubi Romulus aut ubi Remus?
Stat Roma pristina nomine, nomina nuda tenemus.

Божество филиппик, где ныне небесный голос Цицерона?
Мир где для граждан, а для мятежников где гнев Катона?
Где же Регул, где Ромул, где Рем?
От Рима осталось лишь имя. Имена, что мы держим — пустые.

Отсылкой к последней строке этого стихотворения Бернарда Клюнийского заканчивается "Имя розы" - знаменитый роман итальянского писателя-постмодерниста, философа и медиевиста Умберто Эко. В этом произведении одной из сюжетных линий идёт спор монахов-схоластов об истинности реализма и номинализма или, иначе говоря, о реальности абстрактных идей и математических структур. Именно об этом философском споре, растянувшемся на тысячелетия, я и хотел бы поговорить в своём сегодняшнем эссе. Последние слова великолепного стихотворения, которое в полном варианте на языке оригинала можно послушать здесь, дали название не только роману Умберто Эко, но и этому посту. Nomina nuda tenemus - "имена, что мы держим, пустые".

Читать далее

Правда и мифы о Большом взрыве. Инфляционная модель мультивселенной

Level of difficultyMedium
Reading time41 min
Views6.8K

Происхождение всего сущего – один из тех детских вопросов, на которые человечество искало ответы тысячелетиями, выдумывая всевозможные мифы о сотворении мира, развивая философские концепции и разрабатывая научные теории. Древнейшие и наиболее универсальные мифологические нарративы повествуют о мировом океане, символизирующем первозданный хаос. В этот океан ныряет утка и достаёт со дна песок, или из плавающего в океане мирового яйца вылупляется некое божество, или божества создают мир путём пахтания горой мирового океана, или они приносят в жертву великана-первочеловека, или божества были вылизаны из солёных камней языком коровы, появившейся из растаявшего инея, и т.д. Когда-то эти сказки всех устраивали, но с началом научной революции учёные стали находить более разумные объяснения. И вот, после четырёх столетий проб и ошибок, у нас наконец есть космологическая модель, которая даёт исчерпывающее объяснение того, как возникла и эволюционировала Вселенная.

Что же мы видим? Теорию Большого взрыва понимают и признают единицы – остальные в лучшем случае сомневаются, а в худшем – активно её отрицают, изобретая новые мифы, выискивая тайные смыслы в старых и повторяя одни и те же глупые вопросы. А был ли Большой взрыв? Что было до Большого взрыва? Как всё могло образоваться из ничего? Неужели Вселенная – бесплатный обед? Или у неё обязательно должен быть Творец? Почему Вселенная расширяется, а мы – нет? Где записан генетический код Вселенной? Что происходило в первые секунды жизни Вселенной? Большой взрыв уже закончился или продолжается до сих пор? И кому ещё, как не Универсальному объяснителю, придётся терпеливо давать на них ответы в этой статье, опровергая популярные заблуждения? Ну, раз больше некому – поехали!

Читать далее

Доступ к приватным методам класса в С++

Level of difficultyMedium
Reading time8 min
Views6.4K

В C++ инкапсуляция — один из ключевых принципов ООП, и приватные (private) члены класса защищены от прямого доступа извне. Однако иногда возникают ситуации, когда такой доступ необходим (например, при тестировании, сериализации или отладке). Обычно для этого используют friend-функции или геттеры/сеттеры, но есть и более экзотический способ — использование шаблонов и указателей на члены класса.

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

Читать далее

Information

Rating
3,948-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity