Обновить
128K+

C++ *

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

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

Сказ про резисторы и неонки

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

Расчёт цепей постоянного тока на пальцах, или давайте считать ЦАП для троичной логики


Но для начала неонки, какой же русский их не любит?


Итак, снова я со своими троичными железками, но в этой статье они выступают фоном, сегодня статья про резисторы. Запаял я было несколько платок, в которые можно воткнуть газоразрядные лампы типа ИН-12 или ИН-15, но часы делать не захотел :)


Паттерн Model-Update-View и зависимые типы

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


Model-Updater-View — функциональный паттерн, успешно применяемый в языке Elm в основном для разработки пользовательских интерфейсов. Что бы им воспользоваться надо создать тип Model, представляющий полное состояние программы, тип Message, описывающий события внешней среды, на которые программа должна реагировать, меняя свое состояние, функцию updater, которая из старого состояния и сообщения создает новое состояние прораммы и функции view, которая вычисляет по состоянию программы требуемые воздействия на внешнюю среду, которые порождают события типа Message. Паттерн очень удобный, но у него есть маленький недостаток — он не позволяет описать какие события имеют смысл для конкретных состояний программы.

Схожая проблема возникает (и решается) и при использовании ОО-паттерна State.

Язык Elm простой, но очень строгий — он проверяет, что функция updater хоть как-то обрабатывает все возможные сочетания модели-состояние и сообщения-события. По этому приходится писать лишний, пусть и тривиальный — как правило оставляющий модель без изменений, код. Я хочу продемонстрировать, как этого можно избежать в более сложных языках — Idris, Scala, C++ и Haskell.
Читать дальше →

Learn OpenGL. Урок 4.1 — Тест глубины

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

Буфер глубины


В уроке, посвящённом системам координат, мы выполнили рендер трехмерного контейнера с использованием буфера глубины, что позволило предотвратить ошибочный вывод граней, находящихся позади других. В этом уроке мы пристальнее взглянем на буфер глубины (или z-буфер) и хранимые в нем значения, а также узнаем как конкретно проходит проверка находится ли фрагмент позади других.
Читать дальше →

Мой первый компилятор на LLVM

Время на прочтение4 мин
Охват и читатели26K
Это руководство посвящено написанию простейшего компилятора на LLVM. Никакой предварительной подготовки не требуется.



Входным языком нашего компилятора будет BF. Это классический «игрушечный» язык для компиляторов, и даже есть компилятор BF в примерах к LLVM! В этом посте я приведу процесс написания компилятора с пояснениями.
Читать дальше →

Интеграция физических тел полученных в редакторе Physics Body Editor в cocos2d-x-сцену

Время на прочтение4 мин
Охват и читатели3.1K
Создавая игру на движке cocos2d-x, мне понадобился инструмент для создания физических тел из произвольных изображений. Изначально поиск меня привёл к коммерческому инструменту PhysicsEditor, но взглянув на его цену, решил найти что-нибудь дешевле. Пришлось потратить довольно-таки много времени, прежде чем я наткнулся на видео-уроки, которые оказались для меня полезными.

В данной статье будет описано, как создавать физические тела для изображений в бесплатном, кроссплатформенном редакторе Physics Body Editor и интегрировать их в cocos2d-x-сцену.
Читать дальше →

OpenApoc — Фанатам X-Com Apocalypse посвящается

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

Всем привет!
X-COM 3: Apocalypse, не был таким популярным, как первые две части, и получился достаточно противоречивым. На одной чаще весов были потрясающая для тех лет физика и тотальная разрушаемость, тактические возможности, живой город, социальное взаимодействие, войны корпораций, экономическая модель. На другой — проблемы с ИИ, балансом, бесполезность многих видов оружия и техники, крайняя ограниченность социального взаимодействия, скучная война на территории пришельцев и множество эксплойтов.

Но далеко не все знают, что многие проблемы игры были обусловлены тем, что она вышла задолго до достижения готовности, несмотря на 3 года разработки. Многие механики и возможности были реализованы лишь частично, а некоторые так и остались только на бумаге. Однако фанаты игры не дремлют — недавно вышла альфа версия OpenApoc. Альфа-версия играбельна и позволяет пройти игру от начала до конца. Добавлено более 40 различных опциональных улучшений, режим скирмиша, переводы на несколько языков и т. д.
Читать дальше →

Actors for fun and profit

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

Эта статья является адаптированным вариантом текста одноименного доклада с конференции C++ CoreHard Autumn 2017. Статья рассматривается как завершение темы, поднятой ранее в публикациях "Модель Акторов и C++: что, зачем и как?" и «Шишки, набитые за 15 лет использования акторов в C++» часть I и часть II. Сегодня речь пойдет о том, как понять, что Модель Акторов может быть успешно использована в вашем проекте.


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


Лирическое отступление на тему «Модель Акторов и C++: миф или реальность?»


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


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

Андрей Карпов считает, что код проекта Manticore качественнее, чем код проекта Sphinx

Время на прочтение9 мин
Охват и читатели11K
Sphinx vs ManticoreМои читатели попросили сравнить проекты Manticore и Sphinx с точки зрения качества кода. Я могу сделать это только одним освоенным мною способом — проверить проекты с помощью статического анализатора PVS-Studio и посчитать плотность ошибок в коде. Итак, я проверил C и C++ код в этих проектах и, на мой взгляд, качество кода Manticore выше, чем качество кода Sphinx. Естественно, это очень узкий взгляд, и я не претендую на достоверность своего исследования. Однако меня попросили, и я сделал сравнение так, как умею.
Читать дальше →

Знакомство с WebAssembly

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


Эта статья основана на моём выступлении на ITSubbotnik, прошедшем в Рязани 14 октября 2017 года. На русском пока что довольно мало материала на эту тему, надеюсь что статья будет вам полезна.


Disclaimer: Автор не является экспертом ни в WebAssembly, ни в JavaScript. Данная статья есть компиляция мыслей и идей, полученных из выступлений других людей на данную тему, плюс эпизодического опыта изучения WebAssembly в течение нескольких месяцев.

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

Варианты operator<< для логгера

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

Уважаемые хабровчане, у меня родилась публикация — вопрос. С удовольствием выслушаю вашу критику в комментариях.


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

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

Работа с API КОМПАС-3D → Урок 5 → Графические примитивы

Время на прочтение3 мин
Охват и читатели11K
Продолжаем цикл статей по работе с API САПР КОМПАС-3D Сергея Норсеева, инженера-программиста АО «ВНИИ «Сигнал», автора книги «Разработка приложений под КОМПАС в Delphi». В качестве среды используется C++ Builder. В предыдущих уроках по API КОМПАС Основы и Оформление чертежа мы исходили из того, что КОМПАС не запущен, в уроке Корректное подключение к КОМПАС мы проверяли наличие уже запущенного КОМПАСа и подключались к нему. В прошлом уроке Основная надпись разбирали, как заполнить основную надпись чертежа. В этом уроке продолжим рассмотрение интерфейсов системы КОМПАС и наконец-то начнем чертить.


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

Статические анализаторы кода на примере ClickHouse

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

Чуть больше месяца назад была опубликована статья, содержащая анализ исходного кода ClickHouse с помощью PVS-Studio. Статья оказалась достаточно успешной: так, ссылку на неё мне отправили по меньшей мере десять раз в день её публикации. Общий тон статьи позитивный, а посещаемость сайта clickhouse.yandex в день её выхода заметно выросла.


Я очень уважаю, когда какая-либо компания или человек делает свою работу исчерпывающим образом. Так, у PVS-Studio исчерпывающий подход к продвижению: одних только статей на Хабре 337 штук. Они проводят доклады почти на всех российских конференциях по C++. В любом случае стоит отметить: люди стараются и своим трудом приносят пользу другим людям.


Та статья пробудила в нас интерес к статическим анализаторам, и мы решили проверить работу нескольких общедоступных аналогов PVS-Studio на кодовой базе ClickHouse. В сегодняшней статье мы поделимся с вами результатами этого исследования.


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

UB-2017. Часть 1

Время на прочтение14 мин
Охват и читатели13K
От переводчика:
Переводы статьи про неопределённое поведение в языке C от Криса Латтнера, одного из ведущих разработчиков проекта LLVM, вызвали большой интерес, и даже некоторое непонимание со стороны тех, кто не встречался с описываемыми явлениями на практике. В своей статье Крис даёт ссылку на блог Джона Реджера, и на его статью от 2010 года, посвящённую UB в C и C++. Но в блоге Реджера есть и гораздо более новые статьи на эту тему (что не отменяет ценность старых, однако).

Я хочу предложить вашему вниманию свежую статью «Undefined Behavior in 2017». Статья в оригинале имеет очень большой объём, и я разбил её на части.

В первой части речь пойдёт о разных инструментах поиска UB: ASan, UBSan, TSan и т.д.
ASan — Address Sanitizer от компании Google, разработанный на основе LLVM.
UBSan — Undefined Behavior Sanitizer, предназначен для обнаружения различных UB в программах на C и C++, доступен для Clang и GCC.
TSan — Thread Sanitizer, предназначен для обнаружения UB в многопоточных программах.
Если вам эта тема покажется далёкой от практики, я рекомендую дождаться продолжения, потому что в конце вас ждёт поистине огромный список UB языка С++ (их должно быть около 200!)
И я рекомендую прочитать также старые статьи Реджера, они не утратили актуальности.
Об авторе: Джон Реджер является профессором Computer Science в университете штата Юта в США.


Мы часто слышим, что некоторые люди утверждают, что проблемы, вытекающие из неопределённого поведения (UB) в C и C++ в основном решены путём широкого распространения инструментов динамической проверки, таких, как ASan, UBSan, MSan и TSan. Мы здесь покажем очевидное: несмотря на то, что в последние годы произошло множество прекрасных улучшений в этих инструментах, проблемы UB далеки от разрешения, и рассмотрим ситуацию в деталях.


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

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

CoLaboratory: приглашаем на C++ User Group Meetup

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


15 ноября мы приглашаем всех неравнодушных к C++ на встречу с коллегами по цеху в рамках нашего проекта CoLaboratory. Резиденты C++ User Group сосредоточатся исключительно на практической стороне использования любимого инструмента программирования.

Поговорим на разные темы. Например, как clang и библиотека «libtooling» помогают «Лаборатории Касперского» автоматически генерировать код? Когда же наконец в C++ появятся «рефлекшены» и в каком виде попадут в стандарт? Какие подводные камни могут встретиться на пути проектирования «пула потоков» для высоконагруженной системы и соответственно как с ними бороться?
Читать дальше →

Unreal Engine: QuickStart в Qt Creator под Arch Linux

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

Введение


В марте 2015 года Epic Games повернулась лицом к Open Source сообществу, предоставив бесплатный доступ к своему движку Unreal Engine версии 4 (установив лимит на прибыль от использования движка в 3000$ за квартал). Более того, еще в 2014 году компания говорила о том, что поддержка свободных операционных систем, в частности Linux, является для неё одной из приоритетных задач.



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

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

Бестиарий С++. Справочник по загадочным персонажам

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


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

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

О стеке простыми словами — для студентов и просто начинающих

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

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

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

Cocos2d-x — Диспетчер событий

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

От переводчика


Доброго времени суток! Эта статья представляет собой перевод документации к движку Cocos2d-x.

В предыдущих частях мы уже рассмотрели большинство основных компонентов движка:

Sprite
Action
UI Components
Scene и другие

Нам осталось совсем немного для создания полноценной игры. А именно, обеспечить сам игровой процесс. Для этого, в Cocos2d-x существует диспетчер событий.
Читать дальше →

Новости C++ User Group

Время на прочтение1 мин
Охват и читатели4.3K
Всем привет!

Давно не писал про встречи сообщества на Хабре. А встречи проходят регулярно. Пора исправить это недоразумение и рассказать что было, что будет, позолоти ручку. Если кому-то лень ходить под кат, то новости одной строкой: встреча в Москве 6 ноября, встреча в Нижнем Новгороде 9 декабря, C++ Russia весной 2018, C++ Siberia зимой 2018 (2019?).
Читать дальше →

RandLib. Библиотека вероятностных распределений на C++17

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

Библиотека RandLib позволяет работать с более чем 50 известными распределениями, непрерывными, дискретными, двумерными, циклическими и даже одним сингулярным. Если нужно какое-нибудь распределение, то вводим его имя и добавляем суффикс Rand. Заинтересовались?
Читать дальше →