Как стать автором
Обновить
69.91
Рейтинг

C++ *

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

Сначала показывать
  • Новые
  • Лучшие
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

Headless удаленный рабочий стол за NAT для разработчиков и бесплатно (часть 2, примеры)

C++*Системное программирование*Разработка под Windows*
Recovery mode

Heredes — библиотека для разработчиков


Heredes — библиотека для облегчения решения ряда конкретных задач, связанных с прямым обменом данных в сети без использования ipv6.


Из встроенных возможностей можно выделить:

  • облегченная установка соединения между двумя ПК не зависимо от того есть ли у них «белые» адреса или они за NAT;
  • гарантированная (с подтверждением) прямая передача файлов с одного ПК на другой;
  • реалтайм аудиосвязь между ПК за NAT;
  • реалтайм демонстрация экрана ПК за NAT;
  • проброс мыши и клавиатуры между ПК;
  • прямая передача произвольных пользовательских данных между ПК за NAT;
  • запись звука с удаленного ПК и сохранение скрина с удаленного монитора на локальной машине.

Тема пробоя NAT, на самом деле, не нова. Но она требует от разработчика определенных навыков, наличие STUN сервера, а лучше двух, и времени для реализации.

Читать дальше →
Всего голосов 1: ↑1 и ↓0+1
Просмотры1.7K
Комментарии 4

Новости

Показать еще

История платформы Highload.Fun для соревнований в оптимизации кода

Высокая производительность*Ненормальное программирование*C++*Go*Rust*

Привет Хабр! Сегодня я хочу рассказать о платформе, где люди соревнуются в том, кто больше сможет сэкономить тактов CPU для решения задач. Её история началась весной 2021 года, после очередного HighLoad Cup'а от Mail.ru. Мне очень нравится этот конкурс, но, к сожалению, он проходит довольно редко (2017, 2018, 2021 года) и наблюдается тренд ухода от оптимизации на уровне операционной системы и железа к массовости, чтобы в лидерах были решения не только на C/C++, но и на более медленных языках программирования. В 2017 году нужно было сделать HTTP сервер, реализующий простую бизнес логику, лидеры писали свои решения с использованием низкоуровневых вызовов функций ядра и только вызов функции epoll_wait со временем ожидания -1, вместо 0, не позволило мне подняться в TOP-6 с 9 места. Если интересны технические детали, то можно почитать эту статью. В 2021 году нужно было обращаться к серверу, в котором были искусственные ограничения и нужно было разобраться в них, а не выжать из железа всё возможное. После конкурса был созвон, на котором участники давали обратную связь, по итогам которого стало понятно, что есть небольшое количество людей, которым интересна именно низкоуровневая оптимизация, а не только улучшение алгоритмов на уровне Big O. Так и родилась идея этой платформы. Под катом история и устройство платформы, а также набитые шишки.

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

30 лет ядру Linux: поздравление от PVS-Studio

Блог компании PVS-StudioOpen source*C++*C*Разработка под Linux*

25 августа 2021 года ядру Linux исполняется 30 лет. За это время ядро пережило множество изменений, так же, как и мы. Сегодня это огромный проект, работающий на миллионах различных устройств. Предыдущую проверку мы делали 5 лет назад, поэтому не можем пропустить такое событие и не заглянуть в код этого эпического проекта.

Читать далее
Всего голосов 28: ↑25 и ↓3+22
Просмотры5.1K
Комментарии 8

Как можно оптимизировать dot-product и не только. Доклад Яндекса

Блог компании ЯндексВысокая производительность*Совершенный код*C++*Серверная оптимизация*
Разработчик инфраструктуры качества поиска Яндекса Ильнур Хузиев ilnurKh взял простую задачу — скалярное произведение двух векторов — и попробовал выжать все соки производительности кода. Из доклада вы узнаете, как использовать возможности процессора, настройки компилятора (и даже попробовать превзойти его), какой была бы правильная постановка задачи, как выбирать приоритеты и архитектуру. Да, вопрос выбора абстракций может встать даже на примере настолько простой задачи.

— Сегодня мы рассмотрим достаточно простую функцию — скалярное произведение двух векторов, и попробуем провести различные оптимизации. Надеюсь, что приёмы, которые мы рассмотрим, будут применены не только в этой задаче, но и в других.
Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Просмотры1.5K
Комментарии 1

Имплементация простых фьючерсов с помощью корутин

Блог компании OTUSПрограммирование*C++*
Перевод

Вместо return в корутине используется co_return, возвращающий результат. В этой заметке я хочу реализовать простую корутину с использованием co_return.

Читать далее
Всего голосов 7: ↑3 и ↓4-1
Просмотры1.9K
Комментарии 2

Double or Nothing

Занимательные задачкиC++*C*
Из песочницы
Перевод

Фотография Esteban Lopez с Unsplash.com

Если вы выбрали C++ в качестве языка программирования, то учить его придётся всю жизнь. Смиритесь. Или выбирайте другой язык.

Чего только стоят новые стандарты, появляющиеся каждые 3 года. И каждый раз с какими-то полезными нововведениями в синтаксисе! Как им только это удаётся?

Есть разные способы совершенствоваться в С++. Кто-то читает Страуструпа от корки до корки, а потом почитывает стандарты. Кто-то ничего не читает и программирует по наитию - тупиковый путь, на мой взгляд.

Мне же нравится читать крупицы мудрости, бережно сформулированные для понимания простых смертных каким-нибудь гуру программирования.

Одна из моих любимых таких вещей - Guru of the Week (GotW) Херба Саттера.

Написано остроумно. И сколько пользы для программистки! Некоторые статьи уже морально устарели: кому нужен auto_ptr в наши дни? Но большинство ценно и сегодня.

Приведу здесь перевод выпуска №67 "Double or Nothing" от 29 февраля 2000 года. Моё любимое место — про тепловую смерть конечно ​

"Сложность 4/10

Нет. Этот выпуск не об азартных играх. Он, впрочем, о разных видах "float" так сказать, и даёт вам возможность проверить навыки касающиеся базовых операций над числами с плавающей точкой в C и C++.

Проблема

Вопрос Йуного Гуру (JG)

1) В чём разница между "float" и "double"?

Вопрос Гуру

2) Допустим следующая программа выполняется за 1 секунду, что неудивительно для современного настольного компьютера:

int main() {

double x = 1e8;

while (x > 0) { --x; }

return 0;

}

Как долго по-вашему она будет выполняться, если заменить "double" на "float"? Почему?

Читать далее
Всего голосов 16: ↑12 и ↓4+8
Просмотры8.2K
Комментарии 31

Новости из жизни Haiku за июль-август 2021

Open source*C++*Qt*Софт

Здравствуйте, дорогие друзья.

Исторически сложилось, что изначально сообщество BeOS/Haiku обитало на qube.ru и Jabber-канале. Но, со временем оно перебралось в телеграмм канал и vk-сообщество, где участники сообщества, кто есть в VK, собирают и обсуждают новости проекта.

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

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Просмотры3K
Комментарии 11

Vulkan. Руководство разработчика. Создание вершинного буфера

Программирование*C++*Работа с 3D-графикой*Разработка игр*CGI (графика)*
Перевод
Tutorial


Я работаю переводчиком в ижевской IT-компании CG Tribe и занимаюсь переводом Vulkan Tutorial на русский язык. Оригинал тьюториала можно найти здесь.

В своей прошлой публикации я начала перевод раздела Vertex buffers, и сегодня хочу представить перевод главы, посвященной созданию буфера — «Vertex buffer creation».

Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Просмотры1.3K
Комментарии 0

Пишем дизассемблер виртуальной машины из игры Clock Tower (PS1/PC) для IDA Pro

Программирование*C++*Разработка игр*C*Реверс-инжиниринг*
Tutorial

Всем привет. Тут такое дело: ещё одна моя реверсерская мечта сбылась - я написал процессорный модуль для IDA Pro с нуля, за два дня! Если вы когда-то тоже хотели написать свой модуль, но боялись начать - думаю, моя статья сможет помочь.

В качестве кода, который требуется дизасемблировать, будет выступать код виртуальной машины из очень крутого хоррора, который выходил сначала на SNES, потом на PS1, PC и Wonderswan - "Clock Tower - The First Fear". В игре имеется 9 концовок (sic!), атмосфера гнетущая, а в качестве главного злодея выступает "Scissorman" (человек с руками-ножницами). Заинтересовал? Тогда добро пожаловать...

Читать далее
Всего голосов 20: ↑20 и ↓0+20
Просмотры3.4K
Комментарии 5

C++ zero-cost abstractions на примере хеш-таблиц в ClickHouse. Доклад Яндекса

Блог компании ЯндексВысокая производительность*Open source*C++*Администрирование баз данных*
Хеш-таблицы — это королевы структур данных. Нигде не сломано так много копий, как на оптимизации хеш-таблиц. В докладе я рассказал ещё об одной хеш-таблице, которая используется в ClickHouse. Вы увидите, что zero-cost abstractions в современном С++ оправдывают себя и как с помощью небольших трюков получить разнообразные структуры данных из общей кодовой базы. На основе общих строительных блоков можно построить быстроочищаемую хеш-таблицу, несколько видов LRU-кешей, lookup-таблицы без хешей, хеш-таблицы для строк и т. п. Я показал, как получить максимальную производительность на конкретных сценариях и не ошибиться при её тестировании. В моём докладе — самая мякотка низкоуровневых оптимизаций. В общем, то, что мы любим.

— Для начала мы обсудим, зачем нужны хеш-таблицы, где их можно использовать в базах данных и как сделать их оптимальными. Затем посмотрим бенчмарки различных хеш-таблиц в интернете и разбёремся, как делать их правильно. В конце посмотрим на C++-обертку над идеальной хеш-таблицей в ClickHouse.
Читать дальше →
Всего голосов 35: ↑32 и ↓3+29
Просмотры5K
Комментарии 10

PVS-Studio 7.14: межмодульный анализ в С++ и плагин для JetBrains CLion

Блог компании PVS-StudioC++*

0854_Release_714_ru/image2.png


Помимо увеличения количества диагностик с каждым новым релизом анализатор PVS-Studio развивается и в инфраструктурном плане. В данном случае это плагин для среды разработки JetBrains CLion, межмодульный анализ С++ проектов, ускорение работы ядра C# анализатора.

Читать дальше →
Всего голосов 18: ↑15 и ↓3+12
Просмотры1.2K
Комментарии 3

Динамическая JIT компиляция С/С++ в LLVM с помощью Clang

Блог компании TimewebПрограммирование*C++*Компиляторы*C*
Tutorial


При создании компилятора для собственного языка программирования я сделал его как транспайлер в исходный код на С++, вот только реализация сильно подкачала. Сначала приходится генерировать динамическую библиотеку с помощью вызова gcc, который и сам по себе не очень быстрый, так еще его может и не быть на целевой машине, особенно на другой платформе (например Windows). Конечно, для первых экспериментов и такой реализации было достаточно, но сейчас, когда я начал готовить код компилятора к публикации, стало понятно, что текущий вариант с фоновым запуском gcc никуда не годится.

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

Оказывается, интерфейс Clang меняется от версии к версии и все найденные мной примеры были старыми и не запускались в актуальной версии (Сlang 12), а стабильный C-style интерфейс предназначен для парсинга и анализа исходников и с помощью которого сгенерировать исполняемые файлы не получится*.

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

А теперь публикую результат своих изысканий в виде рабочего примера динамической компиляции С++ кода с последующей его загрузкой и выполнением скомпилированных функций. Исходники адаптированны под актуальную версию Clang 12. Пояснения к коду я перевел и дополнил перед публикацией, а ссылки на исходные материалы приведены в конце статьи.

  • *) Кажется в 14 версии планируется реализовать C интерфейс для генерации исполняемых файлов.
  • **) На самом деле, Clang может (или теперь может) компилировать файлы из оперативной памяти, поэтому в исходники я добавил и эту возможность.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Просмотры4K
Комментарии 11

Ассоциативная самозамкнутая сеть. Что нужно для создания сильного ИИ

Программирование*C++*Искусственный интеллект
Из песочницы

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

Читать далее
Всего голосов 7: ↑4 и ↓3+1
Просмотры2.9K
Комментарии 12

Почему не все тестовые задания одинаково полезны: С++ edition

Программирование*Совершенный код*.NET*C++*C#*

Вначале было слово, и было два байта, и ничего больше не было. Но отделил Бог ноль от единицы, и понял, что это хорошо.

Потом, опуская некоторые незначительные события мироздания, была вот эта статья от @novar.

Ну а еще некоторое время спустя вышел разбор задания из оригинальной статьи от @PsyHaSTe.

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

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

Немного кода
Всего голосов 24: ↑21 и ↓3+18
Просмотры4.2K
Комментарии 8

Использование подсказок, включаемых в исходный код, помогающих GCC выявлять случаи переполнения буфера

Блог компании RUVDS.comПрограммирование*C++*Компиляторы*C*
Перевод
Ошибки, связанные с доступом к областям памяти, которые находятся за пределами допустимого адресного пространства (out-of-bounds memory access), в 2021 году всё ещё пребывают в списке самых опасных уязвимостей ПО CWE Top 25. Известно, что ошибочные операции записи данных (out-of-bounds write, CWE-787) с двенадцатого места, которое они занимали в 2019 году, перешли в 2020 году на второе. А неправильные операции чтения данных (out-of-bounds read, CWE-125) в тех же временных пределах сменили пятое место на четвёртое.



Понимание важности раннего выявления ошибок, приводящих к вышеозначенным проблемам, привело к тому, что в свежих релизах компиляторов GNU Compiler Collection (GCC) была значительно улучшена возможность детектирования подобных ошибок. Речь идёт об использовании ключей для проведения проверок и вывода предупреждений наподобие -Warray-bounds, -Wformat-overflow, -Wstringop-overflow и (самая свежая возможность, появившаяся в GCC 11) -Wstringop-overread. Но всем этим проверкам свойственно одно и то же ограничение, связанное с тем, что система может обнаруживать проблемные ситуации лишь в пределах отдельных функций. Получается, что, за исключением анализа небольшого набора встроенных в компилятор функций, вроде memcpy(), проверка прекращается на границе вызова функции. То есть, например, если буфер, объявленный в функции A, переполняется в функции B, вызванной из функции A, компилятор, если функция B не встроена в функцию A, на эту проблему не реагирует.

В этом материале речь пойдёт о трёх видах простых подсказок, применяемых на уровне исходного кода, которые программист может использовать для того чтобы помочь GCC выявлять операции, связанные с доступом к областям памяти, находящимся за пределами допустимого адресного пространства. Причём, эти подсказки помогают компилятору находить проблемы и при пересечении границ вызова функций, и даже тогда, когда функции определены в разных файлах с исходным кодом.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Просмотры2.9K
Комментарии 8

Расширение языка программирования (C++/Planning C). Волшебные сканеры и компилирующие макросы

Программирование*C++*Компиляторы*Параллельное программирование*

Здравствуйте, уважаемые читатели.

Обычно, когда речь заходит о создании какого-либо расширения для существующего языка программирования, в воображении неминуемо начинают рождаться разнообразные сложные решения, включающие поиск описания формальной грамматики исходного языка, ее модификации, а затем и применения какого-либо инструмента, позволяющего по данной грамматике либо построить новый компилятор, либо модифицировать существующий компилятор. Причем такие инструменты существуют (bison/flex, yacc/lex, вероятно и многие другие) и успешно используются, несмотря на их явную сложность и громоздкость.

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

Читать далее
Всего голосов 9: ↑8 и ↓1+7
Просмотры5.3K
Комментарии 39

Межмодульный анализ C++ проектов в PVS-Studio

Блог компании PVS-StudioC++*Компиляторы*C*

В PVS-Studio появилось одно крупное изменение – это поддержка межмодульного анализа C++ проектов. В статье речь пойдёт про то, как это реализовано в других инструментах, как сделали мы, как попробовать и что удалось найти.

Читать далее
Всего голосов 13: ↑10 и ↓3+7
Просмотры1.4K
Комментарии 3

Vulkan. Руководство разработчика. Вершинные буферы

Программирование*C++*Работа с 3D-графикой*Разработка игр*CGI (графика)*
Перевод
Tutorial


Я начинаю перевод нового раздела Vulkan Tutorial (vulkan-tutorial.com), который называется Vertex buffers. Сегодняшняя публикация посвящена первой главе раздела — Vertex input description.

Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Просмотры1.4K
Комментарии 0

Разработка стековой виртуальной машины и компилятора под неё (итог)

C++*Виртуализация*Компиляторы*C*

Для завершения реализации компилятора потребовалось около месяца времени (вечерами), чтобы на практике познакомиться с такими темами как BNF (Backus Naur Form), Abstract Syntax Tree (AST), Symbol Table, способами генерации кода, разработки самого компилятора (front-end, back-end), а также модификации виртуальной машины CVM. Ранее с этими темами был не знаком, но благодаря комментаторам погрузился. Хоть затрагиваемых тем много, постараюсь рассказать очень лаконично. Но обо всём по порядку.

Читать далее
Всего голосов 23: ↑21 и ↓2+19
Просмотры4.4K
Комментарии 9

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