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

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

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

41 ответов

41 просмотр

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

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
Как раз стат. рефлексию планируют добавить, ало

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

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
9
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта