Обновить
128K+

C++ *

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

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

Как перестать писать прошивки для микроконтроллеров. Начинаем жить…

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

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

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

Разрушительные исключения

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

Ещё раз о том, почему плохо бросать исключения в деструкторах


Многие знатоки C++ (например, Герб Саттер) учат нас, что бросать исключения в деструкторах плохо, потому что в деструктор можно попасть во время раскрутки стека при уже выброшенном исключении, и если в этот момент будет выброшено ещё одно исключение, в результате будет вызван std::terminate(). Стандарт языка C++17 (здесь и далее я ссылаюсь на свободно доступную версию драфта N4713) на эту тему сообщает нам следующее:

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

Мысли о Rust 2019

Время на прочтение6 мин
Охват и читатели17K
Коллеги, доброго вечера всем!

Мы с радостью предлагаем вам перевод по-настоящему программной статьи от Рафа Левина, чей титанический труд над развитием языка Rust вызывает уважение и пиетет:



Без ложной скромности и без шапкозакидательства, предметно и увлеченно уважаемый автор откликнулся на призыв сообщества Rust, опубликованный по ссылке в начале этой статьи. Надеемся, получилось интересно и жизнеутверждающе.
Читать дальше →

Проблемы использования функции NtQuerySystemInformation с недокументированными аргументами

Время на прочтение5 мин
Охват и читатели12K
Утро в тот день началось с того, что у нас «сломались if'ы». Это выражение было когда-то придумано одним моим коллегой, который демонстрировал, как у него отладчик при пошаговом проходе по коду заходит в блок if, при том, что условие, которое if проверял, было абсолютно точно равно false. Проблема в тот раз оказалась тривиальной — он использовал релизный оптимизированный билд, а при таком сценарии доверять пошаговой отладке, конечно, нельзя. Но само выражение «сломались if'ы» прижилось и использовалось у нас с тех пор для обозначения ситуации, когда перестало работать что-то настолько фундаментальное, что в это даже с трудом верилось.

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

Итак, что же произошло.
Читать дальше →

История одного эксперимента с Cython и C++ vector

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

Одним тёплым холодным зимним вечером, хотелось согреться в офисе и проверить теорию одного коллеги, что C++ vector мог бы быстрее справиться с задачей, чем CPython list.


В компании мы разрабатываем продукты на базе Django и случилось так, что нужно было обработать один большой массив словарей. Коллега предположил, что реализация на C++ была бы гораздо быстрее, а меня не покидало чувство, что Гвидо и сообщество наверное немного круче нас в Си и возможно уже решили и обошли все подводные камни, реализовав всё гораздо быстрее.


Для проверки теории, я решил написать небольшой тестовый файл, в котором решил прогнать в цикле вставку 1М словарей одинакового содержания в массив и в vector 100 раз подряд.


Результаты хоть и были ожидаемые, но так же и внезапные.

Что же из этого вышло?

Как перестать писать прошивки для микроконтроллеров и начать жить

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

Здравствуйте, меня зовут Евгений, и мне надоело писать прошивки для микроконтроллеров. Как это это случилось и что с этим делать, давайте разберемся.

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

Прикручиваем мультиплеер к мобильной игре «Составь слова из слова» на iOS и Android, написанной на C++

Время на прочтение8 мин
Охват и читатели4.9K
Ранее я уже писал о своем опыте разработки мобильной словесной игры на Android и iOS, которая пользуется определенной популярностью, и я решил прикрутить к ней режим мультиплеера, когда два игрока соревнуются между собой, составляя слова по очереди, как заключительном раунде телепередачи Сергея Супонева «Звездный час».



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

Уязвимости EOS Blockchain на ZeroNights 2018

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

В рамках данной статьи будут рассмотрены несколько реальных уязвимостей в EOS blockchain (одном из конкурентов Ethereum) и то, как они были встроены в конкурс New-Generation Secure Slot Machine на ZeroNights 2018. Если вам интересно познакомиться с тем, как обстоят дела с безопасностью в этой сети blockchain, то welcome под кат.
Читать дальше →

Как Clang компилирует функцию

Время на прочтение6 мин
Охват и читатели13K
Я планировал написать статью о том, как LLVM оптимизирует функцию, но сначала необходимо написать, как Clang транслирует C или C++ в LLVM.

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

Удивительная производительность параллельных алгоритмов C++17. Миф или Реальность?

Время на прочтение8 мин
Охват и читатели24K
Добрый вечер!

От нашего курса «Разработчик C++» предлагаем вам небольшое и интересное исследование про параллельные алгоритмы.

Поехали.

С появлением параллельных алгоритмов в C++17, вы с легкостью можете обновить свой “вычислительный” код и получить выгоду от параллельного выполнения. В этой статье, я хочу рассмотреть STL алгоритм, который естественным образом раскрывает идею независимых вычислений. Можно ли ожидать 10-кратного ускорения при наличии 10-ядерного процессора? А может больше? Или меньше? Поговорим об этом.

Введение в параллельные алгоритмы

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

Проверка проекта LibrePCB с помощью PVS-Studio внутри Docker контейнера

Время на прочтение9 мин
Охват и читатели4.5K
PVS-Studio and Docker Container

Это классическая статья о том, как наша команда проверила открытый проект LibrePCB с помощью статического анализатора кода PVS-Studio. Однако статья интересна тем, что проверка осуществлялась внутри Docker контейнера. Если вы использует контейнеры, то надеемся, что статья продемонстрирует ещё один простой способ встроить анализатор в процесс разработки.
Читать дальше →

Профилирование кода с LLVM

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

Проклятие недетерминизма



Моя первая попытка написать проход LLVM — люблю эти сегфолты

Недавно я столкнулся с интересной задачей — мне понадобился детерминированный и кросплатформенный способ определения времени выполнения кода С++. Под словом «детерминированный» я подразумеваю, что один и тот же код будет выполняться за одно и то же количество единиц времени. Под кроссплатформенностью я понимаю, что один и тот же код под Windows и под Ubuntu будет выполняться за одно и то же количество единиц времени.

Естественно, измерение времени на CPU не удовлетворяет этим условиям. Машинный код меняется в зависимости от архитектуры и операционной системы, и один и тот же код займёт различное количество времени при выполнении. Даже на одной и той же машине, такие факторы, как промахи кэша, будут играть большую роль — достаточную для того, чтобы исказить результаты измерения времени выполнения одного и того же кода. Мне нужно было что-либо более умное…
Читать дальше →

Усложняя стандартный пример

Время на прочтение5 мин
Охват и читатели19K
Стандартная библиотека С++ предлагает не только набор классов, но также определяет способ написания программ. В рамках данной статьи рассматриваются общие требования к реализации программ при помощи STL.

Рассмотрим следующую задачу:
Считать из файла input.txt массив целых чисел, разделенных пробельными символами. Отсортировать их и записать в файл output.txt

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

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

Иголка в стоге сессий, или Байт-код регулярных выражений

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


17 млрд событий, 60 млн пользовательских сессий и огромное количество виртуальных свиданий происходят в Badoo ежедневно. Каждое событие аккуратно сохраняется в реляционные базы данных для последующего анализа на SQL и не только.


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


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


Виртуальная машина, байт-код и компилятор прилагаются бесплатно!

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

И снова в космос: как единорог Stellarium посещал

Время на прочтение13 мин
Охват и читатели6.5K
За все время своего существования люди приложили колоссальное количество усилий, чтобы изучить практически всю площадь звездного неба. На сегодняшний день мы рассмотрели сотни тысяч астероидов, комет, туманностей и звезд, галактик и планет. Чтобы увидеть всю эту красоту самостоятельно, не обязательно выходить из дома и покупать себе телескоп. Можно установить на компьютер Stellarium — виртуальный планетарий, и посмотреть на ночное небо, с комфортом лежа на диване… Но с комфортом ли? Чтобы выяснить ответ на этот вопрос, проверим Stellarium на наличие ошибок в компьютерном коде.


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

Внутренняя и внешняя линковка в C++

Время на прочтение9 мин
Охват и читатели82K
Всем добрый день!

Представляем вам перевод интересной статьи, который подготовили для вас рамках курса «Разработчик C++». Надеемся, что она будет полезна и интересна для вас, как и нашим слушателям.

Поехали.

Сталкивались ли вы когда-нибудь с терминами внутренняя и внешняя связь? Хотите узнать, для чего используется ключевое слово extern, или как объявление чего-то static влияет на глобальную область? Тогда эта статья для вас.

В двух словах

В единицу трансляции включены файл реализации (.c/.cpp) и все его заголовочные файлы (.h/.hpp). Если внутри единицы трансляции у объекта или функции есть внутреннее связывание, то этот символ виден компоновщику только внутри этой единицы трансляции. Если же у объекта или функции есть внешнее связывание, то компоновщик сможет видеть его при обработке других единиц трансляции. Использование ключевого слова static в глобальном пространстве имен дает символу внутреннее связывание. Ключевое слово extern дает внешнее связывание.
Компилятор по умолчанию дает символам следующие связывания:

  • Non-const глобальные переменные — внешнее связывание;
  • Const глобальные переменные — внутреннее связывание;
  • Функции — внешнее связывание.


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

PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++

Время на прочтение5 мин
Охват и читатели6.7K
PVS-Studio, MISRA C, MISRA C++

Начиная с версии 6.27 статический анализатор кода PVS-Studio может классифицировать свои предупреждения согласно стандартам MISRA C и MISRA C++. Благодаря поддержке этих стандартов анализатор стало возможным эффективно использовать для улучшения безопасности, переносимости и надежности программ для встраиваемых систем.
Читать дальше →

У Интернета могут быть серьёзные проблемы из-за языков, подобных C и C++, которые способствуют появлению уязвимостей

Время на прочтение4 мин
Охват и читатели20K
Привет, Хабр! Представляю вашему вниманию перевод статьи "Internet aurait de sérieux problèmes à cause de langages comme C et C++ favorisant la survenue de failles" (фр. язык).

Но мало кого из разработчиков это волнует


Один баг затрагивает iPhone, другой – Windows, а третий – сервера, работающие на Linux. На первый взгляд эти баги не имеют ничего общего, так как касаются разных платформ: Android, iOS, macOS, Windows, Linux. Однако, на самом деле, всё иначе, по мнению Алекса Гейнора, инженера по безопасности программного обеспечения в Mozilla, ранее работавшего в USDS (United States Digital Service).

[1]
Подробнее — https://www.usds.gov, здесь и далее прим. переводчика.

Во время третьего «Weakest Link», ежегодного мероприятия, организованного Motherboard Vice,

[2]
Подробнее — https://motherboard.vice.com/en_us

на тему компьютерного взлома и кибербезопасности в будущем, Алекс Гейнор поднял серьезную проблему, которая, по его мнению, может угрожать Интернету, но, как ни парадоксально, оставляет разработчиков совершенно равнодушными.

Гейнор объяснил, что три ранее упомянутые ошибки существуют, потому что программное обеспечение, которое они затрагивают на разных платформах, было написано с помощью языков программирования, имеющих неприятную тенденцию способствовать возникновению ошибок типа «memory unsafety», разрешая доступ к невыделенным областям памяти.

[3]
Скорее всего, имелось в виду, что обращение к 6 элементу массива, состоящего из 5 элементов, допустимо, хотя в других языках программирования, более «безопасных», как минимум будет выведено сообщение об ошибке.

Эта категория ошибок может привести к багам и уязвимостям безопасности во время получения доступа к памяти.
Читать дальше →

Краткий гид по обучению С++: что, когда и на чём создавать

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

Недавно у нас на GeekBrains стартовал свежий курс "Профессия: разработчик C++". Программа позволит всего за 9 месяцев освоить этот непростой язык и стать специалистом уровня junior. А это непростая задача. К примеру, в школах и ВУЗах на изучение С++ уходит минимум 2 года, чаще 4-5. Чтобы показать из чего состоит этот нелегкий путь, мы схематично описали для вас основные этапы.
Читать дальше →

Три вида утечек памяти

Время на прочтение7 мин
Охват и читатели14K
Здравствуйте, коллеги.

Наши долгие поиски неустаревающих бестселлеров по оптимизации кода пока дают лишь первые результаты, но мы готовы вас порадовать, что буквально только что закончен перевод легендарной книги Бена Уотсона "Writing High Performance .NET Code". В магазинах — ориентировочно в апреле, следите за рекламой.

А сегодня предлагаем вам почитать сугубо практическую статью о наиболее насущных видах утечек оперативной памяти, которую написал Нельсон Ильхейдж (Nelson Elhage) из компании Stripe.
Читать дальше →