LINUX.ORG.RU

C++


362

17

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

Ada 2.* - быстрая C++ библиотека для парсинга URL

Группа Open Source

31-го марта и 17-го апреля состоялись выпуски 2.0.0 и 2.1.0 быстрой библиотеки парсинга URL для языка C++ (стандарт C++17).

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

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

 , , ,

dataman
()

RapidFuzz 3.0.0 и rapidfuzz-cpp 1.11.2 - библиотеки для нечёткого сравнения строк

Группа Open Source

rapidfuzz-cpp - быстрая, SIMD-оптимизированная библиотека на языке C++, реализующая несколько алгоритмов нечёткого сравнения строк и вычисления метрик:

RapidFuzz - основанная на rapidfuzz-cpp библиотека для языка Python.

Лицензия: MIT.

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

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

 , , , ,

dataman
()

Boost 1.82

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

Вышла новая версия Boost, набора кроссплатформенных библиотек C++. Некоторые крупные изменения:

  • более 20 библиотек запланировали отказ от поддержки C++98 в течение двух следующих релизов; минимальным требованием станет компилятор с поддержкой C++11 (например, gcc 4.8 и выше);
  • некоторые библиотеки (Math, Multiprecision) повышают требования к стандарту до C++14 (gcc 5, clang 5);
  • Mysql: новая библиотека на основе Asio, клиент MySQL;
  • Unordered: unordered_node_map, unordered_node_set - новые контейнеры на основе открытой адресации.

А также множество улучшений и исправлений в Core, Asio, Filesystem, JSON, Math, URL и других библиотеках.

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

 ,

unsigned
()

Выпуск LLVM 16

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

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

  • компилятор C/C++/Objective-C (Clang);
  • компилятор Fortran (Flang);
  • cтандартную библиотеку для С++ (libc++);
  • отладчик LLDB;
  • линкер LLD;
  • среду исполнения (runtime) для OpenMP;
  • некоторые другие компоненты.

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

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

 , ,

fsb4000
()

SciTE 5.3.4, Scintilla 5.3.4, Lexilla 5.2.3

SciTE 5.3.4, Scintilla 5.3.4, Lexilla 5.2.3
Группа Open Source

Состоялся выпуск 5.3.4 редактора текста SciTE и сопутствующих библиотек парсинга и редактирования кода.

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

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

 ,

dataman
()

msgpack C/C++ 6.0.0

Группа Open Source

Вышла новая версия msgpack for C/C++ — библиотеки сериализации двоичных данных на основе формата MessagePack.

Важные изменения:

  • имя С пакета в CMake изменено на msgpack-c;
  • имя С++ пакета в CMake изменено на msgpack-cxx;
  • удалено обязательное требование использования С++, если не используются тесты.

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

 , , , ,

dataman
()

SEZEII v2.8.3

SEZEII v2.8.3
Группа Мультимедиа

SEZEII — программа-видеоконвертор для Linux и Windows с поддержкой плагинов, накладывающая видеоэффекты без использования видеоредактора.

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

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

 , , , ,

HPW-dev
()

Выпуск Qt 6.4

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

Компания Qt Company опубликовала релиз фреймворка Qt 6.4, в котором продолжена работа по стабилизации и наращиванию функциональности ветки Qt 6. В Qt 6.4 обеспечена поддержка платформ Windows 10+, macOS 10.15+, Linux (Ubuntu 20.04, CentOS 8.2, openSUSE 15.3, SUSE 15 SP2), iOS 14+, Android 6+ (API 23+), webOS, WebAssembly, INTEGRITY и QNX. Исходные тексты компонентов Qt поставляются под лицензиями LGPLv3 и GPLv2.

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

>>> Подробности на портале opennet.ru

 ,

hobbit
()

Яндекс выложил в опенсорс userver — инструмент для создания высоконагруженных приложений

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

Интернет, 29 июля 2022 года. Яндекс опубликовал исходный код и документацию фреймворка userver. Это первый открытый набор инструментов, который позволяет создавать высоконагруженные приложения на языке С++ и протестирован на масштабах уровня Яндекса. Userver используют в Яндекс Go, Лавке, Доставке, Маркете, финтех-проектах и многих других сервисах компании. Фреймворк предоставляется по открытой лицензии Apache 2.0.

Userver лучше всего подходит для разработки приложений с микросервисной архитектурой. Изначально фреймворк разрабатывался в Такси, с его помощью команда перешла с монолитного приложения на архитектуру, которая позволяет разрабатывать отдельные независимые компоненты (микросервисы) и использовать их в разных приложениях.

Микросервисы автономны, поэтому приложение на подобной архитектуре легко обновлять и добавлять в него новые функции. Так, микросервис поиска водителя на заказы в Такси можно использовать для схожей задачи — например поиска курьера для выполнения заказов Яндекс Доставки. То же самое можно проделать и с расчетом времени прибытия водителя или курьера и многими другими задачами.

«Когда мы переходили на микросервисы, мы понимали, что новый фреймворк должен быть как можно проще для разработчиков и бизнеса. Поэтому userver создавали с акцентом на надёжность и удобство, а внутри него есть всё необходимое для разработки, диагностики, мониторинга, отладки и экспериментов. Например, userver подсказывает как исправить ошибки ещё на этапе компиляции, умеет работать с разными базами данных, менять параметры на лету и так далее. Он хорошо подходит для разработки приложений как в небольших, так и в крупных компаниях. И с помощью userver даже новичок может за неделю написать новый микросервис», — говорит Антон Полухин, один из авторов фреймворка и руководитель группы бэкенд-разработки решений для продуктовых команд RideTech и eCom.

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

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

 , , ,

anonymous
()

SEZEII v2.3: Новый плагин - эмулятор графики ZX Spectrum и MSX

SEZEII v2.3: Новый плагин - эмулятор графики ZX Spectrum и MSX
Группа Мультимедиа

В видеоконвертер SEZEII добавлен новый эффект, имитирующий тайловую палитровую графику компьютеров ZX Spectrum и MSX. Обработать можно видео в любом формате, и в результате вы получите стилизованное видео в lossless -качестве. Имитируется стандартная конфигурация Spectrum с областями 8x8 и стандартной палитрой, но эффект настраиваемый: можно выбирать любую палитру, размер блоков и дизеринг.

Видео-демонстрация

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

>>> Паблик программы

 , , , ,

HPW-dev
()

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
()