Обновить
128K+

C++ *

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

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

Бесплатный IT-фестивальчик TechTrain: вторая волна

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


В этом году, когда из-за пандемии все мероприятия перешли в онлайн, мы уже проводили «фестивальчик на удалёночке» TechTrain. Теперь число заражений снова бьёт рекорды, вопрос «как интересно провести выходной дома» снова актуален, и мы устраиваем TechTrain 2020 Autumn: он состоится 24 октября.


Что можно будет увидеть? И доклады, и различные разговорные формы: круглые столы, интервью, набросы в прямом эфире. И, как водится на TechTrain, топовых спикеров, которые в своей сфере пользуются большим уважением. Например, на вопросы о производительности будут отвечать трое экспертов сразу: двое из Java-мира (Алексей Шипилёв и Андрей Паньгин), третий из .NET (Андрей Акиньшин).


Какие-то темы рассчитаны на определённых разработчиков («Ускоряем Flutter-разработку»), какие-то — на всех («Будущее IDE»). Расписали все темы под катом.

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

Обидно за мнения про статические анализаторы кода

Время на прочтение2 мин
Охват и читатели11K
Инструменты статического анализа кода ушли далеко вперёд. Это вовсе не те "линтеры", которые активно применялись 20 лет тому назад. Однако многие по-прежнему относятся к ним как к очень простым инструментам. Обидно. Обидно как за методологию анализа кода в целом, так и за инструмент PVS-Studio.


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

Кривые Безье. Немного о пересечениях и как можно проще

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

Вы сталкивались когда-нибудь с построением (непрерывного) пути обхода кривой на плоскости, заданной отрезками и кривыми Безье?


Вроде бы не сильно сложная задача: состыковать отрезки кривых в один путь и обойти его "не отрывая пера". Замкнутая кривая обходится в одном направлении, ответвления — в прямом и обратном, начало и конец в одном узле.


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


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

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

Релиз акторного фреймворка rotor v0.09 (c++)

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

actor system


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

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

Тестирование приложений в условиях нехватки памяти

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

Вопрос о том надо ли проверять то, что возвращает malloc является спорным и всегда порождает жаркие дискуссии.


Часть людей считает, что надо пытаться обрабатывать все виды runtime ошибок, в т.ч. и OOM ситуации. Другие считают, что с OOM всё равно мало что можно сделать и лучше дать приложению просто упасть. На стороне второй группы людей ещё и тот факт, что дополнительная логика обработки OOM с трудом поддаётся тестированию. А если код не тестируется, то почти наверняка он не работает.


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


Вопрос о том надо ли пытаться обрабатывать OOM ситуации в библиотеках/приложениях является противоречивым и мы не будем его здесь касаться. В рамках данной публикации я лишь хочу поделиться опытом того как можно тестировать реализованную логику обработки OOM ситуаций в приложениях написанных на C/C++. Разговор будет идти об операционных системах Linux и macOS. Ввиду ряда причин, Windows будет обойдён стороной.

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

Тридцать лет С++. Интервью с Бьерном Страуструпом

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

Ранее мы делали материал про использование C и C++ в Data Science. А сегодня мы хотим поделиться с вами интервью с автором C++ Бьерном Страуструпом. Далее в посте вас ждет рассказ о профессиональном пути Бьерна, деталях создания собственного языка программирования и извлеченные им из этого уроки.
Приятного чтения!

Под капотом сортировок в STL

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


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


При написании статьи я использовал стандарт C++17. В качестве реализаций рассматривал GCC 10.1.0 (май 2020) и LLVM/Clang 10.0.0 (март 2020). В каждой и них есть своя реализация STL, а значит и std алгоритмов.

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

Как скрестить Clion, Emscripten и Cmake

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

В этой статье я хотел бы пройтись и показать основные моменты того, как настроить IDE CLion для компиляции CMake проекта средствами Emscripten. Когда я занимался этим скрещиванием мне пришлось потратить день или два на эксперименты. И в этой заметке я собираюсь собрать некое "how to", которое в итоге сработало.

Читать далее

В нативный код из уютного мира Java: путешествие туда и обратно (часть 1)

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


Java и другие управляемые языки просты и удобны во многих случаях, но иногда их возможностей недостаточно — например, если нужна библиотека, написанная только на C или C++. Иногда хочется позвать пару методов из системного API, или попытаться улучшить производительность для модуля — и тогда прямой путь в нативный код.


Но тут возникают подводные камни: написать нативный метод и вызвать библиотеку может быть и легко, но JVM начинает крашиться в случайных местах, производительность падает, сборщик мусора перестает справляться с работой, а в репозитории царствуют бесконечные C-шные файлы с буквами JNI. Что же могло пойти не так?


Иван Углянский (dbg_nsk) из Huawei разбирается со всем по порядку: что необычного в интеропе между Java и нативным кодом, как оно работало раньше и что нужно делать для их нормальной совместной работы (и можно ли это вообще сделать). Иван рассказывает, как избежать просадок производительности, внезапных OOM и размышляет на тему будущего — в контексте проектов Panama и Sulong.


Мы подготовили текстовую версию доклада о работе с нативами в Java. В первой части:


  • Зачем вообще работать с нативным кодом в Java.
  • С какими ошибками и проблемами придётся столкнуться при работе с нативами.

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


Далее — повествование от лица спикера.

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

Qt? ImGUI? wxWidgets? Пишем свое

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

Привет, хабровчане! Хочу рассказать о своей системе UI, которую я написал для своего игрового движка, на которой делаю редактор для него же.

Читать далее

C++: Коварство и Любовь, или Да что вообще может пойти не так?

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


“C позволяет легко выстрелить себе в ногу. На C++ это сделать сложнее, но ногу оторвёт целиком” — Бьёрн Страуструп, создатель C++.

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

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

Полиморфные аллокаторы C++17

Время на прочтение9 мин
Охват и читатели21K
Уже совсем скоро в OTUS стартует новый поток курса «C++ Developer. Professional». В преддверии старта курса наш эксперт Александр Ключев подготовил интересный материал про полиморфные аллокаторы. Передаем слово Александру:





В данной статье, хотелось бы показать простые примеры работы с компонентами из нэймспэйса pmr и основные идеи лежащие в основе полиморфных аллокаторов.

Основная идея полиморфных аллокаторов, введенных в c++17, — в улучшении стандартных аллокаторов, реализованных на основе статического полиморфизма или иными словами темплейтов. Их гораздо проще использовать, чем стандартные аллокаторы, кроме того, они позволяют сохранять тип контейнера при использовании разных аллокаторов и, следовательно, менять аллокаторы в рантайме.
Читать дальше →

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

Время на прочтение8 мин
Охват и читатели2.8K
PVS-Studio and Awesome header-only C++ libraries

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

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

Почему обзоры кода — это хорошо, но недостаточно

Время на прочтение3 мин
Охват и читатели2.7K
image1.png

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

О работе ПК ч.3: От включения до полной загрузки Windows 10

Время на прочтение20 мин
Охват и читатели133K
Мы продолжаем разбираться как работает ПК на примере клавиатуры и Windows 10. В этой статье поговорим о том как происходит единение софта и железа.

Старт системы


Полностью компьютер выключен когда он отключен от питания и конденсаторы на материнской плате разрядились. До эры смартфонов мобильные телефоны часто глючили и если перезагрузка не лечила проблему, то приходилось доставать батарею и ждать 10 секунд, потому что сбрасывалось программное состояние ОС, в то время как чипы на материнской плате и контроллеры устройств оставались активными сохраняя состояние, драйвера ОС к ним просто реконнектились. 10 секунд — время на разрядку конденсаторов, состояние чипов сбрасывается только при полном отключении.
Если же ПК подключен к розетке или батарее, то он находится в режиме Stand-By, это значит что по шине питания подаётся маленькое напряжения (5В) от которого запитываются некоторые чипы на материнке. Как минимум это системный контроллер, по сути это мини-компьютер запускающий большой компьютер. Получив уведомление о нажатии кнопки Power он просит блок питания/батарею подать больше напряжения и после инициализирует весь чип-сет, в том числе и процессор. Инициализация включает в себя перекачку кода и данных прошивки материнки (BIOS/UEFI) в оперативную память и настройку CPU на её исполнение.
Думать что кнопка Power это рубильник который подаёт электричество на CPU и тот начинает исполнять с заранее известного адреса прошивку BIOS неправильно. Возможно старые компьютеры так и работали. Кнопка включения находится на своей плате, вместе со светодиодами состояний и к материнке она подключается через специальный разъём. На картинке ниже видны контакты для кнопки Power, Reset, а также светодиодов с состоянием Power и чтения жёсткого диска. Нажатие кнопки включения переводится в сигнал на контакты материнки, откуда он достигает системный контроллер.

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

Предпочитайте Rust вместо C/C++ для нового кода

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

2019-02-07


  • Когда использовать Rust
  • Когда не использовать Rust
  • Когда использовать C/C++
  • Ложные причины использования C/C++
  • Приложение: моя история с C/C++
  • Приложение: хор
Читать дальше →

C++20. Coroutines

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

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


image

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

Симуляция подъёмной силы Ньютона методом частиц на CUDA

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

https://www.youtube.com/playlist?list=PLwr8DnSlIMg0KABru36pg4CvbfkhBofAi


Как-то на Хабре мне попалась довольно любопытная статья “Научно-технические мифы, часть 1. Почему летают самолёты?”. Статья довольно подробно описывает, какие проблемы возникают при попытке объяснить подъёмную силу крыльев через закон Бернулли или модель подъёмной силы Ньютона (Newtonian lift). И хотя статья предлагает другие объяснения, мне бы всё же хотелось остановиться на модели Ньютона подробнее. Да, модель Ньютона не полна и имеет допущения, но она даёт более точное и интуитивное описание явлений, чем закон Бернулли.


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


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


Перед тем как мы начнём, я бы хотел сразу обозначить, что это статься не о физике самой модели. Эта статья о GPGPU-программировании. Мы не будем рассматривать физические свойства самой модели, потому что она груба и не подходит для настоящих расчётов. И всё же, эта неточная модель даёт куда более интуитивное описание явления подъёмной силы, чем закон Бернулли.

CRM, мессенджер и штрих-коды: продолжаем рассказывать об учебных проектах Технопарка

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


Мы продолжаем рассказывать о выпускных проектах слушателей наших образовательных проектов. В этом выпуске мы расскажем про три проекта по дисциплине «Разработка на С++» в Технопарке. Предыдущие публикации: один, два, три, четыре.

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

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

Micro Property — минималистичный сериализатор двоичных данных для embedded систем

Время на прочтение9 мин
Охват и читатели2.9K
Micro Property — библиотека для сериализации данных с минимальными накладными расходами. Она разработана для использования в микроконтроллерах и различных встраиваемых устройствах с ограничениями по размеру памяти, которым приходится работать по низкоскоростным линиям связи.

Конечно, я знаю про такие форматы как xml, json, bson, yaml, protobuf, Thrift, ASN.1. Даже нашел экзотический Tree, который сам является убийцей JSON, XML, YAML и иже с ними.

Так почему же они все не подошли? Зачем я был вынужден написать еще один сериализатор?

Уже после публикации статьи в комментариях дали несколько ссылок на пропущенные мной форматы CBOR, UBJSON и MessagePack. А они с большой долей вероятности решают мою задачу без написания велосипеда.
Жаль, что я не смог найти эти спецификации ранее, поэтому добавлю этот абзац для читателей и для собственного напоминания, что не следует торопиться писать код ;-).
Обзоры форматов на Хабре: CBOR, UBJSON

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