Как стать автором
Обновить
173.82

C++ *

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

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

Можно ли доверить компилятору оптимизацию вашего кода?

Уровень сложности Сложный
Время на прочтение 9 мин
Количество просмотров 563
Блог компании Timeweb Cloud C++ *Компиляторы *Rust *
Обзор
Перевод
image

Существует три уровня понимания того, как работает SIMD (ну, по крайней мере, на данный момент я нахожусь на 3-м уровне):

  1. Компиляторы умны! Они автоматически векторизуют весь код!
  2. Компиляторы тупы, автоматическая векторизация хрупка, ее очень легко нарушить несвязанными изменениями в коде. Всегда лучше вручную написать конкретные инструкции SIMD.
  3. Написать SIMD вручную действительно сложно — для каждой архитектуры процессора придется писать разный код. Кроме того, вы, вероятно, понимаете, что компилятор напишет на ассемблере скалярный код лучше вас. Что заставляет вас думать, что вы превзойдете компилятор в SIMD, где еще больше странных инструкций и запретов? Компиляторы — это инструменты. Они могут надежно векторизовать код, если он написан в форме, поддающейся векторизации.

Недавно я перешел со второго уровня на третий, и я заметил, как модель, используемая компилятором, щелкнула у меня в голове. В этом посте я хочу объяснить общую структуру компиляторов, пригодную для оптимизации статических языков, таких как Rust или C++. После этого я применю эту структуру к автоматической векторизации.
Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 2

Новости

Проверка компилятора GCC 13 с помощью PVS-Studio

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 1.9K
Блог компании PVS-Studio C++ *Компиляторы *

После некоторых поисков серьёзного вызова для анализатора PVS-Studio выбор пал на открытую коллекцию компиляторов GCC. Да, это уже не первая по счёту проверка этого проекта. Однако поддерживаемые этой коллекцией языки программирования не стоят на месте, и их постоянное развитие влечёт за собой соответствующее постоянное усложнение кода GCC. Таким образом цель — обнаружить ошибки в коде GCC с помощью анализатора PVS-Studio.

Читать далее
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 4

Почему C++ не устаревает

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 14K
Блог компании Яндекс Практикум Программирование *C++ *Учебный процесс в IT
Мнение

Привет, Хабр! Меня зовут Георгий Осипов. Я работаю в МГУ и компании Яндекс, а также в команде курса «Разработчик С++» Яндекс Практикума. В этой статье я поделюсь своими мыслями о том, почему немолодой язык С++ до сих пор не теряет актуальности.


Кажется, что первое доказательство — новость 2022 года, когда компания Google анонсировала новый язык Carbon. Он должен стать альтернативой C++. Первая версия Carbon выйдет только через 2-3 года, но уже сейчас понятно — если C++ языку ищут замену, значит, её нет.

Читать дальше →
Всего голосов 60: ↑43 и ↓17 +26
Комментарии 291

Собираем и запускаем калькулятор из Windows XP в среде Windows 10 c помощью GCC x64

Уровень сложности Сложный
Время на прочтение 63 мин
Количество просмотров 8.7K
C++ *C *Разработка под Windows *
Туториал

Привет всем.

В данной статье мы немного проанализируем код Windows XP, a также соберем калькулятор c использованием GCC x64 в среде Windows 10. Будут показаны ошибки, с которыми я столкнулся в процессе сборки и подробно расписаны способы их решения. В конце будет продемонстрирован рабочий билд приложения calc.exe.

Всем приятного прочтения!

Читать далее
Всего голосов 84: ↑84 и ↓0 +84
Комментарии 46

Истории

C++ Дайджест №2 (21 августа 2023 – 3 сентября 2023)

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 5.4K
Программирование *C++ *
Дайджест

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

Приятного чтения!

Читать далее
Всего голосов 25: ↑24 и ↓1 +23
Комментарии 0

Базовый набор для решения задач на LeetCode/Codeforces, ч.4 Функциональные объекты C++

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

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

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

Читать далее
Рейтинг 0
Комментарии 13

PVS-Studio vs CodeLite: битва за идеальный код

Уровень сложности Средний
Время на прочтение 16 мин
Количество просмотров 1.9K
Блог компании PVS-Studio Программирование *C++ *

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

Читать далее
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 0

Пять продвинутых техник инициализации в C++: От reserve() до piecewise_construct

Время на прочтение 9 мин
Количество просмотров 6.8K
Блог компании OTUS C++ *
Перевод

От операций с динамическими контейнерами до констант времени компиляции — C++ предлагает много интересных техник (как в этом знаменитом меме :)). В этой статье мы рассмотрим несколько продвинутых методов инициализации: от reserve() и emplace_back для контейнеров, до piecewise_construct и forward_as_tuple для кортежей. Благодаря этим техникам мы можем уменьшить количество временных объектов и более эффективно создавать переменные.

Давайте приступим!

Читать далее
Всего голосов 26: ↑23 и ↓3 +20
Комментарии 5

Запускаем матричный принтер от старого банковского терминала

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 4.5K
Блог компании Timeweb Cloud C++ *Разработка под Windows *Компьютерное железо Старое железо
Туториал
Приветствую всех!

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

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



Итак, в сегодняшней статье поговорим о том, как устроен и работает такой принтер. Разберёмся, как подключить его к обычному компьютеру. Традиционно будет много интересного.
Читать дальше →
Всего голосов 43: ↑43 и ↓0 +43
Комментарии 30

Зачем платить за онлайн-курс, если всё гуглится?

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 4.4K
Программирование *C++ *Учебный процесс в IT Карьера в IT-индустрии

«Зачем платить за онлайн-курс, если всё гуглится?» — подумал я и принялся штудировать Бьёрна Страуструпа "Язык программирования С++". Далее могла бы быть история стремительного успеха, но не всё так просто. Поэтому далее будет история моего "вката в айти", а также мнение по онлайн-курсам в целом и Яндекс Практикум в частности.

Читать далее
Всего голосов 33: ↑2 и ↓31 -29
Комментарии 15

Распространённые паттерны опечаток при программировании

Уровень сложности Простой
Время на прочтение 20 мин
Количество просмотров 9.7K
Блог компании PVS-Studio Java *C++ *C *C# *
Мнение

Распространённые паттерны опечаток при программировании


Есть бесконечное количество способов ошибиться при написании кода. Однако иногда можно заметить явные интересные закономерности, как и где ошибаются программисты. Поговорим о коде, который "притягивает" опечатки.


На чём основаны наблюдения


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


Рассматривая все эти ошибки, я постепенно замечаю различные повторяющиеся паттерны опечаток. За редким исключением они не зависят от языка программирования. По крайней мере, они одновременно свойственны коду, написанному на C, C++, C#, Java. В этой статье я опишу 7 паттернов, которые заметил к настоящему моменту:


  1. Эффект последней строки.
  2. Злополучная функция memset.
  3. Неверные функции сравнения.
  4. Неверные функции копирования.
  5. Ошибки работы с датами и временем.
  6. Несчастливые числа: 0, 1, 2.
  7. Ошибка на единицу (off-by-one error).

Заметность закономерностей в ошибках свидетельствует о том, что они крайне распространены. Полезно знать о них, чтобы избегать написания потенциально опасного кода или более эффективно находить их в процессе обзоров кода. Другим словами, вы узнаете, какой код притягивает ошибки, и будете более внимательно его проверять. Конечно, PVS-Studio способен выявить многие подобные ошибки, но не все. Поэтому дополнительное внимание не повредит.

Читать дальше →
Всего голосов 40: ↑39 и ↓1 +38
Комментарии 23

Smart-contract developer Road Map

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 2.6K
C++ *C# *DevOps *Solidity *
Туториал
Recovery Mode

Прочитав эту статью до конца вы поймете какими навыками вам нужно обладать для того, что бы стать smart-contract разработчиком!

В конце статьи прикреплен Solidity developer roadmap.

Читать далее...
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 4

Быстрый двоичный поиск без ветвления

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 9.4K
Блог компании RUVDS.com Программирование *C++ *Алгоритмы *
Туториал
Перевод

Мои читатели — занятые люди, поэтому сразу перейду к делу. Вот она, самая быстрая обобщённая (и простая) реализация двоичного поиска на C++:

template <class ForwardIt, class T, class Compare>
constexpr ForwardIt sb_lower_bound(
      ForwardIt first, ForwardIt last, const T& value, Compare comp) {
   auto length = last - first;
   while (length > 0) {
      auto rem = length % 2;
      length /= 2;
      if (comp(first[length], value)) {
         first += length + rem;
      }
   }
   return first;
}

Тот же интерфейс функции, что и у std::lower_bound, но вдвое быстрее и короче. «Без ветвления», потому что if компилируется в команду условной передачи, а не в ветвление/условный переход. Ближе к концу статьи мы изучим опции компилятора и даже более быстрые версии полностью без ветвления. Для понимания этой статьи не нужны особые знания в C++. Достаточно понимать, что итераторы (first и last) по сути являются указателями на элементы массива, хотя могут указывать на один элемент дальше, чем последний элемент массива. Можете не обращать внимания на template, class, constexpr и &. Вот если бы существовал быстрый и чистый язык, работающий на уровне железа...1 2
Читать дальше →
Всего голосов 75: ↑75 и ↓0 +75
Комментарии 6

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

CROC Service Partner Day
Дата 7 сентября
Время 10:00 – 18:00
Место Москва
Okkam. О цене и ценности
Дата 12 сентября
Время 12:00 – 19:00
Место Москва
«Стачка» — IT-конференция
Дата 15 – 16 сентября
Время 09:00 – 18:30
Место Ульяновск
Геймтон DatsOrange от DatsTeam
Дата 15 – 16 сентября
Время 17:00 – 20:00
Место Онлайн
Yandex Scale
Дата 25 – 26 сентября
Время 17:00 – 18:00
Место Москва Онлайн
Business&IT; Day: Retail CPG
Дата 28 сентября
Время 09:50 – 14:00
Место Онлайн
XIX конференция разработчиков свободных программ «Базальт СПО»
Дата 29 сентября – 1 октября
Время 10:00 – 19:00
Место Переславль-Залесский Онлайн
Kokoc Hackathon
Дата 29 сентября – 1 октября
Время 19:00 – 21:00
Место Онлайн
PG Boot Camp Russia 2023
Дата 5 октября
Время 10:00 – 17:00
Место Москва Онлайн
Russia Risk Conference 2023 — 19-я конференция по риск-менеджменту
Дата 25 – 26 октября
Время 10:00 – 19:00
Место Москва Онлайн

Книги по C++, которые можно рекомендовать разработчикам в 2023 году

Время на прочтение 4 мин
Количество просмотров 8.6K
Блог компании МТС C++ *Профессиональная литература *Учебный процесс в IT

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

Читать далее
Всего голосов 19: ↑14 и ↓5 +9
Комментарии 39

Базовый набор для решения задач на LeetCode/Codeforces, ч.3 Адаптивные Контейнеры C++

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

Это будет наиболее короткая и понятная статья, на LeetCode довольно много задач, которые гораздо проще и лучше получится решать с использованием обоих этих классов, не уверен что обоих сразу, но по-отдельности получается отлично.

Статья получится очень короткой, если я просто перечислю pop, top, front поэтому добавлю по-небольшому разбору некоторых задач с LeetCode.

Почему адаптивные контейнеры?
Дело в том, что любой из этих классов довольно просто повторить при помощи любого последовательного(VECTOR, LIST, DEQUE). Из этого и термин адаптивный контейнер - он подстраивает под себя некоторый функционал классов контейнеров, что в определенной комбинации решает задачи максимально красиво и быстро.

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 0

Базовый набор для решения задач на LeetCode/Codeforces, ч.2 Ассоциативные Контейнеры C++

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

Начиная разбираться в ассоциативных контейнерах нужно обговорить, что вообще такое ассоциативность - если вы в детстве играли в "Ассоциации", то для вас все почти очевидно, ведь для каждого объекта обговариваемого в периоде игры - нужно найти что-то связанное с этим объектом.

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Комментарии 12

Неопределённое поведение в C/C++ и приёмы против лома

Время на прочтение 16 мин
Количество просмотров 8.7K
C++ *Компиляторы *C *Математика *
Перевод

Некоторое время назад в Интернете ходила статья о неопределённом поведении, просто бесившая коренную аудиторию Rust. Завсегдатаи С и C++ в ответ только бурчали, что кто-то просто не понимает Всех Тонкостей и Нюансов Их Светлейшего Языка. Как обычно, пришло время и мне постараться изо всех сил и вставить мои пять копеек в эту застарелую дискуссию.

Готовьтесь поговорить об Основной Проблеме языков C и C++, а также о Принципе Лома.

Читать далее
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 71

Базовый набор для решения задач на LeetCode/Codeforces, ч.1

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

«Время — это единственная вещь, которую все хотят иметь, но которую нельзя купить или продлить» — Харви Маккей

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

Читать далее
Всего голосов 3: ↑1 и ↓2 -1
Комментарии 11

Как мы за один день наняли много C++ разработчиков: рекомендации МойОфис для нанимающих менеджеров

Время на прочтение 7 мин
Количество просмотров 5.7K
Блог компании МойОфис C++ *Управление персоналом *IT-компании

Уже как минимум пару лет формат быстрого найма сотрудников, или One day offer, набирает популярность в ИТ-компаниях. У него есть неоспоримые плюсы для всех участников: всего за один день работодатель закрывает вакансию (а то и несколько), а кандидат получает ответ (и, возможно, предложение о работе). 17 июня этого года мы провели ряд онлайн-собеседований c C++ разработчиками уровня middle и senior — и в итоге пополнили команды сразу нескольких отделов. В этом посте делимся ценными наблюдениями по итогам проекта и важными инсайтами — если вы нанимающий менеджер, вы точно найдете здесь немало полезного.

Читать далее
Всего голосов 29: ↑27 и ↓2 +25
Комментарии 18

C++ Дайджест №1 (7 августа 2023 – 20 августа 2023)

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 3.6K
Программирование *C++ *
Дайджест

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

Приятного чтения!

Читать далее
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 0

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

Работа

Программист C++
141 вакансия
QT разработчик
14 вакансий