LINUX.ORG.RU

C++


366

17

Всего сообщений: 234

AMD открыла исходные коды FidelityFX Super Resolution

Группа Мультимедиа

Компания AMD заявила об открытии исходных кодов технологии суперсэмплинга FidelityFX Super Resolution 2.0 для увеличения качества изображения в играх с низким разрешением при преобразовании в более высокое разрешение. Код проекта написан на C++ и рапространяется под лицензией MIT. Кроме базового API, реализована поддержка таких графических API как Vulkan и DirectX 12, а также шейдерных языков HLSL и GLSL. Также доступен набор примеров и документация.

>>> Источник

 , ,

GREAT-DNG
()

Как работать с Makefile-проектами в среде CLion

Группа Документация

За последние несколько лет мне пришлось столкнуться с множеством вопросов, которые были сформулированы примерно так: «мой проект не открывается в среде CLion». В свою очередь, это приводило к необходимости из раза в раз объяснять разным людям примерно одно и то же. Статья имеет целью сохранить тот опыт, который был накоплен в процессе анализа десятков разных проектов.

( читать дальше... )

 , , , ,

Bass
()

В ожидании GCC 12.1

Группа Разработка

GCC - это набор компиляторов языков программирования от GNU.

Релиз GCC 12.1 ожидается в апреле 2022.

GCC 12 уже является системным компилятором Fedora 36. Также GCC 12 доступен в Red Hat Enterprise Linux в Red Hat Developer Toolset (версии 7) или Red Hat GCC Toolset (версии 8 и 9).

В GCC 12

  • улучшили поддержку OpenMP 5.0

  • реализовали поддержку ADA 2022 (флаг -gnat2022)

  • реализовали некоторые возможности следующего стандарта С: C2X (флаг -std=c2x или -std=gnu2x)

  • реализовали часть возможностей С++23.

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

В GCC 12 реализовали часть возможностей C++23. Без указания флага стандарта в g++-12 используется -std=gnu++17, чтобы использовать возможности описываемые далее нужно компилировать с флагами -std=c++23 или -std=gnu++23.

Реализованные возможности C++23:

  1. if consteval

Хотя уже в C++20 появились consteval функции, которые могут выполнятся только во время компиляции и был std::is_constant_evaluated (), но была проблема их совместного использования

#include <type_traits>

int slow (int);
consteval int fast (int n) { return n << 1; }

constexpr int fn (int n)
{
  if (std::is_constant_evaluated ())
    return fast (n); // 'n' is not a constant expression
  else
    return slow (n);
}
constexpr int i = fn (10);

https://godbolt.org/z/Yhbqq6K36

P1938R3 представил if consteval который позволяет использовать consteval функции внутри constexpr:

#include <type_traits>

int slow (int);
consteval int fast (int n) { return n << 1; }

constexpr int fn (int n)
{
  if consteval {
    return fast (n); // OK
  } else {
    return slow (n);
  }
}

constexpr int i = fn (10);

https://godbolt.org/z/Kxs6Wjfq6

Заметьте что if consteval требует {} в отличие от обычного if, и что if consteval может быть в обычной не constexpr функции.

  1. auto(x) GCC 12 реализовал P0849 который позволяет auto каст в prvalue
struct A {};
void f(A&);  // #1
void f(A&&); // #2
A& g();

void h()
{
  f(g()); // calls #1
  f(auto(g())); // calls #2 with a temporary object
}

https://godbolt.org/z/x7hn5GKEx

Заметьте что и auto(x) и auto{x} допустимы, хотя decltype(auto)(x) остаётся неверным.

  1. Non-literal переменные в constexpr функциях GCC 12 реализовал P2242R3, который позволяет non-literal переменным, goto, и меткам быть в constexpr функциях если выполнение во время компиляции не доходит до этих мест.
#include <type_traits>

template<typename T> constexpr bool f() {
  if (std::is_constant_evaluated()) {
    return true;
  } else {
    T t; // OK when T=nonliteral in C++23
    return true;
  }
}
struct nonliteral { nonliteral(); };
static_assert(f<nonliteral>());

https://godbolt.org/z/6xnzM46Ej

constexpr int
foo (int i)
{
  if (i == 0)
    return 42;
  static int a;
  thread_local int t;
  goto label;
label:
  return 0;
}

static_assert(foo(0) == 42);

https://godbolt.org/z/PGsErnE4n

  1. Multidimensional subscript operator GCC 12 реализовал P2128R6
struct S {
  int a[64];
  constexpr S () : a {} {};
  constexpr S (int x, int y, int z) : a {x, y, z} {};
  constexpr int &operator[] () { return a[0]; }
  constexpr int &operator[] (int x) { return a[x]; }
  constexpr int &operator[] (int x, long y) { return a[x + y * 8]; }
};

void g ()
{
  S s;
  s[] = 42;
  s[5] = 36;
  s[3, 4] = 72;
}

https://godbolt.org/z/nnGead631

Заметьте что operator[] сейчас не поддерживает аргументов по умолчанию. Рабочая группа рассматривает CWG2507 , и если она примет предложенное решение проблемы, то в будущем такой код будет валиден:

struct X {
  int a[64];
  constexpr int& operator[](int i = 0) { return a[i]; }
};
  1. elifdef и elifndef В С и С++ #ifdef и #ifndef это синтаксический сахар для #if defined(something) и #if !defined(something). Для вариантов с else не было такого синтаксического сахара. Так что его добавили в С++23(и в С2X) и GCC 12: P2334R1
#ifdef __STDC__
/* ... */
#elifndef __cplusplus
#warning "not ISO C"
#else
/* ... */
#endif

https://godbolt.org/z/z4hbj6M7q

  1. Extended init-statement GCC 12 реализовал P2360R0 где расширяются возможности init-statement (в if, for, switch) позволяя им содержать объявление псевдонимов. На практике это означает что теперь валиден подобный код:
for (using T = int; T e : v)
{
    // use e
}

Также можете ознакомиться с описанием исправлений и новыми предупреждениями в GCC 12 в оригинальной статье

>>> Все изменения GCC 12

 ,

fsb4000
()

Библиотека ReSGP4

Группа Open Source

Спустя совсем немного времени после Дня космонавтики состоялся релиз библиотеки ReSGP4.

Библиотека представляет собой расширение для Python 3, которое позволяет симулировать движение космических объектов по орбитам вокруг Земли.

( читать дальше... )

>>> Подробности

 , , ,

shkolnick-kun
()

Wolfire Games опубликовала исходники Overgrowth

Wolfire Games опубликовала исходники Overgrowth
Группа Игры

Разработчики Overgrowth опубликовали на Github исходники игры под лицензией Apache 2.0.

При этом в опубликованные исходники не входят ассеты игры. Для доступа к ассетам необходимо купить оригинальную игру в Humble Bundle или Steam.

>>> Исходники на Github

 , ,

WatchCat
()

Вышла новая версия C++-драйвера для PostgreSQL

Группа Open Source

Pgfe (PostGres FrontEnd) - продвинутый и многофункциональный драйвер для PostgreSQL, написанный на C++. Разработка нацелена на простоту использования и надёжность, учитывая производительность.

Pgfe можно скачать на странице Github.

Достоинства

  • быстрый и надёжный;
  • может использоваться как header-only библиотека, так и как статическая или разделяемая библиотека;
  • работает с подключениями к базе данных как в блокирующем, так и в неблокирующем режимах ввода-вывода;
  • поддерживает prepared statements как с позиционными, так и с именованными параметрами;
  • обеспечивает первоклассную поддержку для вызова функций и процедур;
  • поддерживает продвинутые функции PostgreSQL, такие как конвейер, COPY и большие объекты;
  • поддерживает обработку ошибок с помощью исключений и условий ошибок: предоставляет запись enum для каждого предопределенного SQLSTATE;
  • обеспечивает продвинутую поддержку преобразования данных: даже многомерные массивы PostgreSQL в/из любых комбинаций контейнеров STL могут быть выполнены с лёгкостью;
  • обеспечивает поддержку динамического построения SQL-запросов;
  • позволяет разделить SQL-запросы и код C++ на стороне клиента;
  • обеспечивает простой, надежный и потоко-безопасный пул соединений;
  • многие другие функции для удобства и безопасности.

Требования

  • компилятор C++17 (протестировано на GCC и MSVC);
  • libpq;
  • CMake 3.16+ (необязательно, только если требуется сборка).

>>> Оригинал

 ,

anonymous
()

SRELL 2.930 — библиотека для С++, реализующая работу ECMAScript-совместимых регулярных выражений

Группа Разработка

SRELL – это std::regex-like library.

Особенности:

  • header-only;
  • ECMAScript-совместимые регулярные выражения;
  • дизайн а-ля std::regex;
  • поддержка типов char8_t, char16_t и char32_t для C++11 и более поздних версий стандарта.

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

TheXTech: кроссплатформенный порт Super Mario Bros. X

TheXTech: кроссплатформенный порт Super Mario Bros. X
Группа Игры

Кроссплатформенный порт Super Mario Bros. X, фанатской игры по мотивам вселенной Марио, созданной в 2009 году американцем Эндрю Спинксом, полностью написанный на С++. Проект получил название TheXTech по принципу: «The Super Mario Bros. X Tech». Он полностью воспроизводит старый движок SMBX 1.3 (кроме редактора), исправлены критические ошибки, приводящие к сбою или зависанию игры.

Об оригинальном движке SMBX

Несмотря на полное прекращение разработки игры в 2011 году, она была востребована и продолжала широко использоваться сообществом. Игра привлекла внимание разработчиков-энтузиастов, которые создавали для неё вспомогательные инструменты, а также делали попытки модифицировать и расширить игру. Самыми известными из них являются набор разработки из тулкита Moondust Project (изначально называвшимся PGE Project) и библиотека LunaLua (изначально известная как LunaDll), расширяющая функционал игры посредством dll-инъекции. Исходный код игры долгое время был закрытым. Однако всё изменилось, когда 2 февраля 2020 года на форуме были опубликованы исходные коды игры.

Геймплей

В игре возможно играть за одного из 5-и персонажей: Марио, Пич, Луиджи, Линк и Тоад. Присутствуют три режима игры: одиночный, вдвоем в кооперативном режиме и режим битвы, в котором игроки должны побить друг друга, пользуясь различными подручными средствами.

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

Подробности технической реализации TheXTech (habr.com)

>>> GitHub автора порта

 , ,

atiradeon
()

cppcheck 2.6

Группа Разработка

Вышла новая версия cppcheck — статического анализатора исходного кода для языков C и C++.

В этом выпуске представлены новые проверки:

  • пропущенный return в функции;
  • запись перекрывающихся (overlapping) данных, обнаружение UB;
  • сравнение с значением вне допустимого диапазона типов;
  • отключение copy elision из-за использования return std::move(local);
  • открытие файла на чтение и запись в разных потоках (streams).

( читать дальше... )

Помимо этого, была завершена проверка соответствия исходного кода стандарту MISRA C 2012: реализованы все правила MISRA C 2012, кроме 1.1, 1.2 (должны обеспечиваться компилятором) и 17.3 (может обеспечиваться компилятором), включая правила в поправках 1 и 2.

Исходный код анализатора распространяется по лицензии GPLv3.

>>> Подробности

 , , ,

Siborgium
()

Cppcheck 2.5

Группа Разработка

Вышла новая версия статического анализатора для С и С++.

В новой версии:

В парсере:

  • различные исправления;
  • теперь поддерживаются все возможности c++11, c++14, c++17;
  • частичная поддержка с++20.

Также анализатор теперь:

  • знает больше об API;
  • показывает меньше ненужных предупреждений;
  • находит больше багов;
  • исправлены вылеты и ложные срабатывания в Misra.

Добавлены новые проверки:

  • подозрительное присваивание контейнера/итератора в условии;
  • повторное пробрасывание текущего исключения с помощью throw;.

Примеры кода, которые демонстрируют новые проверки:

void f(std::string s) {
  if (s = "123") {
  }
}
Assignment in condition should probably be comparison
void func1(const bool flag) { try{ if(!flag) throw; } catch (int&) { ; } }
Rethrowing current exception with 'throw;', it seems there is no current exception to rethrow.
If there is no current exception this calls std::terminate(). More: https://isocpp.org/wiki/faq/exceptions#throw-without-an-object

>>> Подробности

 , , ,

fsb4000
()

Zig 0.8

Группа Разработка

После 7 месяцев работы и 2711 коммитов вышла новая версия Zig: 0.8

Zig это:

  • Современный компилятор С

  • Современный компилятор С++

  • Компилятор языка Zig

  • Сборочная система для C, C++, языка Zig

  • (Планируется) Пакетный менеджер для С, C++, языка Zig

Zig разрабатывается под лицензией MIT: https://github.com/ziglang/zig/blob/master/LICENSE

Язык Zig – это язык общего назначения, который старается быть простым. Нет макросов, скрытых аллокаций, скрытого потока управления.

( читать дальше... )

Полный список изменений: https://ziglang.org/download/0.8.0/release-notes.html

>>> Официальный сайт

 , ,

fsb4000
()

QtProtobuf 0.6.0

Группа Разработка

Выпущена новая версия библиотеки QtProtobuf.

QtProtobuf — свободная библиотека, выпускаемая под лицензией MIT. С ее помощью вы можете с легкостью использовать Google Protocol Buffers и gRPC в вашем Qt проекте.

Ключевые изменения:

  • Генератор и библиотека QtProtobuf разделены на два отдельных модуля.
  • Изменены пути установки файлов .pri и модулей QML (для случая если установочный префикс не соответствует установочному префиксу фрэеймворка Qt).
  • Базовая поддерка кросскомпиляции (документация прилагается).
  • Исправлена поддержка вложенных типов со взаимозависимостями.
  • Исправлена проблема в буфере чтения для подписок gRPC.
  • Добавлена сигнатура вызова gRPC метода с возвращаемым значением в виде параметра функции.
  • Добавлен gRPC канал на основе нативной C++ имлементации gRPC.
  • Добавлены дополнительные gRPC методы для обработки ошибок и таймаутов канала.
  • Добавлена возможность генерировать дополнительное пространство имен (aka namespace) для protobuf сообщений. (ЭКСПЕРИМЕНТАЛЬНО)
  • Добавлена явная рефлексия protobuf сообщений, для более корректной json сериализации.
  • Изменено имя QML свойств. Теперь для QML двойников используется оригинальное имя protobuf сообщений.
  • Добавлена возможность генерация enum содержащего список полей protobuf сообщений.

Незначительные изменения:

  • Добавлена возможность отдельной сборки тестов.
  • Изменен механизм поиска сторонних зависимостей.
  • microjson статически линкуется к библиотеке QtProtobuf и больше не является зависимостью.
  • Добавлены бинарные пакеты для Windows.

>>> Подробности

 , , ,

semlanik
()

Сайт mingw.org недоступен более месяца

Группа Разработка

Сайт проекта недоступен более месяца, на главной висит заглушка.

Цель данного проекта – сборка нативных программ для Windows с помощью свободного программного обеспечения, в частности порта gcc, binutils и gdb, а также порта bash. Эту нелегкую ношу свободного ПО во мраке проприетарщины они несли свыше десяти лет. Новый проект, который взял на себя их задачи – Mingw-w64. По какой-то причине на сайте Mingw-w64 кривой сертификат.

>>> Подробности

 , ,

zanac1
()

Компания JFrog объявила о скором закрытии сервисов Bintray, JCenter, GoCenter и ChartCenter

Группа Разработка

Закрытие этих сервисов будет поэтапным:

  • Прямо сейчас - никаких изменений
  • 28 февраля - прекратится приём новых данных, вебсайты GoCenter и ChartCenter перестанут работать, однако их сервисы ещё будут доступны
  • с 12 по 26 апреля - подготовка к выключению
  • 1 мая - Bintray, JCenter, GoCenter и ChartCenter полностью перестанут быть доступными

В качестве альтернатив предлагаются:

Совсем недавно (13 января этого года) созданный сервис ConanCenter, предоставляющий репозиторий пакетов Conan для разработчиков на C/C++, продолжит работать. Он получил дополнительное финансирование.

>>> Подробности

 , , , ,

hummer
()

AviSynth+ 3.7.0

Группа Мультимедиа

Состоялся релиз кроссплатформенного фреймсервера для обработки видео AviSynth+ 3.7.0, написанного на C++ и использующего собственный язык скриптов. Готовые пакеты, включая плагины, предоставлены в репозитории Arch Linux. Инструкция для создания собственной сборки доступна здесь.

( читать дальше... )

>>> Подробности

 , ,

antianon
()

NVIDIA CUDA Toolkit 11 и драйверы 450+

Группа Hardware and Drivers

Бинарные сборки CUDA Toolkit 11+ и Драйверов 450+ доступны для загрузки с репозитория nvidia для Fedora 32, Ubuntu 20.04 и др.

Официальной новости я не смог найти, но те кто использует адаптированные версии от negativo17 или ручной сборки, смогут обновиться и начать использовать таки C++17 в начале перехода мира на C++20

>>> Адрес репозитория

 , , ,

sparks
()

ZenMake 0.10.0

Группа Разработка

ZenMake — ещё одна система сборки для C/C++ и ряда других языков программирования с декларативными конфигурационными файлами.

ZenMake написан на python с использованием Waf в качестве фреймворка. Основная цель проекта — быть простым в использовании насколько это возможно, но оставаться достаточно гибким.

Зачем еще одна система сборки? Подробности (на английском): https://zenmake.readthedocs.io/en/latest/why.html

Основной репозиторий: https://gitlab.com/pustotnik/zenmake

Документация: https://zenmake.readthedocs.io/

Примеры использования: https://gitlab.com/pustotnik/zenmake/tree/master/demos

Способы использования:

  1. Установить в систему через pip install zenmake и использовать на манер CMake, Meson и др., вызывая zenmake в корне проекта.
  2. Скачать zipapp-форму zenmake.pyz отсюда или сгенерировать самостоятельно через команду zipapp и использовать как встроенную систему сборки.

>>> Подробности

 , ,

Vark
()

QtProtobuf 0.5.0

Группа Разработка

Выпущена новая версия библиотеки QtProtobuf.

QtProtobuf — свободная библиотека, выпускаемая под лицензией MIT. С ее помощью вы можете с легкостью использовать Google Protocol Buffers и gRPC в вашем Qt проекте.

Ключевые изменения:

  • Добавлена библиотека поддержки Qt-типов. Теперь можно использовать часть Qt типов в описании protobuf сообщений.
  • Добавлена поддержка Conan, спасибо @GamePad64 за помощь!
  • Вызов методов call и subscription в QtGrpc теперь потокобезопасны.
  • Добавлено поле returnValue для QQuickGrpcSubscription. Теперь можно делать QML биндинг на сообщения созданные в QML контексте без промежуточных обработчиков.
  • Для согласования с концепциями protobuf, все поля в сообщениях выставляются в значения по умолчанию перед началом десериализации.

Незначительные изменения:

  • Переработан поиск qmake в процедуре простройки проекта. Приоритет отдается qmake из CMAKE_PREFIX_PATH.
  • Переработана статическая простройка проекта, исправлены некоторые ошибки.
  • Исправлена ошибка «зависшей» подписки при работе с QQuickGrpcSubscription и QML контекста.
  • Добавлена конвертация для типа google.protobuf.Timestamp из/в QDateTime.

>>> Подробности

 , , , ,

semlanik
()

Доступна предварительная сборка Qt 6.0

Группа Разработка

Qt Company сообщила в своём блоге о доступности первой предварительной сборки Qt 6.0.

Компания сообщает, что первая предварительная сборка содержит бинарные файлы только для настольных платформ, а для тестирования на мобильных и встроенных платформах необходимо воспользоваться сборкой из исходных текстов, при этом Qt 6.0 требует поддержки C++17 от компилятора, поэтому разработка фокусируется на сравнительно недавно выпущенных компиляторах.

Первая предварительная сборка содержит следующие модули:

  • Qt Core
  • Qt GUI
  • Qt Widgets
  • Qt Network
  • Qt QML
  • Qt Quick
  • Qt Quick Controls
  • Qt SVG
  • Qt Network Authorization
  • Qt SQL
  • Qt Test
  • …и несколько других модулей

Qt Company и далее собирается предоставлять регулярные предварительные сборки Qt 6.0, получить же их можно воспользовавшись установщиком Qt в категории Preview.

Выпуск Qt 6 намечен на 1 декабря, а 31 августа предполагается заморозка добавления функциональности.

>>> Блог Qt

 , , ,

c0deum
()

U++ Framework 2020.1

Группа Разработка

В мае этого года (точная дата не сообщается) вышла новая, 2020.1, версия U++ Framework (Он же Ultimate++ Framework). U++ — кроссплатформенный фреймворк для создания GUI приложений.

Нововведения в текущей версии:

  • Linux бэкенд по умолчанию теперь использует gtk3 вместо gtk2.
  • «look&feel» в Linux and MacOS переработан и лучше поддерживает тёмные темы.
  • У ConditionVariable и Semaphore появились варианты метода Wait с параметром timeout.
  • Добавлена функция IsDoubleWidth для определения глифов UNICODE двойной ширины.
  • U++ теперь использует директории ~/.config and ~/.cache для хранения разного.
  • Добавлена функция GaussianBlur.
  • Модернизирован внешний вид виджетов в дизайнере слоёв.
  • Поддержка нескольких мониторов в MacOS и другие исправления.
  • В дизайнер добавлено несколько часто используемых виджетов, таких как ColorPusher, TreeCtrl, ColumnList.
  • Нативный диалог выбора файлов, FileSelector, переименован в FileSelNative и добавлен в MacOS (в дополнение к Win32 и gtk3).
  • Рефракторинг GLCtrl в OpenGL/X11.
  • Добавлена функция GetSVGPathBoundingBox.
  • PGSQL теперь может экранировать ? через ?? или использовать метод NoQuestionParams в целях избежания использования ? как символа подстановки параметров.

>>> Подробности

 , , ,

next_time
()