Введение в компиляцию C++ в командной строке
Возможно, наступит день, когда технологии продвинутся настолько, что нам не нужно будет беспокоиться о том, какие флаги установлены при компиляции, какие файлы включены. Но это не сегодняшний день.
При использовании Unreal Engine 4 или другого высокоуровневого фреймворка компиляция кода на языке C++ в значительной степени скрыта от глаз. Это очень удобно, когда все работает, но становится препятствием, когда нужно что-то изменить. Единственный способ не стать рабом своих творений - понять, как они работают.
https://unrealistic.dev/posts/introduction-to-c-compilation-on-the-command-line
#cpp #programming
👉 @cpp_lib
Возможно, наступит день, когда технологии продвинутся настолько, что нам не нужно будет беспокоиться о том, какие флаги установлены при компиляции, какие файлы включены. Но это не сегодняшний день.
При использовании Unreal Engine 4 или другого высокоуровневого фреймворка компиляция кода на языке C++ в значительной степени скрыта от глаз. Это очень удобно, когда все работает, но становится препятствием, когда нужно что-то изменить. Единственный способ не стать рабом своих творений - понять, как они работают.
https://unrealistic.dev/posts/introduction-to-c-compilation-on-the-command-line
#cpp #programming
👉 @cpp_lib
❤4👍1
Моя борьба против знакового/беззнакового сравнения: самые распространенные нарушения
Как мы уже говорили на прошлой неделе, сравнение чисел с разными знаками может быть опасным в языке C++. Если попытаться сравнить знаковое и беззнаковое целое число, то можно получить результат, который не имеет смысла, если подходить к вопросу с математической точки зрения. По крайней мере, при правильных настройках компилятора вы получите предупреждение.
Мы также увидели, что C++20 предлагает простой и безопасный способ сравнения чисел в любое время, и он всегда вернет вам ожидаемый результат.
https://www.sandordargo.com/blog/2023/10/18/signed-unsigned-comparison-the-most-usual-violations
#cpp #programming
👉 @cpp_lib
Как мы уже говорили на прошлой неделе, сравнение чисел с разными знаками может быть опасным в языке C++. Если попытаться сравнить знаковое и беззнаковое целое число, то можно получить результат, который не имеет смысла, если подходить к вопросу с математической точки зрения. По крайней мере, при правильных настройках компилятора вы получите предупреждение.
Мы также увидели, что C++20 предлагает простой и безопасный способ сравнения чисел в любое время, и он всегда вернет вам ожидаемый результат.
https://www.sandordargo.com/blog/2023/10/18/signed-unsigned-comparison-the-most-usual-violations
#cpp #programming
👉 @cpp_lib
Sandor Dargo’s Blog
My battle against signed/unsigned comparison: the most usual violations
As we discussed last week, comparing numbers with different signs can be dangerous in C++. If you try to compare a signed with an unsigned integer, you might get a result that makes no sense if you approach the question from a mathematical point of view.…
👍3
Fiber в C++: Понимание основ
Fiber, менее известная концепция по сравнению с coroutine, является довольно мощным дополнением к кооперативной многозадачности. Как графический программист, работающий в игровой индустрии, я очень ценю гибкость, которую дает fiber. На самом деле, мне кажется, что эта технология немного недооценена из-за отсутствия достаточного количества публичных материалов, рассказывающих о волокнах.
В этой статье я расскажу о том, что я узнал об основах Fiber. Все, о чем пойдет речь в этой статье, будет относиться именно к языку C++, хотя подобная концепция существует и в других языках. Читатели, не имеющие представления о fibers, узнают, что это такое и как мы можем использовать его преимущества при рендеринге графики.
https://agraphicsguynotes.com/posts/fiber_in_cpp_understanding_the_basics/
#cpp #programming
👉 @cpp_lib
Fiber, менее известная концепция по сравнению с coroutine, является довольно мощным дополнением к кооперативной многозадачности. Как графический программист, работающий в игровой индустрии, я очень ценю гибкость, которую дает fiber. На самом деле, мне кажется, что эта технология немного недооценена из-за отсутствия достаточного количества публичных материалов, рассказывающих о волокнах.
В этой статье я расскажу о том, что я узнал об основах Fiber. Все, о чем пойдет речь в этой статье, будет относиться именно к языку C++, хотя подобная концепция существует и в других языках. Читатели, не имеющие представления о fibers, узнают, что это такое и как мы можем использовать его преимущества при рендеринге графики.
https://agraphicsguynotes.com/posts/fiber_in_cpp_understanding_the_basics/
#cpp #programming
👉 @cpp_lib
👍8
Как рисуется карта в Фараоне
В свободное время я восстанавливаю старенькую, но довольно известную игру Pharaoh. Это ситибилдер, выпущенный в прошлом веке и разработанный Impressions Games. Технология рендеринга в этой игре была значительным достижением для своего времени и способствовала созданию впечатляющей атмосферы Древнего Египта, которая погружает игрока в проработанное окружение, удивляет вниманием к мелким деталям и передает богатство и разнообразие древнеегипетских пейзажей. В этой статье я опишу алгоритм отрисовки города, зданий, объектов, анимации и формат карты оригинальной игры.
https://habr.com/ru/articles/767892/
#cpp #programming
👉 @cpp_lib
В свободное время я восстанавливаю старенькую, но довольно известную игру Pharaoh. Это ситибилдер, выпущенный в прошлом веке и разработанный Impressions Games. Технология рендеринга в этой игре была значительным достижением для своего времени и способствовала созданию впечатляющей атмосферы Древнего Египта, которая погружает игрока в проработанное окружение, удивляет вниманием к мелким деталям и передает богатство и разнообразие древнеегипетских пейзажей. В этой статье я опишу алгоритм отрисовки города, зданий, объектов, анимации и формат карты оригинальной игры.
https://habr.com/ru/articles/767892/
#cpp #programming
👉 @cpp_lib
👍2
Перегрузка операторов в C++. Основы
https://metanit.com/cpp/tutorial/5.14.php
#cpp #programming
👉 @cpp_lib
#include <iostream>
class Counter
{
public:
Counter(int val)
{
value =val;
}
void print()
{
std::cout << "Value: " << value << std::endl;
}
Counter operator + (const Counter& counter) const
{
return Counter{value + counter.value};
}
private:
int value;
};
int main()
{
Counter c1{20};
Counter c2{10};
Counter c3 = c1 + c2;
c3.print(); // Value: 30
}
https://metanit.com/cpp/tutorial/5.14.php
#cpp #programming
👉 @cpp_lib
Metanit
C++ | Перегрузка операторов
Перегрузка операторов в языке програмирования C++, Operator Overloading, перегрузка операций сравнения, присвоения, инкремента и декремента
👍5🥱1🍓1
Writing a simple C++20 async message queue server
Part I https://bytepawn.com/writing-a-simple-cpp-async-message-queue-server.html
Part II https://bytepawn.com/writing-a-simple-cpp-async-message-queue-server-part-ii.html
#cpp #programming
👉 @cpp_lib
Part I https://bytepawn.com/writing-a-simple-cpp-async-message-queue-server.html
Part II https://bytepawn.com/writing-a-simple-cpp-async-message-queue-server-part-ii.html
#cpp #programming
👉 @cpp_lib
🔥6👍2🍓1
Решаем задачу асинхронного ввода-вывода с библиотекой Asio
Меня зовут Илья Казаков, я C++ разработчик в команде систем хранения данных компании YADRO, одна из моих задач — реализация эффективных IO-bound программ под Linux.
На одном из проектов мы с командой использовали Asio — библиотеку C++ для сетевого и низкоуровневого программирования ввода-вывода. Она предлагает свою асинхронную модель. Технология отлично справилась с нашей задачей, и я хочу поделиться с вами опытом ее использования. Под катом расскажу, какие решения я рассматривал для асинхронного ввода-вывода и почему остановился на Asio.
https://habr.com/ru/companies/yadro/articles/774130/
#cpp #programming
👉 @cpp_lib
Меня зовут Илья Казаков, я C++ разработчик в команде систем хранения данных компании YADRO, одна из моих задач — реализация эффективных IO-bound программ под Linux.
На одном из проектов мы с командой использовали Asio — библиотеку C++ для сетевого и низкоуровневого программирования ввода-вывода. Она предлагает свою асинхронную модель. Технология отлично справилась с нашей задачей, и я хочу поделиться с вами опытом ее использования. Под катом расскажу, какие решения я рассматривал для асинхронного ввода-вывода и почему остановился на Asio.
https://habr.com/ru/companies/yadro/articles/774130/
#cpp #programming
👉 @cpp_lib
👍4
Опечатки, нулевые указатели и коварный таб: 33 фрагмента в библиотеке GTK
GTK – популярный фреймворк с открытым исходным кодом для создания графических интерфейсов, который интересно проверять с помощью анализатора PVS-Studio. Тем более, что предыдущую проверку мы делали около 3 лет назад, а значит, наверняка найдём в нём новые ошибки.
Очень не хотелось частично повторять введение из прошлой статьи "Выявляем опечатки в проекте GTK 4 с помощью PVS-Studio", но подозреваю, что далеко не все читатели знакомы с GTK. Поэтому вкратце: библиотека позволяет кроссплатформенно реализовывать графический пользовательский интерфейс. Полностью бесплатна и имеет открытый исходный код, лицензированный под GNU GPL, что позволяет использовать её в любых проектах (даже коммерческих).
https://habr.com/ru/companies/pvs-studio/articles/770050/
#cpp #programming
👉 @cpp_lib
GTK – популярный фреймворк с открытым исходным кодом для создания графических интерфейсов, который интересно проверять с помощью анализатора PVS-Studio. Тем более, что предыдущую проверку мы делали около 3 лет назад, а значит, наверняка найдём в нём новые ошибки.
Очень не хотелось частично повторять введение из прошлой статьи "Выявляем опечатки в проекте GTK 4 с помощью PVS-Studio", но подозреваю, что далеко не все читатели знакомы с GTK. Поэтому вкратце: библиотека позволяет кроссплатформенно реализовывать графический пользовательский интерфейс. Полностью бесплатна и имеет открытый исходный код, лицензированный под GNU GPL, что позволяет использовать её в любых проектах (даже коммерческих).
https://habr.com/ru/companies/pvs-studio/articles/770050/
#cpp #programming
👉 @cpp_lib
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Как написать 2D игру на C++ и чистом STL для терминала в Linux
Привет, Хабр, я PHP разработчик с опытом работы в продакшне более 8 лет. После долгого и упорного труда мне стало скучно пилить микросервисы и бэкенды в хайлоде, я решил постичь магию разработки игр. Выбрал курс по Unreal Engine 5 и C++, так как там все структурировано, понятно, и в случае необходимости есть кому задать вопрос. На первой лекции по основам С++ преподаватель сразу предложил челлендж - написать 2D игру без использования игрового движка. Идея мне понравилась и я сразу приступил к реализации.
https://habr.com/ru/post/708486/
#cpp #programming
👉 @cpp_lib
Привет, Хабр, я PHP разработчик с опытом работы в продакшне более 8 лет. После долгого и упорного труда мне стало скучно пилить микросервисы и бэкенды в хайлоде, я решил постичь магию разработки игр. Выбрал курс по Unreal Engine 5 и C++, так как там все структурировано, понятно, и в случае необходимости есть кому задать вопрос. На первой лекции по основам С++ преподаватель сразу предложил челлендж - написать 2D игру без использования игрового движка. Идея мне понравилась и я сразу приступил к реализации.
https://habr.com/ru/post/708486/
#cpp #programming
👉 @cpp_lib
🔥5👍3
Исчерпывающее руководство по работе с файлами в C++
В этой заметке я расскажу вам, как можно использовать работу с файлами в C++ и сохранять в них не только текстовые, но и бинарные данные типа Class или Struct.
https://dev.to/tbhaxor/a-comprehensive-guide-to-file-handling-in-c-2p1b
#cpp #programming
👉 @cpp_lib
В этой заметке я расскажу вам, как можно использовать работу с файлами в C++ и сохранять в них не только текстовые, но и бинарные данные типа Class или Struct.
https://dev.to/tbhaxor/a-comprehensive-guide-to-file-handling-in-c-2p1b
#cpp #programming
👉 @cpp_lib
👍6
Как использовать std::span из C++20
В этой статье рассмотрен std::span, который является более универсальным, чем string_view, и может помочь в работе с произвольными смежными коллекциями.
https://www.cppstories.com/2023/span-cpp20/
#cpp #programming
👉 @cpp_lib
В этой статье рассмотрен std::span, который является более универсальным, чем string_view, и может помочь в работе с произвольными смежными коллекциями.
https://www.cppstories.com/2023/span-cpp20/
#cpp #programming
👉 @cpp_lib
👍1
Последние обновления для разработки CMake в Visual Studio
Visual Studio имеет встроенную интеграцию с CMake, что позволяет пользователям C++ собирать и разрабатывать с использованием CMake и поддерживает их уникальные потребности. CMake - это кроссплатформенный инструмент сборки для C++, и с помощью новейших инструментов Visual Studio пользователи могут быть более продуктивными при настройке с помощью CMake.
https://devblogs.microsoft.com/visualstudio/latest-updates-for-cmake-development-in-visual-studio/
#cpp #programming
👉 @cpp_lib
Visual Studio имеет встроенную интеграцию с CMake, что позволяет пользователям C++ собирать и разрабатывать с использованием CMake и поддерживает их уникальные потребности. CMake - это кроссплатформенный инструмент сборки для C++, и с помощью новейших инструментов Visual Studio пользователи могут быть более продуктивными при настройке с помощью CMake.
https://devblogs.microsoft.com/visualstudio/latest-updates-for-cmake-development-in-visual-studio/
#cpp #programming
👉 @cpp_lib
👍5
Ranges Library в C++20: больше возможностей для проектирования
Ranges Library в C++20 по соображениям производительности было сделано несколько уникальных конструктивных решений. Эти решения имеют свои последствия: проблемы с кэшем и проблемы с постоянством.
https://www.modernescpp.com/index.php/the-ranges-library-in-c20-more-design-choices/
#cpp #programming
👉 @cpp_lib
Ranges Library в C++20 по соображениям производительности было сделано несколько уникальных конструктивных решений. Эти решения имеют свои последствия: проблемы с кэшем и проблемы с постоянством.
https://www.modernescpp.com/index.php/the-ranges-library-in-c20-more-design-choices/
#cpp #programming
👉 @cpp_lib
👍3
Введение в корутины (C++20): О Promise Type, Awaitable и Coroutine Handle
Сегодня я начну цикл статей о планировщике задач. Отправной точкой минисериала является простейший планировщик от Dian-Lun Lin, который становится все более сложным.
https://www.modernescpp.com/index.php/a-concise-introduction-to-coroutines-by-dian-lun-li/
#cpp #programming
👉 @cpp_lib
Сегодня я начну цикл статей о планировщике задач. Отправной точкой минисериала является простейший планировщик от Dian-Lun Lin, который становится все более сложным.
https://www.modernescpp.com/index.php/a-concise-introduction-to-coroutines-by-dian-lun-li/
#cpp #programming
👉 @cpp_lib
👍3👏1
C++23: Removing garbage collection support
Повесть о поддержке сборки мусора в C++: включенной в C++11, так нигде и не реализованной, окончательно удаленной в C++23.
https://www.sandordargo.com/blog/2023/11/01/cpp23-garbage-collection
#cpp #programming
👉 @cpp_lib
Повесть о поддержке сборки мусора в C++: включенной в C++11, так нигде и не реализованной, окончательно удаленной в C++23.
https://www.sandordargo.com/blog/2023/11/01/cpp23-garbage-collection
#cpp #programming
👉 @cpp_lib
Sandor Dargo’s Blog
C++23: Removing garbage collection support
If we go through the list of C++23 features, we can stumble upon the notion of garbage collection twice. Once among the language and once among the library features. Both entries refer to the same paper (P2186R2): garbage collection (GC in short) support…
👍5😢1😭1😨1
Extern templates to reduce binary size
Статья об использовании extern template для сокращения размеров бинарных файлов.
https://www.sandordargo.com/blog/2023/11/08/extern-templates
#cpp #programming
👉 @cpp_lib
Статья об использовании extern template для сокращения размеров бинарных файлов.
template <typename T>
class Wrapper {
public:
// ...
private:
T wrapped;
};
// No object code will be generated for Wrapper<int> in this translation unit
extern template class Wrapper<int>;
https://www.sandordargo.com/blog/2023/11/08/extern-templates
#cpp #programming
👉 @cpp_lib
Sandor Dargo’s Blog
Extern templates to reduce binary size
In my quest towards a smaller binary size, someone asked me if I considered extern templates. I did not. I didn’t even know about them. But I was more than happy for the suggestion and now here I am to share what learned about extern templates. What are they?…
🔥3👍2
Как читать язык ассемблера
Зачем кому-то нужно изучать язык ассемблера? Во-первых, чтение языка ассемблера - это способ узнать, что именно делает ваша программа. Почему именно эта программа на Си++ занимает 1 Мб (скажем), а не 100 Кб? Можно ли выжать еще немного производительности из той функции, которая постоянно вызывается?
В частности, для языка Си++ легко забыть или просто не заметить какую-либо операцию (например, неявное преобразование или вызов конструктора или деструктора копирования), которая подразумевается исходным кодом и семантикой языка, но не прописана в явном виде. Если посмотреть на ассемблер, сгенерированный компилятором, то все будет на виду.
https://wolchok.org/posts/how-to-read-assembly-language/
#cpp #programming
👉 @cpp_lib
Зачем кому-то нужно изучать язык ассемблера? Во-первых, чтение языка ассемблера - это способ узнать, что именно делает ваша программа. Почему именно эта программа на Си++ занимает 1 Мб (скажем), а не 100 Кб? Можно ли выжать еще немного производительности из той функции, которая постоянно вызывается?
В частности, для языка Си++ легко забыть или просто не заметить какую-либо операцию (например, неявное преобразование или вызов конструктора или деструктора копирования), которая подразумевается исходным кодом и семантикой языка, но не прописана в явном виде. Если посмотреть на ассемблер, сгенерированный компилятором, то все будет на виду.
https://wolchok.org/posts/how-to-read-assembly-language/
#cpp #programming
👉 @cpp_lib
🔥5👍3
Отчет о поездке: Осенняя встреча по стандартам ISO C++ (Кона, HI, США)
На днях комитет ISO C++ завершил свое второе собрание C++26, состоявшееся в Коне, штат Гавайи, США.
Наши организаторы, Standard C++ Foundation и WorldQuant, организовали высококачественные условия для нашей шестидневной встречи с понедельника по субботу. У нас было более 170 участников, около двух третей лично, а остальные удаленно через Zoom, формально представляющие 21 страну. Кроме того, на каждой встрече у нас регулярно появляются новые участники, которые никогда раньше не присутствовали, и на этот раз было более дюжины новых посетителей, в основном лично; всем им еще раз добро пожаловать!
https://herbsutter.com/2023/11/11/trip-report-autumn-iso-c-standards-meeting-kona-hi-usa/
#cpp #programming
👉 @cpp_lib
На днях комитет ISO C++ завершил свое второе собрание C++26, состоявшееся в Коне, штат Гавайи, США.
Наши организаторы, Standard C++ Foundation и WorldQuant, организовали высококачественные условия для нашей шестидневной встречи с понедельника по субботу. У нас было более 170 участников, около двух третей лично, а остальные удаленно через Zoom, формально представляющие 21 страну. Кроме того, на каждой встрече у нас регулярно появляются новые участники, которые никогда раньше не присутствовали, и на этот раз было более дюжины новых посетителей, в основном лично; всем им еще раз добро пожаловать!
https://herbsutter.com/2023/11/11/trip-report-autumn-iso-c-standards-meeting-kona-hi-usa/
#cpp #programming
👉 @cpp_lib
Sutter’s Mill
Trip report: Autumn ISO C++ standards meeting (Kona, HI, USA)
Today, the ISO C++ committee completed its second meeting of C++26, held in Kona, HI, USA. Our hosts, Standard C++ Foundation and WorldQuant, arranged for high-quality facilities for our six-day me…
👍3
Forwarded from Книги для программистов C/C++
Шпаргалка по аббревиатурам C++ и не только. Часть 1: C++
Когда-то я собеседовался на должность C++ разработчика в одну приличную и даже известную контору. Опыт у меня тогда уже кое-какой был, я даже назывался ведущим разработчиком у тогдашнего своего работодателя. Но на вопросы о том, знаком ли я такими вещами, как DRY, KISS, YAGNI, NIH, раз за разом мне приходилось отвечать «Нет».
Собеседование я с треском провалил, конечно. Но упомянутые аббревиатуры потом загуглил и запомнил. По мере чтения тематических статей и книг, подготовок к собеседованиям и просто общения с коллегами я узнавал больше новых вещей, забывал их, снова гуглил и разбирался. Пару месяцев назад кто-то из коллег небрежно упомянул в рабочем чате IIFE в контексте C++. Я, как тот дед в анекдоте, чуть с печки не свалился и опять полез в гугл.
https://habr.com/ru/articles/470265/
👉 @cpp_knigi
Когда-то я собеседовался на должность C++ разработчика в одну приличную и даже известную контору. Опыт у меня тогда уже кое-какой был, я даже назывался ведущим разработчиком у тогдашнего своего работодателя. Но на вопросы о том, знаком ли я такими вещами, как DRY, KISS, YAGNI, NIH, раз за разом мне приходилось отвечать «Нет».
Собеседование я с треском провалил, конечно. Но упомянутые аббревиатуры потом загуглил и запомнил. По мере чтения тематических статей и книг, подготовок к собеседованиям и просто общения с коллегами я узнавал больше новых вещей, забывал их, снова гуглил и разбирался. Пару месяцев назад кто-то из коллег небрежно упомянул в рабочем чате IIFE в контексте C++. Я, как тот дед в анекдоте, чуть с печки не свалился и опять полез в гугл.
https://habr.com/ru/articles/470265/
👉 @cpp_knigi
👍3