В основу статьи легли мои собственные выработанные нелегким путем знания о принципах работы и правильном использовании целых чисел в C/C++. Помимо самих правил, я решил привести список распространенных заблуждений и сделать небольшое сравнение системы целочисленных типов в нескольких передовых языках. Все изложение строилось вокруг баланса между краткостью и полноценностью, чтобы не усложнять восприятие и при этом отчетливо передать важные детали.Читать полностью »
Рубрика «c++» - 23
Свод правил по работе с целыми числами в C-C++
2021-04-09 в 9:00, admin, рубрики: c++, char, long, ruvds_перевод, short, Блог компании RUVDS.com, Программирование, типы данных, целые числаПример, как в PVS-Studio появляются новые диагностики
2021-03-20 в 15:10, admin, рубрики: C, c++, CovidSim, MISRA, MISRA C, pvs-studio, баги, Блог компании PVS-Studio, информационная безопасность, качество кода, медицинское по, обзор кода, ошибки в коде, ошибки в программе, Программирование, Совершенный код, тестирование по
Пользователи иногда спрашивают, как появляются новые диагностики в статическом анализаторе PVS-Studio. Мы отвечаем, что черпаем вдохновение из разнообразнейших источников: книг, стандартов кодирования, собственных ошибок, писем наших пользователей и так далее. Сегодня мы придумали новую интересную диагностику и решили рассказать историю, как это произошло.
Прочти меня: код, который не выбесит соседа
2021-03-16 в 8:44, admin, рубрики: c++, codestyle, python, Блог компании Яндекс, документация, документация кода, идеальный код, Лайфхаки для гиков, Программирование, С++, Совершенный код, читаемость, читаемость кода, читаемый кодСегодня поговорим о том, как писать код, чтобы он не злил окружающих и не раздражал вас спустя годы работы, когда вы снова попытаетесь его прочесть.
Я расскажу о подходах, которые мы используем в Яндекс.Такси для написания читаемого кода на C++, Python, JavaScript и других языках.
Читать полностью »
Как подключить содержимое любых файлов для использования в коде C – C++
2021-03-07 в 22:29, admin, рубрики: arduino, avr, C, c/c++, c++, esp8266, GNU, httpd, lwip, stm32, toolchain, отладка, Программирование, Совершенный кодПривет, Хабровчане!
Это моя первая статья и у меня есть чем поделиться. Возможно мой велосипед не нов и этим способом пользуется каждый, но когда-то давно искал решения, с ходу найти не получилось.
О чем речь?
Задача состояла в подключении файлов: HTML, JS, CSS; без специальной подготовки. Так же неудобно подключать бинарные файлы (например картинки) конвертируя их в HEX. Так как не хотелось конвертировать в HEX или разделять на строки, искал способ подключения файла в адресное пространство программы.
Как обычно это выглядит
Пример, c разделением строк:
Читать полностью »
Лайфхак: как спарсить гигабайт double-ов в секунду
2021-02-16 в 9:30, admin, рубрики: c++, библиотека, Блог компании RUVDS.com, Лайфхаки для гиков, парсеры, Программирование
Как в коде на C++ прочитать значение double из строки?
std::stringstream in(mystring);
while(in >> x) {
sum += x;
}
На Intel Skylake с компилятором GCC 8.3, такой код парсит 50 МБ/с. Жёсткие диски запросто обеспечивают последовательное чтение со скоростью в несколько ГБ/с, так что вне всякого сомнения, нас ограничивает не скорость чтения с диска, а именно скорость парсинга. Как его ускорить?
Первое, что напрашивается – отказаться от удобств, предоставляемых потоками в C++, и вызывать strtod(3) напрямую:
do {
number = strtod(s, &end);
if(end == s) break;
sum += number;
s = end;
} while (s < theend);
Скорость вырастает до 90 МБ/с; профайлинг показывает, что при чтении из потока выполняется ~1600 инструкций на каждое читаемое число, при использовании strtod – ~1100 инструкций на число. Стандартные библиотеки Си и C++ можно оправдать требованиями универсальности и переносимости; но если ограничиться парсингом только double и только на x64, то можно написать намного более эффективный код: хватит 280 инструкций на число.
Читать полностью »
C и C++: межъязыковые интерфейсы
2021-02-11 в 9:17, admin, рубрики: C, c++, Блог компании RUVDS.com, Программирование, разработкаКак известно, C и C++ — это родственные языки между которыми есть много общего. Но их пути, с годами, расходятся всё сильнее. В общих чертах дело обстоит так: код, написанный на одном из этих языков, не может быть скомпилирован под видом кода, написанного на другом. Этому мешает множество больших и маленьких различий между языками. Причём, речь идёт не только о синтаксических различиях. Некоторые общие синтаксические конструкции могут иметь разную семантику. Поэтому обычно нет никакого смысла в том, чтобы компилировать код, написанный на C, с помощью C++-компилятора. Не стоит доверять тем, кто утверждает обратное.
Правда, есть одна сфера, где обычно наблюдается согласие между C и C++. Это — ABI (Application Binary Interface, двоичный интерфейс приложений). Структуры данных и функции одного языка могут быть, в той или иной мере, использованы в другом языке. C и C++, кроме того, достаточно сильно пересекаются в области спецификаций интерфейсов, вследствие чего один и тот же заголовочный файл можно использовать из кода, написанного на обоих языках.
В этом материале я постараюсь собрать то общее, что есть у C и C++ и предложу некоторые рекомендации, которые позволят достаточно хорошо сочетать эти языки. Это, правда, будет всего лишь рассказ, иллюстрирующий точку зрения C-программиста, который хочет создавать интерфейсы для C++.
Читать полностью »
Сага о типизации и тайпчекинге для JavaScript
2021-02-09 в 8:16, admin, рубрики: c++, Cpp, javascript, kotlin, TypeScript, Блог компании Яндекс, команда яндекс.маркета, типизацияПривет! Хочу поделиться своими мыслями по, казалось бы, простой теме — типизации. В частности, поговорить о тайпчекинге в JavaScript.
Часто люди воспринимают типизацию как эдакую серебряную пулю, которая защищает от всех проблем. Но это не так, часто ожидания от типизации неоправданны, а простота таких инструментов, как TypeScript, обманчива и слишком переоценена.
Это не типичная статья из серии «Изучаем TypeScript», а, как мне кажется, фундаментальная история. Мы начнем с основ, поговорим о данных, о способе их хранения, а затем перейдем к типизации и посмотрим, как она влияет на работу программы.
Threadripper 3990X: компилируем 1 миллиард строк C++ на 64 ядрах
2021-02-05 в 10:00, admin, рубрики: 3990x, 5950x, amd, c++, ryzen 9, Блог компании VDSina.ru, высокая производительность, Компиляторы, компиляция, Компьютерное железо, Программирование
RAD Studio состоит из Delphi и C++Builder. Компилятор Object Pascal в Delphi является однопроходным компилятором, и сам компилятор не является параллельным, однако при компиляции нескольких проектов параллельно он оказался способен скомпилировать 1 миллиард строк кода Object Pascal за 5 минут на машине с 16-ядерным AMD Ryzen 9 5950x. Я хотел выяснить, возможно ли сделать что-то подобное для C++. Этот пост является частью серии статей, в которой мы исследуем значительный прирост производительности, которого можно достичь на самых быстрых на начало 2021 года процессорах. Сколько это — 1 миллиард строк кода? Взгляните сюда.
Читать полностью »