LINUX.ORG.RU

Комитет не может остановиться..

 , ,


1

4

Привет, ЛОР!

Я просто оставлю это здесь: https://isocpp.org/files/papers/P2996R4.html

Для Ъ: в C++26 будет добавлена поддержка статической рефлексии. Теперь C++ будет компилироваться ЕЩЁ ДОЛЬШЕ.

Ответ на: комментарий от anonymous

последние две ссылки в PostScript.gz – текст диссертации К. Книжника с обзорами различных ООСУБД и примерами того, как (и зачем) он рефлексию в С++ реализовал.

вот понадобился ему метаобъектный протокол, MOP из лиспа.

и – взял, и реализовал его в С++. а потом на МОП сделал слои для логирования, поддержки транзакций, и т.п.

для MОП он реализовал рефлексию на С++.

в тексте диссера и в исходниках – битхаки, как именно реализовал.

«Аспектный подход к созданию ООСУБД» глава 2 обзор ООСУБД GemStone, ONTOS, ObjectStore, Versant, ITASCA, Objectivity/DB, O2, MATISSE глава 3 устройство GOODS глава 4 метаобъекты в GOODS АОП. Транзакции реализованы через метаобъекты через МОП.

глава 3 архитектура GOODS

стр 171: <…>

для упрощения регистрации класса в бд в GOODS было создано два макроопределения, определяющих прототипы и стандартную реализацию методов, предоставляющих метаинформацию о классе:

#define METACLASS_DECLARATIONS(CLASS, BASE_CLASS)         \
  static class_descriptor self_class;                     \
  static object* constructor(hnd_t hnd, class_descriptor& desc, \
                             size_t varying_size);              \  
  CLASS(hnd_t hnd, class_descriptor& desc, size_t varying_size) \
  : BASE_CLASS(hnd, desc, varying_size) {} \
  friend class_descriptor& classof(CLASS const*); \
  virtual field_descriptor& describe_components()

#define REGISTER(CLASS, BAE, MOP)                          \
 class_descriptor& classof(CLASS const*)                   \
 {return CLASS::self_class; }                              \
 object* CLASS::constructor(hnd_t hnd,                     \
                class_descriptor& desc, size_t var_len)    \
 {return new (desc, var_len) CLASS(hnd, desc, var_len); }  \
 class_descriptor CLASS::self_class(#CLASS,                \
                                    sizeof(CLASS),         \
                                    &MOP,                  \
                                    CLASS::constructor,    \
                                    &BASE::self_class)    

Пояснить использование этих методов лучше всего на примере:

class Money {
 public:
  nat1 currency; nat8 amount;
 
  field_descriptor& describe_components() {
    return FIELD(currency), FIELD(amount);
  }
  inline friend field_descriptor& describe_field(Money& m) {
     return m.describe_components();
  }
};

class Account: public object {
 protected:
   Money total;
   Data history[ACCOUNT_HISTORY_SIZE];
     char name[1]; //acc's name
 public:
   METACLASS_DECLARATIONS( Account, object);
   static Account* create(char* name, Money initSum);
};

field_descriptor& Account::describe_components()
{ 
   return FIELD(total), ARRAY(history), VARYING(name);
}

REGISTER(Account, object, repeatable_read_pessimistic_scheme);

стр. 172

исходники в приложение А стр 180 приложении В стр 184

с этими и похожими макросами.

оттуда понятно, как реализована рефлексия.

ну и т.п. (в остальных исходниках ООСУБД GOODS).

anonymous
()
Ответ на: комментарий от anonymous

Одна из проблем C++ в том, что он с каждым стандартом становится всё более нечитаемым говном.

На фоне растишки еще ничего. И лямбды всяко читабельнее раньших велосипедов.

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

Можно поступить проще: дать компилятору флаг -ansi и вернуться к нормальному С++ 1992 года.

взять cfront 2.0 и gcc 3 под Plan 9

Suckless как говорится,

когда оно ещё не скатилось в полное <…>

anonymous
()
Ответ на: комментарий от anonymous

взять cfront 2.0 и gcc 3 под Plan 9

3.0 было бы интереснее. ЕМНИП там шаблоны, пространства имен.

когда оно ещё не скатилось в полное <…>

Во-во. Чем проще, тем лучше.

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

Мне пофиг на них. Просто я их говном пользоваться не собираюсь и другим не советую. На С++ можно писать неплохой ООП код. Но макаки из ISO считают, что процедурное говно из STL это шикарное решение. Пусть считают, их право.

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

А если писать в ООП стиле, то у вектора был бы метод find, который принимает константную ссылку на искомое значение, необязательный параметр — итератор на начало, необязательный параметр — итератор на конец, и возвращал бы итератор, который мог бы деградировать до bool (сравнение с итератором на элемент после последнего).

Итого этот код выглядел бы как-то так:

Vector<int> vec;
Iterator<int> it;
if (it = vec.find(123)) {
    ...
}

И это все возможно в самом обычном ANSI C++. И самое главное, это так же быстро, как в STL.

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

Реализации «новых смартпоинтеров» появились лет за 10-15 до ISO C++11. И эти классы (по крайней мере std::unique_ptr < T[] > и std::unique_ptr < T > ) очень простые.

Кстати как же они реализованы без move-семантики?

static_lab ★★★★★
()

Немного почитал примеры кода - мне нравится, это выразительно и даёт фичи, которых нету в других ЯП с рефлексией.

Нужно понимать, что для рядового джуна-миддла на галере ничего толком не изменится - рефлексия с прочая металогика обязательна на фундаментальном уровне - построение фреймворков, игровых движков… С помощью рефлексии можно делать более выразительное и удобное апи, используя которое можно не догадываться о существовании рефлексии и прочих подобных штуковин.

Запрос на рефлексию огромен, GTK, Qt, каждый первый игровой движок, не прибитый к одному жанру игр, сделали на коленке свою ограниченную рефлексию, не дождавшись «официальной», но РЕАЛИЗОВАННЫЕ варианты в этом документе - мощнее и удобнее всего, что сделали до этого.

arturianec100
()
Ответ на: комментарий от arturianec100

для рядового джуна-миддла на галере ничего толком не изменится

Ага, потому что там C++ никто не трогает.

Запрос на рефлексию огромен, GTK

И там тоже. У гнумеров аллергия на плюсцы.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от static_lab

И эта шаблонная магия такая простая по-вашему?

Плюсы – это не про простоту. Плюсы – это про жонглирование особой магией со 100500 способов выстрелить себе в задницу из гранатомёта так, что разорвёт всё вокруг. Это про дебильные вопросы на собеседованиях типа «у нас в заголовке класс с запрещённым конструктором копирования, как нам копировать объекты этого класса» и «напишите на C++ код, который будет компилироваться ровно вот в этот код ассемблере»[1]. Плюсы – это когда сборка одного единственного файла может занимать 5 минут и выжрать несколько гигабайт памяти, заставляя городить кросскомпиляцию чтобы собирать под 32-битные платформы. Это абсолютно убогие инструменты разработки и сборки, которые были бы позором 15 лет назад, а сегодня уже как-то совсем не смешно. Это когда программа из двух строчек выдаёт ошибку компиляции на три экрана, и ты полчаса сидишь и пытаешься вкурить, что же произошло (особенно когда в коде есть Boost или Qt). Это когда в языке специально оставляют совместимость с костылями 50-летней давности (типа однопроходных компиляторов), потому что «тут так принято», хотя по факту нет ни одной причины их не выкинуть.

При всём при этом, самое удивительное в том, что ржавый получился местами ещё хуже, ХОТЯ КАЗАЛОСЬ БЫ КАК МОЖНО ВООБЩЕ СДЕЛАТЬ ХУЖЕ-ТО!

[1] не шучу. Я реально такой вот вопрос встречал.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 2)

… в C++26 будет добавлена поддержка статической рефлексии. Теперь C++ будет компилироваться ЕЩЁ ДОЛЬШЕ.

Старперы поздно спохватились с внедрением новшеств в язык. Если в правительстве США открыто высказались за то, чтобы новые проекты на Си++ не начинать, то кто из руководителей крупных предприятий по разработке ПО станет это сейчас делать? Вслед за крупными предприятиями и малые предприятия поступят сходным образом ибо подрядчик поперек заказчика никогда не пойдет, если хочет получить денег от него.

А если новых проектов на Си++ не предвидится, то какой смысл изучать новшества Си++? Чтобы копошиться в старье вполне достаточно старых знаний. Стоит ли оставаться на Си++? - Думаю, что разумным людям понятно, что пора потихоньку двигаться подальше от Си++, если нужен рост по службе и в размере жалования.

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

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

Текущее метапрограммирование - это sfinae поверх агрегатов с перебором кучи вариантов, пока звёзды не сойдутся, причём в подавляющем большинстве случаев в заголовках. Сверху оно приправлено __PRETTY_FUNCTION__ и прочими компиляторо-зависимыми костылями. И всё это передаётся через index sequence и прочие типы. Быстрым это быть не может.

Нормально сделанная рефлексия позволяет получить информацию сразу из AST (где она уже есть), без создания сотен промежуточных типов и их хранения.

ЗЫЖ А именно утвердили, что точно будет? А то в 20-ых рефлексию тоже очень активно обсуждали, только вот перенесли. Если в 26-ом будет, то это просто замечательно.

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

Нормально сделанная рефлексия позволяет получить информацию сразу из AST (

Не, можно много проще (но в нынешнем компиляторе C++ похоже не судьба уже).

С каждым релизом синтаксис C++ становится хуже.
Это Microsoft «воду мутит».

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 4)
Ответ на: комментарий от anonymous

это ж местный шиз

Гиппократ, у меня практически своя 1С а-ля 1С 7.7 разработана.
Расскажи о своих достижениях.
Похоже достижения лишь в области похамить другим.

На форуме к сожалению неадекватов много.
В психушках охрана плохая.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 1)
Ответ на: комментарий от Forum0888

Гиппократ, у меня практически своя 1С а-ля 1С 7.7 разработана.

"– Но, доктор, моему соседу уже 80 и он говорит, что еще может…

– Ну так и вы говорите, говорите."

Реально вы задолбали прибегать в темы про C++ и хвастаться тем, что у вас, якобы есть. Вы либо код показывайте, либо фонтан это самое.

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

Один макрос всего для приватных методов каста к классу move-ссылки. И то он нужен только для того, чтобы не писать одно и тоже в каждом классе, можно и без него обойтись, но как по мне THIS_CLASS_IS_MOVABLE(classname) выглядит выразительнее.

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

Реально вы задолбали прибегать в темы про C++ и хвастаться тем, что у вас,

Не хвастаюсь, а говорю о реально уже разработанном API.
Много нового API разработал.
Упрёк принимаю на счёт того, что код не публикую.
То что разработано это не враньё.
Публиковать не буду так как это новая технология.

Обещаю больше C++ не критиковать.
Мне потуги комитета вовсе не нужны, да и критиковать их нет никакого смысла.

Ещё раз, в моих постах вранья не было.
В продакшен на предриятии используется и всё ok (код тщательно оттестирован)!

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от Forum0888

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

Да, запускаю это на своей наносервисной ОС.

anonymous
()
Ответ на: комментарий от Enthusiast

Какие «новшества», в кресты тащят абсолютно всё, что гвоздями не прибито, но не думают, нужно ли оно вообще в языке или нет (не говорю о конкретных изменениях в топике, я так, в целом).

Да и начхать про то, что там правительства говорят по поводу языков программирования. Там просто у отделения PR на повестке дня либо LGBTQ, либо раст. Кот бы программировал софт, который потом всё равно не придётся выкидывать.

Bfgeshka ★★★★★
()