LINUX.ORG.RU

322
Всего сообщений: 4288

Яндекс выложил в опенсорс 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 добавлен новый эффект, имитирующий тайловую палитровую графику компьютеров 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

Группа Игры

Разработчики 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

Группа Игры

Кроссплатформенный порт 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 ()

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