170 похожих чатов

Извините мою темноту, коллеги. А зачем вы используете такую жесть

как type loopholes вообще в принципе, если кто-то вдруг? Я знаю о них теоретически, но хм.

41 ответов

43 просмотра

для сохранения стейта в компайлтайме? Шаблоны имеют много ограничений, а лупхолы позволяют их обойти. И у нас компайлтайм возможностей становится больше. Разве это плохо?

Konstantin-Vladimirov Автор вопроса
vile
для сохранения стейта в компайлтайме? Шаблоны имею...

Можно чуть более конкретных примеров?

vile
для сохранения стейта в компайлтайме? Шаблоны имею...

Писать такой код и поддерживать не очень приятно. Учитывая, что довольно небольшое количество программистов может сходу понять, как это всё работает

Например, Boost.PFR до C++17 использовал их. И, судя по последнему диалогу, они всё ещё могут оказаться в нём полезны. В каком-нибудь callback connector можно теги считать автоматически в рамках TU до C++20, пока у нас не было decltype([]{}): auto hello = "Hello, "; auto world= "World!"; auto f1 = obtain_connector<counter()>([hello](){ std::cout << str << std::endl;}); auto f2 = obtain_connector<counter()>([world](){ std::cout << world << std::endl;});

vile
для сохранения стейта в компайлтайме? Шаблоны имею...

Возможно, человечество что-то делает не так.

Stas
Писать такой код и поддерживать не очень приятно. ...

На самом деле, этот код, как и любой другой прекрасно скрывается за абстракциями. У него ряд других проблем

Stas
Писать такой код и поддерживать не очень приятно. ...

так это ж что-то явно библиотечное. А библиотека на то и библиотека, что её не пишет рядовой программист. Рядовой программист её подрубает, и ему знать не нужно, какая магия там отрабатывает

netricks
Возможно, человечество что-то делает не так.

имеет то, что имеем. Альтернатив толком нет

vile
так это ж что-то явно библиотечное. А библиотека н...

пока не увидет трейс раскрытия шаблонов 🤩

vile
имеет то, что имеем. Альтернатив толком нет

Работал в нашей конторе один товарищ, на шарпе писал. Рефлексию очень любил... Вот рефлексию любил он, а страдаю я.

А вот ещё один действительно интересный пример

Konstantin-Vladimirov Автор вопроса
Ofee Oficsu
Например, Boost.PFR до C++17 использовал их. И, су...

но согласись вместо этого лучше рефлексия и какой то специальный unique_type. Хотя прикол с типом лямбды тоже норм работает.

Konstantin Vladimirov
А почему в C++17 отказались?

Там, вроде, со structured binding информацию о полях агрегата можно вытащить без хранения глобального состояния на лупхолах. Но пример выше демонстрирует, что это решение иногда ломается

Konstantin-Vladimirov Автор вопроса
Ofee Oficsu
А вот ещё один действительно интересный пример

Очень интересно. Auto на корутинах. Вау =) Я пока не вполне понял где там эта техника, видимо надо изучить приложенный gist.

Konstantin Vladimirov
Очень интересно. Auto на корутинах. Вау =) Я пока ...

Там реализация завязывается на библиотеку unconstexpr, которая, собственно, и реализована вокруг лупхолов

Ofee Oficsu
Там, вроде, со structured binding информацию о пол...

на лупхолах тоже не работает. Я не очень понимаю как оно в pfr устроено внутри, мне нужны сами типы, а там апи такой что выдаёт только ссылки через get судя по всему

netricks
Работал в нашей конторе один товарищ, на шарпе пис...

это compile-time рефлексия. В C# она run-time, со всеми вытекающими

Konstantin Vladimirov
Очень интересно. Auto на корутинах. Вау =) Я пока ...

у меня нет, но можете посмотреть творчество Антона Полухина https://www.boost.org/doc/libs/master/doc/html/boost_pfr.html

vile
это compile-time рефлексия. В C# она run-time, со ...

Есть ли существенная разница...

netricks
Есть ли существенная разница...

конечно, есть. Баг в рантайме и баг в компайлтайме - это разные вещи

Alex Noname
на лупхолах тоже не работает. Я не очень понимаю к...

надо через detail лезть судя по всему во внутрь

vile
конечно, есть. Баг в рантайме и баг в компайлтайме...

Дело не в багах, а в запутанности архитектуры.

у Паши Крюкова на ближайшем C++Russia будет как раз практический пример, когда он type loophole применял для безболезненного переключения AoS/ SoA https://cppconf.ru/talks/interchangeable-aos-and-soa-containers/

vile
для сохранения стейта в компайлтайме? Шаблоны имею...

Плохо, потому что это могут пофиксить в любой момент

Kirill Bolshakov
Плохо, потому что это могут пофиксить в любой моме...

что угодно могут "пофиксить" в любой момент

vile
что угодно могут "пофиксить" в любой момент

только проблема в том, что type loophole это дыра в стандарте, а не запланированное поведение

다니엘(줄리아)
только проблема в том, что type loophole это дыра ...

начнём с того, что нас не особо волнует, что там в стандарте, нам лишь важно, чтобы реализации могли в лупхолы далее, в стандарте много таких незапланированных дыр, и ничего, многие до сих пор живы. Просто потому, что их уже не выпилить просто так. Этот "баг" уже 7 лет фиксят, никак не нафиксят. Это хорошо, значит, статической рефлексии быть

vile
что угодно могут "пофиксить" в любой момент

Нет, нормальные фичи стараются не ломать

vile
начнём с того, что нас не особо волнует, что там в...

>> что нас не особо волнует, что там в стандарте, нам лишь важно, чтобы реализации могли в лупхолы А потом у нас прод падает

Kirill Bolshakov
Нет, нормальные фичи стараются не ломать

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

vile
лупхолы - это хорошая фича, однако её норовят слом...

Как раз стат. рефлексию планируют добавить, ало

vile
лупхолы - это хорошая фича, однако её норовят слом...

лупхолы это таки костыль, а не хорошая фича. Точно так же как enable_if это костыль

Kirill Bolshakov
Как раз стат. рефлексию планируют добавить, ало

ну вот когда добавят - тогда посмотрим. А пока - руки прочь

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта