Обновить
4
0.1
Сергей@gres_84

C++ Developer

Отправить сообщение

Гений Пифагора: почему в рекурсивно-вычисляемом клеточном автомате Вселенной наше сознание бессмертно?

Уровень сложностиПростой
Время на прочтение27 мин
Охват и читатели17K

Несколько лет назад я опубликовал на Хабре серию статей о гипотезе математического происхождения Вселенной. Самая популярная из них — мой перевод статьи Стивена Вольфрама «Кажется, мы близки к пониманию фундаментальной теории физики, и она прекрасна». Этот пост не просто повторяет описанные в тех старых статьях идеи, но и развивает их. Мы с вами поговорим об истории идеи математического происхождения Вселенной, рассмотрим аргументы в её пользу, обсудим гипотезу симуляции и клеточные автоматы, математические вселенные Макса Тегмарка и теорию пыли Грега Игана, а также погрузимся в работу «Вселенная как число» Ильи Шепрута и обдумаем её связь с концепцией вечной жизни.

Читать далее

Expression Templates

Уровень сложностиСредний
Время на прочтение22 мин
Охват и читатели7.9K

«Лень‑матушка вперёд нас родилась»

В этой статье я хочу рассказать о технике «Expression Templates» и её применении в библиотеке simstr.

Как известно, «хороший программист — ленивый программист». Именно лень толкает нас на поиск оптимальных решений и экономию ресурсов. А человек, проводящий много времени с компьютером — волей‑неволей начинает его «одушевлять» и беспокоится о нём. Поэтому не знаю, как у вас, а у меня сердце кровью обливается, когда я вижу, что для получения конечного результата тем способом, который написан в программе, бедному процессору придётся выполнять много лишней работы, зазря тратить тактики и бестолку гонять байтики туда‑сюда. Это прямо вызывает боль.

Вот, к примеру, давайте рассмотрим такой простенький код.

Читать далее

Почему в Linux «Всё есть файл»? Или почему гениальные абстракции UNIX настолько гениальны

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели63K

– Ваш терминал и ваше интернет соединение – это файл!
– Да что вы такое говорите?
– Скажите ещё, что и мышка в моей руке или жёсткий диск – это тоже файл.
– Абсолютно верно!

На самом деле, с точки зрения Linux – это так.

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

Читать далее

Модальный реализм Дэвида Льюиса – аналитическая метафизика логически возможных миров

Уровень сложностиСредний
Время на прочтение62 мин
Охват и читатели7.7K

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

Читать далее

10 любопытных картографических сервисов для тех, кто не поехал в отпуск

Время на прочтение4 мин
Охват и читатели12K

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

Сегодня мы бы хотели поделиться десятком любопытных картографических сервисов, позволяющих открыть что‑то новое в окружающем мире. В нашей подборке: карты плотности населения и наложенные на существующие карты тысячелетней давности; поиск знаменитостей по географии и наложение статей Wiki на города; карты контроля территорий городскими бандами и даже способ написать свое имя природными объектами. Небольшая ремарка — большую часть карт лучше рассматривать на экране десктопа или ноутбука (и желательно с диагональю побольше), так как мобильные браузеры могут плохо справляться с визуализацией.

Раскручиваем глобус

Systemd: полное руководство для админов + примеры

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели16K

Привет, Хабр! Systemd — скелет современного Linux. Он управляет не только службами, но и таймерами, монтированием, логированием... Понимать его = значительно повысить эффективность администрирования системы.

Данное руководство — исключительно технические аспекты: архитектура, юниты, cgroups, работа с журналами. Только команды и конфиги.

Читать далее

Ассемблер: рассматриваем каждый байт «Hello, World!». Как на самом деле работают программы на уровне процессора и ОС

Уровень сложностиСредний
Время на прочтение25 мин
Охват и читатели29K

Что на самом деле происходит, когда вы запускаете программу? Мы привыкли воспринимать это как данность, но за кадром скрывается целая вселенная — от регистров процессора и системных вызовов Linux до формата ELF и модели памяти процесса. Присоединяйтесь к погружению, где мы прольём свет на каждый байт программы «Hello, World!» и поймём, каким образом ОС её выполняет.

Читать далее

Конкурентность: Асинхронность

Время на прочтение6 мин
Охват и читатели42K

Мы всё-таки смогли дойти до третьей части и добрались до самого интересного — организации асинхронных вычислений.


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


Теперь посмотрим, как можно управлять потоком исполнения (control flow) в случае обработки асинхронных задач.


Читать дальше →

Flat-контейнеры в C++

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.8K

Привет, Хабр! Еще в C++23 появились «плоские» ассоциативные контейнеры: std::flat_setstd::flat_map и их многоключевые аналоги. Проще говоря, это полные аналоги обычных std::set и std::map, но реализованные иначе – через упорядоченный последовательный контейнер (по умолчанию std::vector). Зачем вообще понадобились эти штуки? Официальная причина – экономия памяти и выигрыш в производительности при чтении данных.

Читать далее

Конкурентность: Кооперативность

Время на прочтение6 мин
Охват и читатели25K

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


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


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


Читать дальше →

Конкурентность: Параллелизм

Время на прочтение5 мин
Охват и читатели54K

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


И, надеюсь, кому-нибудь это может оказаться полезно, ибо кто-нибудь может чего-нибудь не знать, или, наоборот, окажется полезно мне, если кто-нибудь покажет что-нибудь ещё/укажет на изъяны в моих знаниях.


Читать дальше →

Про РЧ/СВЧ для программистов: теорема Найквиста — Шеннона в картинках

Уровень сложностиСложный
Время на прочтение7 мин
Охват и читатели9.4K

Среди электротехнических дисциплин РЧ/СВЧ особенно выделяется своими контринтуитивными принципами. Их понимание всегда происходит с трудом. Если в них разобраться, то эти принципы начинают казаться чем‑то совершенно естественным, и их сложность забывается. Возможно, именно поэтому справочные материалы по РЧ/СВЧ нередко подобны анекдоту «А восьмёрка, сын, пишется как знак бесконечности, повёрнутый на пи пополам».

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

дискретизировать аналоговый сигнал

Математика, биты, магия и немного ненормального программирования на C

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели12K

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

Идея написать эту статью зародилась из моего поста. В нем я рассказал о том, что через последовательность Фибоначчи можно конвертировать мили в километры с небольшой погрешностью. Увидев, что многим понравилась, я задумался: почему бы не изучить еще какие-нибудь трюки, заодно практикуясь в программировании на C?

Всех, кто заинтересовался — прошу под кат.

Читать далее

Девиртуализация в C++, компиляторах и вашей программе

Уровень сложностиСложный
Время на прочтение16 мин
Охват и читатели12K

Привет, Хабр! Меня зовут Илья Андреев, я старший программист в компании Syntacore. Вы, наверно, слышали, что виртуальные функции в C++ пользуются дурной славой — а может, и сами придерживаетесь о них не самого лучшего мнения. В этой статье, подготовленной совместно с Константином Владимировым, я в некоторой степени выступлю адвокатом виртуализации.

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

Читать далее

Docker изнутри: исчерпывающее руководство. Механизмы контейнеризации + примеры, эксперименты и реализация

Уровень сложностиСредний
Время на прочтение33 мин
Охват и читатели43K

Docker — не магия, а грамотное применение механизмов Linux. Разбираем инструмент, который пугает своей сложностью не меньше блокчейна. Показываем на пальцах как работают: Namespaces, Cgroups, OverlayFS – основные компоненты любого контейнера, и как стандарт OCI объединяет их в единую экосистему. Об этом и не только в статье.

Читать далее

Вычисление периода записи дробной части числа в позиционных системах счисления

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели8.3K

Всякое рациональное число в позиционной системе счисления имеет либо конечную запись дробной части, либо бесконечную периодическую запись. Как вычислить соответствующий период для произвольного числа вида 1/α? В статье выведем универсальную формулу и рассмотрим конкретный и «быстрый» пример с большим периодом, но в шестнадцатеричной системе счисления, который можно проверить на калькуляторе.

Читать далее

Расширение известного трюка с XOR на миллиарды строк: введение в обратимые фильтры Блума

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели11K

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

Читать далее

Универсальная С++ фабрика объектов: для Qt и не только

Уровень сложностиСложный
Время на прочтение47 мин
Охват и читатели11K

Привет, Хабр! Меня зовут Михаил Полукаров, я занимаюсь разработкой Desktop-версии корпоративного супераппа для совместной работы VK Teams.

Если вы тоже работали с большими проектами, где активно применяются объектно-ориентированные паттерны проектирования, то наверняка сталкивались с паттернами проектирования Factory Method или AbstractFactory. В процессе разработки я неоднократно ловил себя на мысли, что часто пишу однотипный код таких фабрик, и задумался о том, как можно было бы избежать таких самоповторений. 

В этой статье я покажу, как сделать универсальную фабрику объектов, покрывающую большую часть потребностей, следующую принципам DRY (Don’t Repeat Yourself), а также как можно использовать некоторые «фишки» новых стандартов С++. 

Читать далее

CMake и C++ — братья навек

Время на прочтение11 мин
Охват и читатели107K

Дружба навек


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


Многие ругают CMake, и часто заслуженно, но если разобраться, то не всё так плохо, а в последнее время очень даже неплохо, и направление развития вполне позитивное.


В данной заметке я хочу рассказать, как достаточно просто организовать заголовочную библиотеку на языке C++ в системе CMake, чтобы получить следующую функциональность:


  1. Сборку;
  2. Автозапуск тестов;
  3. Замер покрытия кода;
  4. Установку;
  5. Автодокументирование;
  6. Генерацию онлайн-песочницы;
  7. Статический анализ.

Кто и так разбирается в плюсах и си-мейке может просто скачать шаблон проекта и начать им пользоваться.
Читать дальше →

Продвинутое использование препроцессора в C и C++

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели7.7K

Зачастую, в проектах ограничивается использование препроцессора по следующим причинам:

— Он не похож на весь остальной язык;
— Макросы могут возвращать неполные синтаксические конструкции, или вовсе различные, в зависимости от параметров.

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

Со всеми его недостатками, инструмент есть в языке и достоин изучения.

Читать далее

Информация

В рейтинге
3 196-й
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность