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

C++ *

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

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

Монотонная кубическая интерполяция

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

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

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

На рисунке красным обозначен результат обычной кубической интерполяции Эрмита, а синим - монотонной, кругами - опорные точки траектории.

Примеры кода написаны на C++, исходники всей библиотеки лежат здесь. Также написана копия библиотеки на Java, исходники лежат здесь.

Читать далее

Безопасность типов и ресурсов в современном C++

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

Бьёрн Стрaуструп
Оригинал: Type‑and‑resource safety in modern C++

Предлагаю вашему вниманию перевод работы Бьерна Стрaуструпа про безопасность типов и ресурсов в современном С++. На данную работу Бьерн ссылается в т.ч. в своем ответе (A call to action: Think seriously about «safety»; then do something sensible about it) на нашумевшие рекомендации АНБ.

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

Читать далее

[sobjectizer] Несколько слов о релизе версии 5.8.0

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

SObjectizer — это относительно небольшой C++17 фреймворк, который позволяет использовать в С++ программах такие подходы, как Actor Model, Publish-Subscribe и Communicating Sequential Processes (CSP), что упрощает разработку сложных многопоточных приложений. Если читатель в первый раз слышит о SObjectizer-е, то составить впечатление о нем можно ознакомившись вот с этой статьей.

Недавно состоялся релиз очередной мажорной версии, 5.8.0. Это хороший повод еще раз напомнить о проекте и сказать несколько слов о наиболее важном в очередном релизе, в том числе и о (частичном) сломе совместимости с предыдущей веткой 5.7.

Кому интересно, милости прошу под кат.

Читать далее

Изучаем Kirigami от KDE: примеры разработки приложений

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

Для создания пользовательского интерфейса приложений придумано множество инструментов. Фреймворк Kirigami – как раз один из таких. Хотя он не отличается какой-то особой оригинальностью, Kirigami призван сделать создание приложений более простым и быстрым. С помощью этого инструмента можно создавать адаптивные и кроссплатформенные программы.

Читать далее

Как вывести форматированный текст на экран в C++

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

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

Но как сделать это оптимально и кроссплатформенно? Читайте в нашей статье!

Читать далее

Герои Кода и Магии: анализ игрового движка VCMI

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров13K

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

Читать далее

Параллельный метод сортировки массива std::thread

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

Золотые времена подошли к концу, когда разработчикам можно было ничего не делать, а программное обеспечение работала с каждым годом все быстрее.

Читать далее

Первый проект длиною в полтора года…

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

На дворе 2021 год, я занимаюсь ремонтом электроники уже на протяжении десяти лет. Свободное от работы время посвящаю изучению 3D-моделирования и печати. Для этих целей в 2018 году были куплены два самодельных FDM-принтера.

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

Уже вечером этого дня я изучаю плату и узнаю такие слова, как "Asic", майнер, майнинг. Понимаю, что имею на руках плату одного такого устройства, а в данном случае — AntMiner S9.

Читать далее

Волновой алгоритм

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

Волновой алгоритм — алгоритм поиска пути, алгоритм поиска кратчайшего пути. Принадлежит к алгоритмам, основанным на методах поиска в ширину.

Читать далее

60 антипаттернов для С++ программиста, часть 12 (совет 56 — 60)

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров12K

1053_60_cpp_antipatterns_ru/image2.png


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

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

Что такое пир-ревью и зачем оно нужно вашей команде

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

Меня зовут Савва Лебедев, я наставник и ревьюер курса «Разработчик C++», а до этого сам прошёл путь от обычного до старшего студента. На курсе есть задание на пир-ревью, и эта практика здорово прокачивает и хард-, и софтскилы. Именно поэтому хочу рассказать о пир-ревью и с позиции учащегося, и с позиции человека, который отвечает за качество обучения и профессиональное развитие студентов.

Спойлер: в конце статьи вы найдете код, на который можно дать пир-ревью для тренировки.

Читать далее

Как создать свой мод для Cyberpunk 2077? Шерстим исходники, Lua, C++ и Python

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

Недавно мой коллега @Doctor_IT попросил помочь с его проектом — VR-жилетом, который «проецирует» ощущения урона, которые получает персонаж, на тело игрока. С моей стороны — мод, который будет отправлять данные из Cyberpunk 2077 на сам жилет.

Информации по теме моддинга мало, на русском языке материалов практически нет, а существующие статьи местами устарели — пора это исправить. Если вам интересно, как разработать свой мод для Cyberpunk 2077 и собрать VR-жилет, добро пожаловать под кат.
Читать дальше →

Подводные камни С++. Решаем загадки неопределённого поведения, ч. 1

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

Изучение и понимание неопределённого поведения — важный шаг для разработчика C++, поскольку undefined behavior бывает источником серьёзных ошибок и проблем в программах. UB может проявляться в разных аспектах языка, включая операции с памятью, многопоточность, арифметические вычисления, работу с указателями и так далее.

Под катом мы погрузимся в мир неопределённого поведения в C++ и рассмотрим некоторые примеры ситуаций, в которых оно может возникать.

P.S.: Часть приведённых в статье примеров вдохновлены материалами, которые можно посмотреть в разделе «Полезные ссылки».

Читать далее

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

Типы, больше типов

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

При описании модели данных, часто приходится создавать новые типы, в первую очередь, используя такие ключевые слова как class/struct/record. Я же предлагаю взглянуть на случаи, когда моделируемая сущность, описывается существующими, часто простыми типами, такими как целое число или строка. В статье хочу поделиться мыслями, которые привели меня к использованию специальных типов там, где часто используются встроенные: int, string и тому подобные. И как удобно (относительно) это делать. Примеры приведу на языках Scala, Go и C++.

Читать далее

60 антипаттернов для С++ программиста, часть 11 (совет 51 — 55)

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров5.9K

1053_60_cpp_antipatterns_ru/image2.png


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

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

Raylib: опыт использования абсолютным новичком и что из этого вышло

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров8.3K


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

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

Читать далее

Выбор структур данных для самописного текстового редактора

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

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

Ресурсы


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

  • Build Your Own Text Editor — наверно, самый фундаментальный пост о создании текстового редактора с нуля, который я видел. Это превосходный туториал на случай, если вы хотите начать писать собственный текстовый редактор. Стоит заметить, что в редакторе из этого туториала в качестве внутренней структуры для текста используется, по сути, вектор строк.
  • Text Editor: Data Structures — отличный обзор множества структур данных, которые можно использовать при реализации текстового редактора. (Спойлер: как минимум одна из них будет рассмотрена в моём посте)
  • Плейлист Ded (Text Editor) на YouTube — это потрясающая серия, в которой @tscoding фиксирует процесс создания с нуля текстового редактора. Эти видео стали для меня источником вдохновения.

Зачем?


Если в сети есть так много хороших ресурсов о создании собственного текстового редактора (не говоря уже о том, что уже существует множество феноменальных текстовых редакторов), то зачем я это пишу? На то есть несколько причин:

  1. Я хотел заняться проектом, непохожим ни на один свой прошлый.
  2. Я хотел создать инструмент, которым смогу пользоваться.
  3. Мне всегда хотелось глубже разобраться с созданием собственных структур данных.
Читать дальше →

60 антипаттернов для С++ программиста, часть 10 (совет 46 — 50)

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров5.4K

1053_60_cpp_antipatterns_ru/image2.png


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

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

Интероперабельность между С++ и Rust

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров9.4K
image

image

Этот пост основан на презентации, с которой автор выступил на конференции EuroRust 2022 в Берлине. Доступны слайды и видеозапись.

Автор, работающий в компании Slint, участвует в создании UI-инструментария, написанного на Rust. Этот UI-инструментарий может использоваться и с другими языками и экосистемами, кроме той, для которой был написан, поэтому в Slint предусмотрены API для C++ и даже для Javascript. Естественно, эти API должны восприниматься как совершенно нативные для разработчиков, имеющих дело с этими языками. Именно поэтому ребром стоит вопрос о том, как создать нативно воспринимаемые API к коду Rust для пользователей, привыкших работать с C++.

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

В этом посте хотелось бы исследовать оба направления интеграции между Rust и C++ и представить некоторые инструменты, используемые в Slint.
Читать дальше →

60 антипаттернов для С++ программиста, часть 9 (совет 41 — 45)

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.4K

1053_60_cpp_antipatterns_ru/image2.png


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

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

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