Search
Write a publication
Pull to refresh
4
0.2
Сергей @gres_84

C++ Developer

Send message

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

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

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

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

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

Level of difficultyEasy
Reading time6 min
Views9.9K

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

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

Читать далее

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

Level of difficultyMedium
Reading time11 min
Views8.9K

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

Читать далее

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

Level of difficultyMedium
Reading time19 min
Views30K

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

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

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

Level of difficultyMedium
Reading time18 min
Views4K

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

Читать далее

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

Level of difficultyMedium
Reading time14 min
Views14K

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


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

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

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

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

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

Читать далее

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

Level of difficultyMedium
Reading time19 min
Views7.8K

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

Читать далее

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

Level of difficultyMedium
Reading time32 min
Views3.5K

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

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

Читать далее

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

Reading time7 min
Views3.3K
image

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

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

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

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

Level of difficultyEasy
Reading time13 min
Views5.7K

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
Views4.9K

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

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

Читать далее

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

Level of difficultyMedium
Reading time8 min
Views5.8K

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

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

Читать далее

Квантовый дуализм и реальность на языке информации

Level of difficultyMedium
Reading time16 min
Views3.6K

Почему фотоны исчезают в тёмных полосах интерференции? Что значит — «каждый фотон интерферирует только с самим собой»? И как природа вообще позволяет одному и тому же объекту вести себя как частица и как волна одновременно — пока вы на него не смотрите?

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

Для тех, кто хочет не просто услышать про двойную щель, а наконец понять, что там происходит.

Вперед, к квантовой информации

Классификация парадигм программирования

Level of difficultyEasy
Reading time6 min
Views5.2K

Здравствуйте, меня зовут Дмитрий Карловский и я.. придерживаюсь следующей парадигмы мышления: всякое определение должно иметь чёткую границу между тем, что ему соответствует, и тем, что не соответствует.

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

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

Аспекты классификации

Senders/Receivers в C++26: от теории к практике

Level of difficultyMedium
Reading time16 min
Views6.2K

Каждому C++-разработчику приходится решать задачи асинхронности — от сетевых запросов до фоновых вычислений. В этой статье вы увидите, как P2300-модель Senders/Receivers в C++26 расширяет возможности std::async/std::future и позволяет строить ясные, декларативные конвейеры (then, when_all, upon_error и др.).

Читать далее

Каламический космологический аргумент и первопричина всего

Level of difficultyMedium
Reading time9 min
Views7.9K

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

  1. Всё, что когда-либо появлялось, имеет причину.
  2. Вселенная появилась в какой-то момент времени.
  3. Следовательно, Вселенная имеет причину — её кто-то создал.

Спасибо за внимание, хорошего вам дня.

Неубедительно? ОК, давайте раскроем аргумент поподробнее.
Читать дальше →

Язык мироздания — теория групп и теория категорий

Level of difficultyMedium
Reading time11 min
Views16K

Около полутора лет назад я опубликовал на Хабре статью под названием "Слово Божие — функциональное программирование как основа Вселенной", в которой я рассказывал про лямбда-исчисление и про то, как программу любой сложности можно свести к алгоритму на базе всего трёх SKI-комбинаторов или же одного единственного йота-комбинатора. В ней мы разобрались с алфавитом божественного языка, на котором написана книга мироздания. Теперь же пришло время разобраться с его грамматикой.

Читать далее

RAII 2.0: RAII как архитектурный инструмент в C++

Level of difficultyMedium
Reading time7 min
Views5.3K

Идиома RAII — давно зарекомендовал себя как удобный способ автоматического управления ресурсами в C++. Обычно мы применяем его для управления памятью, файловыми дескрипторами или мьютексами. Однако что, если расширить понятие RAII до управления не только физическими ресурсами, но и логическими контрактами и состояниями системы?

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

Читать далее

Game++. Work hard

Level of difficultyEasy
Reading time15 min
Views3.8K

Разнесение выполнения (concurrent) систем играют ключевую роль в играх — от обновления поведения ИИ и физики до рендеринга и загрузки ресурсов. Разные модели параллелизма позволяют по-разному организовать работу потоков, распределяя задачи и определяя, как потоки взаимодействуют между собой для достижения общей цели. Правильно выбранная модель влияет не только на производительность, но и зачастую на стабильность игры.

Модели выполнения используются разные — от простой многопоточности с ручной синхронизацией до более продвинутых систем акторов, job-based подходов или task graph. Например, системы поведения ИИ могут обновляться параллельно с физикой, пока основной поток отвечает за рендеринг. Некоторые движки, такие как Unreal Engine, используют task graph (граф задач), где зависимости между задачами выражаются явно, и задачи автоматически распределяются по доступным ядрам. Другие подходы, как в CryEngine Perth (аналог ECS, матрица задач), позволяют организовать данные так, чтобы минимизировать ложные зависимости и повысить кэш-эффективность. Конечный выбор всегда зависит от архитектуры движка, платформы и требований конкретной задачи или группы задач.

Читать далее

Хеш-таблица и C++20

Level of difficultyHard
Reading time6 min
Views7.7K

Рассматриваем различные «приколюхи» из C++20 на примере хеш‑мапы!

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

Читать далее статьи от @SEIka69

Information

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