Обновить
128K+

C++ *

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

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

Как не надо разрабатывать звуковые движки

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


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

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

Сравнение времени выполнения алгоритма на CPU и GPU

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

Использование CUDA Runtime API для вычислений. Сравнение CPU и GPU вычислений


В данной статье я решил провести сравнение выполнения алгоритма написанного на C++ на центральном и графическом процессоре(выполнение вычислений с помощью Nvidia CUDA Runtime API на поддерживаемом GPU Nvidia). CUDA API позволяет выполнение некоторых вычислений на графическом процессоре. Файл c++ использующий cuda, будет иметь расширение .cu.
Схема работы алгоритма приведена ниже.



Задача алгоритма состоит в том, что найти возможные числа X, при возведении которых в степень degree_of, будет получатся исходное число max_number. Сразу отмечу, что все числа которые будут передаваться GPU, будут хранится в массивах. Алгоритм, выполняемый каждым потоком, имеет приблизительно следующий вид:
Читать дальше →

Готовим C++. Система сборки Bake

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

Наверное, большинство из вас согласится, что на сегодняшний день наибольшую популярность среди систем сборки для проектов на C/C++ имеет CMake. Каково же было мое удивление увидеть в проекте на новой работе собственную систему сборки - Bake.

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

Bake - это кросс-платформенная система сборки для проектов написанных на С/С++, нацеленная в первую очередь на встраиваемые системы. Bake написан на Ruby, с открытым исходным кодом, который по-прежнему поддерживается (в разработке с 2012 г.)

Читать далее

Работа с памятью в Tarantool: Small — Specialized Memory ALLocators

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


Tarantool — это персистентная NoSQL СУБД в памяти с хранимыми процедурами на Lua. В него встроен SQLite и дисковый движок (Vinyl). Также для Tarantool написано очень много расширений, поэтому многие считают его «сервером приложений». Здесь есть индексы разных типов, а в одном спейсе кроме первичного индекса может быть множество вторичных. Также в Tarantool есть один transaction thread, который выполняет все транзакции в памяти, есть сетевой thread и WAL thread.

Как же устроена работа с памятью в этой СУБД?
Читать дальше →

Бьярне Страуструп о контроле над языком, удалении старых функций, заимствованиях у Rust и многом другом

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

Этим летом на онлайн-конференции C++ Russia побывал самый почетный гость, какой только может быть на мероприятии по C++: создатель этого языка Бьярне Страуструп. Мы поговорили с ним о контроле над языком, нововведениях, удалении старых функций, о том, почему у языка нет четкой экосистемы, и как так получилось, что у С++ нет стандартной сетевой библиотеки.


А поскольку сообщество C++ вечно обсуждает Rust, не обошлось и без вопроса о заимствованиях между этими языками.



Бьярне не нуждается в представлении, но у него столько активностей и заслуг, что попробуем перечислить:


  • написал множество публикаций, в том числе книги «Язык программирования С++» и «Программирование: Принципы и практика использования C++»
  • работает управляющим директором в отделе технологий компании «Морган Стенли» в Нью-Йорке
  • преподает в Колумбийском университете
  • принимает активное участие в работе комитета по стандартизации C++
  • состоит в Национальной академии инженерии США, IEEE, Ассоциации по вычислительной технике. Исследует программирование в области распределенных вычислений, инструменты развития ПО и языки программирования.
  • магистр и заслуженный профессор Орхусского университета и доктор по направлению «Информатика» Кембриджского университета, почетный член научного сообщества Колледжа Черчилля, заслуженный профессор Санкт-Петербургского ИТМО

Вопросы ему задавали Сергей Платонов (С++ программист, организатор С++ Siberia) и Сергей Федоров (руководитель разработки бэкенда Яндекс.Лавки). Под катом — перевод, а также видеозапись интервью для тех, кто хочет послушать на английском.

Какой тип числа у Number в JS?

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

Если вы изучали языки со строгой типизацией, то должны понимать, что определённое значение должно храниться в памяти с заранее выделенным для неё количеством байт. Например, для числа int выделяется 4 байта, что равняется 32 битам и может содержать в себе 2³² значений, это значит мы можем выразить в десятичной системе исчисления от -2 147 483 647 до 2 147 483 647. Какой же тип числа используется в JS?

Читать далее

Проверка Clang 11 с помощью PVS-Studio

Время на прочтение11 мин
Охват и читатели4.5K
PVS-Studio: Всё ещё достоин!

Время от времени нам приходится писать статьи о проверке очередной версии какого-то компилятора. Это неинтересно. Однако, как показывает практика, если этого долго не делать, люди начинают сомневаться, достоин ли анализатор PVS-Studio звания хорошего ловца багов и потенциальных уязвимостей. Возможно, новый компилятор уже умеет это делать? Да, компиляторы не стоят на месте. Однако развивается и PVS-Studio, вновь и вновь демонстрируя возможности находить ошибки даже в коде таких высококачественных проектов, как компиляторы.
Читать дальше →

Валидация данных в C++ с использованием библиотеки cpp-validator

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


Казалось бы, валидация данных — это одна из базовых задач в программировании, которая встретится и в начале изучения языка вместе с "Hello world!", и в том или ином виде будет присутствовать в множестве зрелых проектов. Тем не менее, Google до сих пор выдает ноль релевантных результатов при попытке найти универсальную библиотеку валидации данных с открытым исходным кодом на C++.

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

Vulkan. Руководство разработчика. Краткий обзор

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


Я работаю техническим переводчиком ижевской IT-компании CG Tribe, которая предложила мне внести свой вклад в сообщество и начать публиковать переводы интересных статей и руководств.

Здесь я буду публиковать перевод руководства к Vulkan API. Ссылка на источник — vulkan-tutorial.com. Поскольку переводом этого же руководства занимается еще один пользователь Хабра — kiwhy, мы договорились разделить уроки между собой. В своих публикациях я буду давать ссылки на главы, переведенные kiwhy.

Содержание
Читать дальше →

Наследование реализации в С++. Реальная история

Время на прочтение9 мин
Охват и читатели8.4K
Привет, Хабр!

В поисках вдохновения, чем бы пополнить портфель издательства на тему С++, мы набрели на возникший словно из ниоткуда блог Артура О'Дуайера, кстати, уже написавшего одну книгу по C++. Сегодняшняя публикация посвящена теме чистого кода. Надеемся, что вам будут интересны как сам кейс, так и автор.
Читать дальше →

Герб Саттер о будущем С++, работе в комитете, фонде C++ Foundation и синтаксическом сахаре

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

Герба Саттера (Herb Sutter) знает любой программист, пишущий на C++. Он автор книг, председатель комитета по стандартизации C++, а также архитектор языка программирования в Microsoft.



На C++ Russia 2020 Moscow Герб ответил на вопросы сообщества, заданные Анастасией Казаковой из JetBrains и Сергеем Федоровым из Яндекс.Лавки и поделился своими мыслями о С++20, стандартной библиотеке, концептах, синтаксическом сахаре и не только.


Мы перевели это интервью и теперь хотим поделиться с вами. Если хочется послушать интервью на английском — под катом есть также видеозапись.

Проверка коллекции header-only C++ библиотек (awesome-hpp)

Время на прочтение17 мин
Охват и читатели5.7K
PVS-Studio и Awesome hpp

Волею судьбы мы проверили большинство библиотек, входящих в коллекцию под названием "Awesome hpp". Это небольшие проекты на языке C++, состоящие только из заголовочных файлов. Надеемся, найденные ошибки помогут сделать эти библиотеки немного лучше. Также мы будем рады, если их авторы начнут бесплатно использовать анализатор PVS-Studio на регулярной основе.
Читать дальше →

Исключительно быстрая валидация UTF-8

Время на прочтение4 мин
Охват и читатели9.9K
Текстовая строка — один из самых распространённых «типов данных» в программировании. Когда программисты думают о строке, то представляют список или массив символов. Это «достаточно хорошее» приближение, но реальность сложнее.

Символы должны быть каким-то образом закодированы в биты. Большинство строк в интернете, включая этот пост на Хабре, закодированы в UTF-8. Формат UTF-8 представляет «символы» в одном, двух, трёх или четырёх байтах. Это обобщение для стандарта ASCII, использующего только один байт на символ. То есть строка ASCII также является строкой UTF-8.

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

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

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

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


Это вторая часть расшифровки доклада Ивана Углянского (dbg_nsk) с JPoint 2020, посвященного связи Java с нативным кодом. В прошлой части мы поговорили про традиционный способ связи — через Java Native Interface (JNI), рассмотрели специфичные ему проблемы и оценили производительность. Картина получилась удручающей, поэтому давайте разбираться, чем можно заменить JNI?

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

Amnesia: The Dark Descent или как забыть поправить копипасту

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

В преддверии выхода игры "Amnesia: Rebirth" издательство "Fractional Games" выложило в открытый доступ исходный код легендарной "Amnesia: The Dark Descent" и её продолжения "Amnesia: A Machine For Pigs". Почему бы и не посмотреть с помощью инструмента статического анализа, насколько страшные ошибки скрывает в себе нутро этих культовых хоррор-игр?
Читать дальше →

Интереснейшее влияние Cyclone

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

Оглавление:


  • Cyclone
  • C++, владение и псевдонимы
  • Rust
  • Midori’s M#
  • Pony
  • Cone
  • Резюме

В 2001 году Джим Тревор (AT&T Research) и Грег Моррисетт (Cornell) запустили совместный проект по разработке безопасного диалекта языка программирования C — как развитие более ранних работ над Типизированным Ассемблером. После пяти лет напряженной работы и нескольких опубликованных научных работ, команда (в том числе Дэн Гроссман, Майкл Хикс, Ник Свами и другие) выпустила Cyclone 1.0. А затем разработчики занялись другими делами.

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

Сравнение встраиваемых ЯП по размеру в исполняемом файле

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

В рамках одного из моих SDK-проектов нам понадобилось добавить скриптование, которое бы оказало наименьший эффект на размер конечного бинарного файла, но при этом предоставляло хорошую фунциональность. Это дало старт проекту, который описан в этой статье. Прошу заметить, что т.к. в SDK у нас есть определенные требования, они частично перенеслись на язык скриптования, поэтому в проекте не участвовали некоторые достаточно известные встраиваемые ЯП (но Lua включен для сравнения).


Сайт проекта доступен по ссылке. Скажу сразу, что на данный момент для меня лично победителями являются Chibi-Scheme и Wasm3. Подробности для заинтересовавшихся под катом.

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

Анализ кода проекта DeepSpeech или почему не стоит писать в namespace std

Время на прочтение14 мин
Охват и читатели4.5K
DeepSpeech – это открытый и свободно распространяемый движок распознавания речи, разрабатываемый компанией Mozilla. Движок имеет довольно высокую производительность и хорошие отзывы пользователей, и это делает код проекта интересной мишенью для проверки. Данная статья посвящена разбору ошибок, найденных в C++-коде проекта DeepSpeech.

image1.png

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

Использование IPv6 в Advanced Direct Connect

Время на прочтение4 мин
Охват и читатели2.5K
Наблюдать за развитием файлообменной сети интересно, но ещё интереснее участвовать в нём.

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

С ADC хабами иначе. Структура этого протокола предполагает расширяемость. Хочешь новую фичу? Ну что ж – предлагай, продвигай, реализуй, внедряй, пользуйся.
Читать дальше →

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

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

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