так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 09.02.26 03:55
Оценка:
прогнозы? к какому году, к примеру у мелгкомякгких появится..
Re: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 09.02.26 16:24
Оценка:
Здравствуйте, ботаныч, Вы писали:

Б>прогнозы? к какому году, к примеру у мелгкомякгких появится..


Да вы предлагаемый синтаксис видели? Он вам такой зачем?
И каждый день — без права на ошибку...
Re[2]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: sergii.p  
Дата: 09.02.26 17:06
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Да вы предлагаемый синтаксис видели? Он вам такой зачем?


а что в нём такого плохого?

Вот например рядом обсуждают задачу получения минимального значения из enum
template <typename E>
  requires std::is_enum_v<E>
constexpr auto enum_min()
{
    auto minVal = std::numeric_limits<std::underlying_type_t<E>>::max();

    template for (constexpr auto e : std::meta::enumerators_of(^E)) {
        const auto v = std::to_underlying([:e:]);
        if (v < minVal)
            minVal = v;
    }

    return minVal;
}

всяко лучше, чем костыли от magic_enum
Re[3]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 10.02.26 15:06
Оценка: +3
Здравствуйте, sergii.p, Вы писали:

BFE>>Да вы предлагаемый синтаксис видели? Он вам такой зачем?

SP>а что в нём такого плохого?
В примере ниже отчётливо видны проблемы синтаксиса.
Свойства объекта записываются в C++ как? Через модификатор доступа, т.е. через . или ->
a.size() — размер;
p->data() — данные.
Комитетчики добавили это для метаданных? Нет, они пишут сначала преобразование всего имени в метаобъект, а потом используют сишный (!) доступ к его свойствам:
std::meta::enumerators_of(^E)
Они просто издеваются над языком.
Эта запись должна выглядеть так:
E.entities

Далее, вот этот синтаксис [:e:] не нужен. То, что е — это метаобъект и так известно. Поэтому e.name должно давать имя, а e.value — значение.

Далее, template for не нужен. Код относящийся к рефлексии не может выполняться в рантайме, так что template тут лишний, поэтому, кстати, enum_min() должна быть consteval, а не constexpr.

В целом я бы записал этот пример так:
template <typename E>
  requires std::is_enum_v<E>
consteval E.underlying_type enum_min()
{
    auto minVal = E.underlying_type.max_value;

    for(auto e : E.entities)
    {
        const auto v = e.value;
        if (v < minVal)
            minVal = v;
    }
    return minVal;
}


— всё просто и понятно. Всё , что надо сделать, это продумать названия свойств, которые есть у метаобъектов. Причём эти свойства можно вводить постепенно, добавляя от версии к версии. Для начала — просто для чтения. Это уже решило бы 80% задач.

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

  Скрытый текст
SP>Вот например рядом обсуждают задачу получения минимального значения из enum
SP>
SP>template <typename E>
SP>  requires std::is_enum_v<E>
SP>constexpr auto enum_min()
SP>{
SP>    auto minVal = std::numeric_limits<std::underlying_type_t<E>>::max();

SP>    template for (constexpr auto e : std::meta::enumerators_of(^E)) {
SP>        const auto v = std::to_underlying([:e:]);
SP>        if (v < minVal)
SP>            minVal = v;
SP>    }

SP>    return minVal;
SP>}
SP>

SP>всяко лучше, чем костыли от magic_enum


Что же касается обсуждения рядом, то я могу лишь повториться: набор констант и перечисление — это два различных "метатипа". У нормального перечисления вообще нет значений. Если вам нужны значения, значит вам нужен набор констант, а не перечисление.
И каждый день — без права на ошибку...
Re[3]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: kov_serg Россия  
Дата: 10.02.26 19:22
Оценка: +1
Здравствуйте, sergii.p, Вы писали:

BFE>>Да вы предлагаемый синтаксис видели? Он вам такой зачем?


SP>а что в нём такого плохого?

Примерно всё плохо. Вместо языка запросов имеем псевдо c++. Что мешало использовать обычные строки вместо бяанов [::] ?
Нет возможности сохранить результат в файл или обратится к базе.
И потом этап синтеза кода лучше разделить, а не пихать всё в кучу умножая сложность.
Отредактировано 10.02.2026 19:22 kov_serg . Предыдущая версия .
Re[4]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: · Великобритания  
Дата: 26.02.26 09:53
Оценка:
Здравствуйте, B0FEE664, Вы писали:


BFE>Эта запись должна выглядеть так:

BFE>E.entities
А что делать, если в E уже есть имя entities? В лучшем случае что-то вроде std::meta<E>::entities.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 26.02.26 10:25
Оценка: +1
Здравствуйте, ·, Вы писали:

BFE>>Эта запись должна выглядеть так:

BFE>>E.entities
·>А что делать, если в E уже есть имя entities? В лучшем случае что-то вроде std::meta<E>::entities.

Ничего не делать. E.entities и E::entities — это доступ к разным значениям.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.