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

C++ *

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

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

Arduino AY player с экраном и кнопками

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

Конструируем музыкальный плеер PSG-файлов на чипе AY-3-8910 с OLED-экраном, кнопками управления и дополнительной памятью, а также подключаем выходные и входные сдвиговые регистры и прочие устройства с интерфейсами I2C и SPI к Arduino.

Читать далее

Как я перестал тревожиться из-за читабельности и… все

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

Всем привет.

Давно читаю хабр, давно и регулярно читаю статьи про правильное программирование.

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

TLDR: забейте на читабельность и выразительность. Стремитесь сделать ваш код хорошо работающим..

Идем забивать

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

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

1053_60_cpp_antipatterns_ru/image2.png


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

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

Дружим Flutter с С# и С++

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

На Flutter`е очень удобно и хорошо пишутся интерфейсы для пользователей. Но использовать Dart для решения алгоритмических задач тяжко и неэффективно. Семейство Си справляется гораздо лучше и позволяет легко распараллеливать вычисления. Кроме того, за многолетнюю историю С++ и С# обзавелись множеством полезных библиотек, не все из которых имеют аналоги во Flutter.

Зная про существование библиотеки FFI для Flutter, что позволяет даже синхронно запускать Си-шный код, я решил закопаться в эту тему и попробовать объединить наследие Си и их эффективность с удобным фреймворком. Учитывая то, что в интернете маловато информации про использование FFI, особенно с C#, я решил поделиться своим опытом "построения мостов" на примере двух приложений в этой статье.

Читать далее

Модули C++20 и GCC11

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

Одним из главных нововведений стандарта C++20 является добавление модулей. Модули призваны радикально изменить структуру кодовых баз C++ и, возможно, сигнализируют о грядущей кончине заголовков (но, скорее всего, не на моем веку). Они также потенциально открывают дорогу для внедрения унифицированной системы сборки и менеджера пакетов, наподобие Rust Cargo; хотя я не сомневаюсь, что стандартизация унифицированной системы сборки будет тем еще кровавым побоищем.

Читать далее

Суперклей ABI, или Как применять C++ где угодно

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

Привет, Хабр! Меня зовут Михаил, я backend-разработчик в SimbirSoft. Время от времени я сталкиваюсь с понятием «двоичный», он же «бинарный» интерфейс приложений, или просто ABI (application binary interface). Все найденные мной материалы на эту тему были либо очень скудны, либо вели к многостраничным эпопеям, которые напоминали сборную солянку из описания, например, архитектуры процессора x86, сдобренную стандартом С++.

Но потом я наткнулся на перевод публикации Тита Винтерса в рабочей группе 21 (WG21) — комитета по стандартизации языка C++. В ней он поднимает вопрос поддержки обратной бинарной совместимости. Значит, вопрос актуальный — это и стало мотивацией для написания этой статьи. В ней я сфокусируюсь на примерах и практике использования С++ в других языках программирования. Материал будет полезен middle+ и senior-разработчикам, а также всем, кто хочет сделать гибкий, долгоживущий, легко настраиваемый под заказчика продукт.

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

Читать далее

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

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

1053_60_cpp_antipatterns_ru/image2.png


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

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

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

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

1053_60_cpp_antipatterns_ru/image2.png


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

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

Выносим за скобки настройки CMake

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров7.9K
Fanny image about cmake

Каждый день я создаю множество однотипных проектов C++ с системой сборки cmake. И открывая проекты в IDE, каждый раз снимаю галочки с типа сборки, оставляя только Debug. А ещё меняю путь к папке сборки. Мелочь, а утомляет.

First time opening project without any preset. Qt Creator's Configure dialog image
Первое открытие проекта (без пресета)

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

Новые целочисленные типы для языка C++

Время на прочтение7 мин
Количество просмотров12K
(Большинство) реализаций C++ предоставляют по крайней мере 8, 16, 32 и 64-битные знаковые и беззнаковые целочисленные типы. Существуют потенциально неудобные неявные преобразования, споры о неопределенном поведении при переполнении (некоторые считают, что это перебор, другие — что недобор), но по большей части эти языковые конструкции хорошо справляются с поставленными задачами. В новых языках, таких как Rust, этот замысел скопирован, но исправлены проблемы с преобразованиями и поведение при переполнении.

Тем не менее, я считаю, что здесь есть место для инноваций. Позвольте мне рассказать о трех новых семействах целочисленных типов, которые я хотел бы увидеть в C++.
Читать дальше →

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

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

1053_60_cpp_antipatterns_ru/image2.png


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

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

Генерация Пещер

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

Генерация пещер. Генерация на языке программирования С++, на основе клеточных автоматов с регулируемыми настройками.

Читать далее

21 фича современного C++, которые вам обязательно пригодятся

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

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

Сообщество C++ дополняет стандарт чаще, чем Apple выпускает новые iPhone. Благодаря этому C++ теперь больше похож на большого слона, а съесть целого слона за один присест невозможно. Вот почему я решил написать эту статью, чтобы дать вашему путешествию по современному C++ своего рода отправную точку. Моя целевая аудитория здесь — люди, которые переходят со старого (т.е. 98/03) С++ на современный (т.е. 2011 и далее) С++.

Я отобрал ряд фич современного C++ и постарался объяснить их на лаконичных примерах, чтобы вы научились определять места, где их можно использовать.

Читать далее

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

Обновление fheroes2 — открытого движка Heroes of Might and Magic 2

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

В конце 2022 года открытый игровой движок Героев Меча и Магии 2 (fheroes2) добрался до заветной 1.0 версии. Несколько лет назад на Habr уже была новость о движке, когда текущие разработчики только-только взялись за него. Возможно, кому-то было бы интересно узнать о прогрессе и планах проекта на будущее.

Читать далее

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

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

1053_60_cpp_antipatterns_ru/image2.png


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

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

Зачем в Switch SDK три разных sin?

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

Работая в компании Gaijin несколько лет назад, мне довелось поучаствовать в портировании пары игр компании на консоль Nintendo Switch, тогда вовсю завоевывающую новые рынки. Для меня это стало первым крупным проектом на этой платформе. А с учетом, что ни команда, ни разработчик движка с платформой, системой сборки и вообще экосистемой Нинтендо знакомы не были, то все грабли приходилось искать и бережно на них наступать. Чтобы опробовать возможности новой платформы, параллельно с портированием игры, был написан внутренний middleware (связка dagor engine + nxsdk + jam) и код обрастал всевозможными тестами, build matrix, бенчмарками, прогоном стабильности и другими внутренними проверками. Надо отметить что на момент 2018 года, в самом switch sdk не было реализовано часть posix функций вроде poll и send/receive, и большая часть функций для работы с файлами, posix прослойку нужно было писать самим. Дошли тогда руки и до написания различных бенчмарков для функций стандартной библиотеки, и были замечены некоторые аномалии в поведении части тригонометрических функций в различных режимах сборки. Для справки, sdk использует урезанный вариант musl libc (https://www.musl-libc.org/), все статически линкуется в один большой бинарник clang'ом от Нинтендо 9 версии (2018 год), который потом запускается на консоли. Доступа к исходникам самой libc в исполнении Нинтендо у нас не было, но всегда можно посмотреть дизасм и боле менее представить что происходит.

Раскопки на месте

Rust моей мечты — несостоявшийся язык

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

В одном недавнем подкасте о том, кто сейчас главный в Rust, вновь всплыл вопрос о том, кому быть BDFL (великодушным пожизненным диктатором), и Джереми Соллер сказал (это был чемпионский заход на приз «за преуменьшение века»): «Я считаю, Грейдон забраковал бы некоторые вещи, которые всем нам сейчас нравятся». Этим он вторит другой дискуссии на reddit, в которой мне напомнили, что я собирался как-нибудь расписать, каким образом «я сделал бы всё по-другому». Вероятно, это бы крайне не понравилось всем причастным, и эти идеи далеко бы не распространились.

Ну и ну. Я понял, что следующий момент не вполне очевиден и он, пожалуй, заостряет вопрос, «а действительно ли в проекте нужен BDFL». Так вот, озвучу его: Rust Нашего Времени далеко, далеко отстоит от Rust Моей Мечты. Главное, не поймите меня неправильно: мне нравится, что у нас получилось. Получилось отлично. Я воодушевлён, что теперь есть столь жизнеспособная альтернатива C++, в особенности такая, которую другие люди уже начинают воспринимать как норму, как реальный вариант для повседневной работы. Я пользуюсь Rust и очень доволен, что могу отдавать ему предпочтение перед C++. Но!

Я столько всего сделал бы в Rust по-другому, если бы всё это время «отвечал» за его развитие.

Читать далее

Работа с void* в стиле C++

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

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

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

Читать далее

Как считать токены для GPT-3/GPT-4

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

OpenAI предоставляет мощные инструменты для работы с GPT-3 и GPT-4. Однако возможность подсчёта токенов реализована только для JavaScript и Python, что не покрывает всех возможных вариантов использования. В связи с этим я разработал универсальную библиотеку GPT-Tokenator для подсчёта токенов на C++, экспортировал функцию подсчёта токенов в C, что даёт возможность использовать её во многих языках программирования.

Читать далее

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

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

1053_60_cpp_antipatterns_ru/image2.png


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

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

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