Все потоки
Поиск
Написать публикацию
Обновить
194.36

C++ *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Происхождение и эволюция аллокатора памяти в С

Время на прочтение11 мин
Количество просмотров25K

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

Аллокатор памяти в С - именно тот случай, когда при попытке ознакомиться с его современным устройством возникает стойкое желание остановиться, мысленно поблагодарить авторов и далее обращаться как с черным ящиком. Если же в читателе сильна любознательность, и/или есть желание постигнуть тайное знание, которое даст ощущение понимания странного поведения программ в нетривиальных случаях, добро пожаловать под кат.

Читать далее

Говорящая книга: четверть века спустя

Время на прочтение11 мин
Количество просмотров2.9K

Четверть века назад в издательстве Addison-Wesley вышел мой первый CBT (Computer Based Training) - учебник по Visual C++ 5 [1]. 

Это был один из первых в Западной Европе фундаментальных мультимедиальных образовательных проектов. 

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

Читать далее

Современные возможности C++ и проверенные паттерны: активный объект, внешний полиморфизм и корутины

Время на прочтение14 мин
Количество просмотров17K

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

Читать далее

Изучение физического движка Bullet

Время на прочтение8 мин
Количество просмотров13K

Bullet Engine -- это современный физический движок, работающий в трехмерном пространстве. Он предоставляется с открытым исходным кодом, что позволяет его легко анализировать и изучать.

Читать далее

Цена ошибки

Время на прочтение6 мин
Количество просмотров2.8K

Продолжим. Наша текущая цель - на примере  аттракторов достичь равенства результатов в SimInTech  и ВКПа.  Делать мы это будем приведением моделей к наиболее универсальной базе - используя языки программирования (ЯП). В ВКПа уже есть реализация на С++. Осталось создать ее в SimInTech. В таком виде они будут соответствовать друг другу. А в идеале, если языки одинаковые, даже просто совпасть. Все это должно способствовать равенству результатов. И на этом пути, кроме освоения внутреннего языка программирования SimInTech,   особых препятствий не предвидится.

Блоки на внутреннем ЯП в SimInTech создаются на базе блока PL  - блок библиотеки Динамические. Напомним реализацию модели аттрактора Лоренца на стандартных библиотечных блоках. Она приведена на рис. 1. Далее мы ее будем называть исходной схемой. Часть ее вместе с соответствующим кодом на языке программирования SimInTech (LangBlock22) представлена на рис. 2.

Читать далее

Меньше, еще меньше! Делаем вольт-ампер-ватт метр на Attiny85

Время на прочтение4 мин
Количество просмотров18K

Ну вот наконец добрался до Attiny85, все хотел чего-нибудь сделать на них. А тут коллеги решили с гальваническими покрытиями поиграться. Путем нехитрых доработок блок питания для светодиодных дисплеев на 5В 60А стал регулируемым. А вот контролировать такие токи нечем. Шунт на 75мВ при 50А в местных магазинах мы нашли, а вот головку к нему нет, а стоять считать чего там милливольты показывают на мультиметре- такое себе.

Читать далее

Boson — разработка СУБД «с нуля» (часть I)

Время на прочтение9 мин
Количество просмотров20K

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

Каждый разработчик "кровавого" enterprise в своей работе использует СУБД (SQL/NoSQL) и меня всегда искренне интересовало как они устроены в самом сердце, на самом низком уровне. Почитав документацию и исходный код SQLite и MongoDB, про используемые в индексах и интерпретаторах запросов алгоритмы, осознал, что несмотря на широкую распространенность и некую привычность, системы управления базами данных (СУБД) - это сложные программные продукты, реализация которых не всем под силу. Отлично - как раз то, что мне надо. С мотивацией разобрались, перейдем к делу.

Итак, для начала хорошо бы сформулировать высокоуровневую спецификацию требований. Boson - это легкая, встраиваемая документоориентированная база данных на С/С++

Читать далее

Алгоритмы диапазонов C++20 — сортировка, множества, обновления C++23 и прочее

Время на прочтение9 мин
Количество просмотров5.9K


Эта статья — третья и последняя в мини-серии об алгоритмах диапазонов. Мы рассмотрим некоторые алгоритмы сортировки, поиска и другие, а также познакомимся с готовящимися крутыми улучшениями этих алгоритмов в версии C++23. Поехали! Подробности — к старту курса по разработке на С++.

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

Алгоритмы диапазонов C++20 — 11 модифицирующих операций

Время на прочтение14 мин
Количество просмотров6.3K


В предыдущей статье серии «Диапазоны» я рассмотрел основы и некоторые немодифицирующие операции. Сегодня пришло время таких алгоритмов, как transform, copy, generate, shuffle и многих других… даже rotate. Подробности — к старту курса по разработке на С++.


Прежде чем мы начнём


Ключевые наблюдения об алгоритмах std::ranges:

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

ReactOS и «новогодняя банка»

Время на прочтение3 мин
Количество просмотров7.3K

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

Читать далее

Как написать 2D игру на C++ и чистом STL для терминала в Linux

Время на прочтение8 мин
Количество просмотров19K

Привет хабр, я PHP разработчик с опытом работы в продакшне более 8 лет. После долгого и упорного труда мне стало скучно пилить микросервисы и бэкенды в хайлоде, я решил постичь магию разработки игр. Выбрал курс по Unreal Engine 5 и C++, так как там все структурировано, понятно, и в случае необходимости есть кому задать вопрос. На первой лекции по основам С++ преподаватель сразу предложил челлендж - написать 2D игру без использования игрового движка

Читать далее

Топ-10 ошибок в C++ проектах за 2022 год

Время на прочтение11 мин
Количество просмотров4K

Дело идёт к Новому году, а значит, самое время традиционно вспомнить десять самых интересных срабатываний, которые нашёл PVS-Studio в 2022 году.


1021_Top_10_CPP_Bugs_2022_ru/image1.png

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

Ближайшие события

Коллекционирую лучшие C++ практики

Время на прочтение3 мин
Количество просмотров22K

Коллекционирую лучшие C++ практики


Что-то наши публикации всё больше о плохом, чем о хорошем. Здесь баг, тут код с запахом, это антипаттерн, вот так писать не надо. Помогите увидеть светлую сторону программирования на С++. Оставляйте комментарии.

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

Компиляция карт для Half-Life 1 на ТВ-приставке

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

Я уже не первый год занимаюсь моддингом легендарной Half-Life 1, и как-то совершенно спонтанно мне пришла в голову мысль, дескать, как было бы прикольно иметь возможность компилировать карты на какой-нибудь платформе, отличной от привычных всем x86 и amd64. Затем я вспомнил, что у меня дома есть ТВ-приставка на базе Android, которую в теории можно было бы приспособить для этих дел. Если такая возможность есть, значит обязательно нужно провести эксперимент.

Читать далее

Задача теплопроводности методом продольно-поперечной прогонки средствами MPI

Время на прочтение12 мин
Количество просмотров9.5K

Приветствую

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

Разберем не только теорию, но и подробности решения

Читать далее

7-zip — нет времени спешить

Время на прочтение12 мин
Количество просмотров48K

Данной заметки не должно было быть, но мы живем не в идеальном мире. Есть много пользователей, что предпочли стандартному проводнику Windows альтернативу и наверное еще больше пользователей архиватора 7-zip. Имеет смысл поделиться с ними, подумал я и вот мы здесь.

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

Что делает обычный эникейщик в подобной ситуации? Конечно же берет в руки первый подвернувшийся профайлер.

Читать далее

C++ для Maya

Время на прочтение12 мин
Количество просмотров5.1K

Создание кастомного локатора в Autodesk Maya с помощью C++

Здравствуйте. В этой статье я хочу поделиться тем опытом, который приобрел при написании плагина на C++ для Maya.

Читать далее

Алгоритмы диапазонов C++20 — 7 немодифицирующих операций

Время на прочтение13 мин
Количество просмотров8.8K


Библиотека Ranges для C++20 предлагает альтернативы для большинства алгоритмов. На этот раз я хочу показать вам десять немодифицирующих операций. Мы сравним их со «старой» стандартной версией и увидим их преимущества и ограничения.


Подробности — к старту нашего курса по разработке на C++.

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

Вклад авторов