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

C++ *

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

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

Эволюция enum

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

Константы — это здорово. Типы — это замечательно. Константы определенного типа — еще лучше. А enum классы — это просто фантастика.

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

Читать далее

CLI'нический парсинг

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

Каждый программист однажды получает по голове необходимостью парсить аргументы командной строки и вот это наконец случилось со мной - так почему бы не использовать это как возможность (написать какую-то дичь) (CLI парсер)? Скажу сразу - мы тут чтобы развлекаться, потому требования к парсеру будут... Интересные

Читать далее

Тестовое в Firefly Studios или игра за час

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

Пару недель назад, на меня вышла HR "светлячков" и пригласила поговорить о позиции AI программера в их новую старую игру. Я был несколько удивлен, потому что знаком с парой ребят из студии и знаю, что найм у них сейчас остановлен. Но всегда интересно пообщаться с умными людьми, поэтому отказываться не стал. Первый созвон с HR вышел стандартный, где над чем работал, какие игры шипнул. Не очень понимаю зачем все это было спрашивать, если все это есть на линкедине подробно и с датами. Ну да ладно - видно такая их эйчарская доля по тридцать три раза переспрашивать. Или HR дальше второй страницы просто поленилась почитать.

Забукали время технического интервью. В полдень четверга на встречу приходит сотрудник студии и начинает просматривать резюмешку дальше второй страницы, где натыкается на скрин опенсорсного проекта StoneKingdoms, в который я некоторое время активно комитил. Проект, если что, получил благословение самого Simon Bradbury, так что проблем с правами на использование ресурсов из Stronghold нет. Посыпались вопросы, а что за проект? а как делаете? и что все на lua? а как же плюсы? Где-то на середине разговора к нам подключился другой разработчик "светлячков", с которым мое знакомство началось еще в 2010, когда он помогал восстанавливать исходники Caesar III и просто давал консультации как реализована игровая симуляция. Мы и сейчас иногда общаемся на форуме по ремейкам старых игр.

Как прошел собес...

Современный С++ в разработке девайсов

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

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

Меня зовут Андрей Белобров. Я тимлид одной из команд, разрабатывающих приложения для умных девайсов Сбера.

На прошедшей недавно конференции Салют, OS DevConf! я выступил с докладом, в котором рассказал, как мы с командой разрабатываем приложения на С++ для умных устройств с виртуальным ассистентом. А также о том, как инструменты статического и динамического анализа помогают поддерживать единый стиль и высокое качество кода в проекте.

Во время доклада меня попросили подробнее описать детали нашего подхода в статье, поэтому рад поделиться с вами расширенной текстовой версией.

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

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

Читать далее

Как мы переводили проект на CMake

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

В статье мы расскажем о том, как переводили проект с рекурсивной сборочной подсистемы ЗОСРВ "Нейтрино", представляющей собой набор расширений инструмента GNU Make на сборочную систему CMake: с какими нюансами нам пришлось столкнуться, какие преимущества мы получили в результате перевода и как это повлияло на нашу команду разработчиков.

Читать далее

Держись, Маша! Ты, ведь, наша! Продолжение разбора книги «Цифровая схемотехника и архитектура компьютера»

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

Упомянутая в заглавии книга (далее H&H) - это про железо [15]. Я - про программирование, но на базе "железной модели" конечного автомата. И там и там математическая основа одна. Все это, действительно, крутая железная концепция, помогающая поставить не только синтез цифровых схем, но и программирование на совершенно другие рельсы, определяющие его будущее.

Параллелизм у программистов нынче в моде. Но, видимо, они (программисты) совсем не в курсе, что разработчики железа давным-давно погружены в эту тему. А потому им (я все про программистов) есть у кого поучиться. Но, похоже, некие амбиции-заскоки этому  мешают. Но, если вы этим не страдаете, то прочитайте книгу H&H и дойдите, ну, хотя бы до 4-й главы. Попробуйте реализовать одно-два упражнения, используя свой, программистский инструментарий - всякие там корутины, потоки и весь сопутствующий этому террариум. Убедитесь в его полном бессилии. И тогда, может, это заставит кое-что пересмотреть, переосмыслить. Только представьте: логический элемент - отдельный процесс, десятки, сотни, тысячи элементов - множество параллельных процессов, и все это в вашей ладошке (это я про смартфон) и даже работает!

Но пришло время исполнять обещанное (см. предыдущую часть темы в [1]). И пусть количество "плюсов" пока не достигло заданной планки, но ... если каждый "минус" считать за два "плюса", то это уже более чем ... ;) Так что спасибо всем, давшим положительную оценку - нет, не автору, а затронутой теме. Области знаний, от которой многое сейчас зависит.  Это те слова, которые мы вправе сказать в адрес теории, посвященной  синтезу цифровых схем, в адрес тех, кто занимался и занимается ее развитием, становлением и внедрением в практику.

Читать далее

Подготовка инструментов под фаззинг UEFI на базе edk2 в Windows

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

Так повелось в мире, что время от времени необходимо проводить исследования безопасности драйверов и прошивок. Одним из способов исследования является — фаззинг (Fuzzing). Не будем останавливаться на описании самого процесса фаззинга, для этого есть эта статья, отметим только, что в основном его используют для исследования прикладных приложений. И тут возникает вопрос: как профаззить прошивку, в частности прошивку UEFI? Здесь будет рассказано об одном из способов с использованием программного эмулятора EDKII, чтобы проводить фаззинг без развертывания аппаратных стендов. И что важно, все это сделаем в Windows.

Читать далее

Магия swizzle из шейдеров в C++

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

В шейдере мы можем написать vec3 v0 = v1.xxy * 2 и любую другую комбинацию x, y, z и w в зависимости от длины вектора. Я рассматриваю только размеры вектора до 4, как самые распространенные для использования. Полученный вектор может не иметь той же самой размерности, как в меньшую так и в большую сторону и его компоненты могут быть скопированы в произвольном порядке. Это операция называется "swizzle" и это чертовски удобно для различных операций с малоразмерными векторами, особенно если они представляют игровые сущности в виде позиций, размера или цветов. Вектора используются повсюду в игровых проектах (да и не только в игровых), и не только в шейдерах. В какой-то момент swizzle было решено затащить и в наш игровой движок в базовые классы vec2, vec3 и vec4. Возникли вопросы: как добиться такого же синтаксического и семантического поведения в C++ коде, при этом минимизируя потери производительности.

Swizzl'ить дальше

История создания Оптимизатора для ПК: Nuxt.js, Electron и C++ в Одном Проекте

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

Как я проектировал свой самый большой проект, сложности с которыми я столкнулся. Фишки и неочевидные моменты при разработке.

Читать далее

30 лет DOOM: новый код — новые баги

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

Сегодня первой игре из серии DOOM исполняется ровно 30 лет! Мы не могли обойти стороной это событие и в честь этого решили посмотреть, как же выглядит код этой легендарной игры спустя годы.

Читать далее

Внутренний Я(ндекс)

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

В этой статье я хочу описать (часть) моего опыта взаимодействия со структурой, именуемой в дальнейшем «яндекс», с точки зрения работника. Опишу собеседования и этап «входа».

Да, уже были статьи про собеседование и даже в эту же структуру, некоторые из них я видел, но не во всём с ними согласен, к тому же конкретно С++ разработчиков я там не видел.

Читать далее

Lesta Studio и её тестовое задание с подвохом

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

Искали статеечку с жалобами джуна о несправедливости IT? Так вот же она!

Открытая к интерпретации история собеседования.

Читать далее

Использование Nim В Python

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

В этой статье поговорим о том, как можно ускорить свой код, написанный на Python с помощью модулей, скомпилированных через Nim.

Узнаем о том, какие библиотеки в Python написаны на Nim и даже напишем свой небольшой модуль для Python!

Читать далее

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

Разработка расширения для PHP на C++. Хуки встроенных функций и методов

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

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

Читать далее

Технологии прошлого и настоящего: как я сделал Nixie Clock с самодельным драйвером на ESP8266

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

Радиолампы, словно артефакты из прошлого, олицетворяют нечто большее, чем просто технологию. Они несут в себе определенную магию, отражающую уникальное сочетание технического мастерства и эстетики. Не удивительно, что часы на неоновых индикаторах занимают довольно уникальную нишу в мире дизайна и интерьера. Они представляют собой не просто инструмент для отображения времени, но и элемент декора, который может значительно изменить атмосферу помещения. Этой статье я расскажу о своем опыте создания Nixie Clock на базе драйвера собственной разработки.
Читать дальше →

Как войти в айти за час с нуля, на языке с++ Win32 (графические приложения) «для самых маленьких»

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

Хе хе ну вы поняли «ВОйти ВАйти».

Принято считать, что программирование это сложно, но это миф (все проще чем кажется), и все что нужно чтобы стать программистом это немного упорства и изобретательности.

В этой статье мы получим все базовые навыки, которые нужны программисту, по окончании статьи у тебя будут все необходимые навыки для C++ Junior Desktop Developer, а также ты сможешь создавать 90% программ с софт портала, меньше слов ближе к делу.

Изучить программирование с 0 за час

Концепция RAII (Resource Acquisition Is Initialization)

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

Здравствуй, Хабр!

RAII (Resource Acquisition Is Initialization) - это важная концепция в C++. Она представляет собой парадигму управления ресурсами, которая способствует безопасности и эффективности кода. В основе RAII лежит идея связывания жизненного цикла ресурса (например, памяти, файлового дескриптора или других ресурсов) с жизненным циклом объекта в C++. Это означает, что ресурсы выделяются и освобождаются автоматически при создании и уничтожении объектов.

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

Читать далее

Верле: разрешаем коллизии (часть 2 — сетка, квадратики)

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

Две сотни частиц слишком мало? Хочется тысячи или десятки тысяч? Тогда пора заменить неадекватно медленный алгоритм поиска коллизий на что-то чуть более изящное.

Читать далее

Новые проклятия: руководство по ncurses

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

HTOP, midnight commander... Как же они построили довольно красивый и удобный псевдографический интерфейс?

Все благодаря библиотеке для C/С++ под названием new curses ("новым проклятиям" дословно) или же NCURSES.

Но как ее установить и работать с ней?

Вперёд!

Инженерный калькулятор на C++. Часть 2: Алгоритм сортировочной станции

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

Всем маткульт-привет! В этой статье мы продолжаем и заканчиваем написание консольного инженерного калькулятора.

В прошлой части мы научились разбивать исходное математическое выражение формата (log2(18)/3.14)*sqrt(0.11^(-3)/0.02)на токены. На выходе мы получаем массив токенов, каждый их которых содержит информацию о типе (оператор, скобка, число, ...) и об ассоциативности, если он таковую имеет.

Теперь мы хотим привести выражение к виду обратной польской записи (RPN), чтобы затем удобно его посчитать. Это нам позволяет сделать изобретенный Эдсгером Дейкстрой алгоритм сортировочной станции.

Читать далее

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