LINUX.ORG.RU

Первый альфа релиз ideal-couscous

 , ,


0

5

Первый альфа релиз ideal-couscous - библиотека(header only) для с++17 реализует статичную рефлексию (с ограничениями). Изменения после последней публикации:

  • Разбил хедеры и упорядочил их по категориям (метапрограммирование(metautils), информация о классах(info), функции рефлексии(utils)).
  • Переработал процесс сбора информации о рефлексии. Если раньше для каждого типа (объектные методы, статичные методы, переменные, и.т.д.) был свой кортеж информации и имен, и были свои функции работы с ними, то теперь это все унифицировано в два кортежа. Добавлены генераторы индексов, которые теперь отдают индекса элементов(например: индексы всех переменных), что позволило реализовать систему независимых плагинов, где теперь можно писать свою логику обработки информации тех или иных данных.
  • Добавлена doxygen документация (пока что просто пояснения по каждой функции или структуре/объекта)
  • Так как любая ошибка в вызове функций рефлексии, практически всегда генерировала адовую простыню ошибок (бывало по 200 строк(шаблоны, они такие) ), то во всех функций в пространстве utils теперь проводится статичные проверки на правильность входных данных (класс зарефлексирован, проверки выхода за границу, и.т.д.) и возвращается boost::hana::optional с данными или без (в будущем я, наверно, добавлю возможность отключения большинства проверок)
  • Добавлена возможность вынесения метаинформации за предел класса (OUT_METAINFO)
  • Добавлены туториалы где показываются как работает библиотека (расположена в examples/tutorial)
  • Изменил лицензию с GPLv3 на Apache 2.0

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

ссылка на проект



Последнее исправление: maxis11 (всего исправлений: 1)

Поглядел пару минут. Чег-то ограничений слишком дофига. А макросов - ещё больше. Так, что не понятно зачем там вообще C++17 (осбеннео с конструкциями вроде #define STRING_MAXLEN 128). Много грамматических ошибок в английском описании. Ещё не понятно зачем лицензия Apache 2.0, когда в зависимостях boost.

asaw ★★★★★
()

Советую ограничить ширину строк на 80/100 символов. А то простыня страшная.

RazrFalcon ★★★★★
()
Ответ на: комментарий от asaw

STRING_MAXLEN - да это такой грязный хак для создания constexpr метастроки(что-то типо string<'A','B','C',...>) из строкового литерала. Оригинальная реализация(BOOST_HANA_STRING) создает такую строку через лямбда функцию, что до не давнего времени не было constexpr операцией (по причине того, что большинство компиляторов не поддерживали constexpr лямбды). Я это реализовал через макросы(магия BOOST_PP_REPEAT), что выглядит не очень, зато работает как надо. По поводу С++17, то это скорее заготовка на будущее (хотя даже сейчас всякая мелочь используется типа std::is_*_t вместо std::is_*<...>::type). А по поводу лицензии, я их просто сел почитать на досуге и она мне в итоге больше всего понравилась.

maxis11
() автор топика

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

У вас основной проект использует c++17? Наверное релиз планируется к 2020 году, когда поддержка c++17 появится в компиляторах и все баги компиляторов и стандартной библиотеки пофиксятся.

andreyu ★★★★★
()
Ответ на: комментарий от RazrFalcon

Капец жуть.

Почему жуть? Удобно же.

// cat lib.h
inline namespace lib
{
   void foo(); // new foo
}

namespace lib_old
{
   void foo(); // old foo
}

// cat user_code.cpp
#include <lib.h>

foo(); // using new foo()
lib_old::foo(); // using old foo()
andreyu ★★★★★
()

2 Prerequisites

  • C++1z (clang 3.9+)
  • Boost.Hana
  • Boost.Preprocessor

закапывайте

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.