Здравствуйте, jazzer, Вы писали:
J>https://youtu.be/6nsyX37nsRs
J>Кто боялся — смотрите видео и не бойтесь больше.
J>З.Ы. Разве что кваз цитирование не помешало бы. Но посмотрим, что примут в результате. J>Если примут — в моем коде исчезнет почти всё метапрограммирование на шаблонах и всё на препроцессоре, а код станет читабельнее в разы и компилироваться будет мгновенно, по сравнению с сейчас.
смущает наличие составных функций типа is_base_of_base_of_base_of_base_function_contains_property(); Обычно когда так проектируют все кончается cmakе-ом или в лучшем случае киздецом.
Здравствуйте, Мёртвый Даун, Вы писали:
МД>Отчасти согласен. Но в связи с этим это и превращается в тупую гонку стопицотого фреймворка JS. Ломать последнюю цитадель консерватизма, надежности и гибкости — лишнее.
Так метапрограммирование "на компиляторе" на порядок надежнее и гибче, чем метапрограммирование на шаблонах и препроцессоре, не говоря уже о внешней кодогенерации типа какого-нть moc, swig и прочих ужасов, которые почти всегда требуют, чтоб ты готовил им файлы определенным образом (чтобы их убогий парсер не скрючило), а то и вообще писал специальные файлы на их птичьем языке (IDL, к примеру).
Просто потому, что ты можешь заточить генерацию, основываясь на реальной информации, доступной компилятору (типы, члены, имена, размеры и выравнивания полей, наличие или отсутствие чего-то с конкретным типом/сигнатурой и т.п.), а не пользоваться эвристиками (которые всегда найдут, на чем сломаться) или зубодробительными указаниями, которые требуют еще одного языка в языке специально для этих целей.
Здравствуйте, denisko, Вы писали:
D>смущает наличие составных функций типа is_base_of_base_of_base_of_base_function_contains_property(); Обычно когда так проектируют все кончается cmakе-ом или в лучшем случае киздецом.
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, jazzer, Вы писали:
J>>Но на видео все очень понятно, рекомендую посмотреть за обедом
NB>смысла нет. до 20 года все кучу раз переделают.
Update от Саттера насчет С++20:
...there is zero chance of this being in C++20. Besides that this needs further development and trying out at increasing scales in more domains, the door for C++20 features closes in two years and this depends on two other features (reflection and compile-time programming) of which only one (reflection) is even yet in progress toward becoming a draft TS itself.
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, denisko, Вы писали:
D>>смущает наличие составных функций типа is_base_of_base_of_base_of_base_function_contains_property(); Обычно когда так проектируют все кончается cmakе-ом или в лучшем случае киздецом.
J>Сорри, ткни пальцем, где ты это увидел?
Нафига is_virtual_in_base_class вместо (this.has_base_class() && this.base_class.is_virtual(f)) и что он должен вернуть в ситуации
1) Если такой функции нет в базовом классе
2) если нет базового класса
Здравствуйте, Мёртвый Даун, Вы писали:
J>>Кто боялся — смотрите видео и не бойтесь больше. МД>Это всё баловство. Развлечение для студентов. Не будет этого в промышленном коде еще очень долго. МД>Вот столько уже всего наизобретали, но тут подавляющее большинство видимо никогда не делало промышленный код либо никогда просто не участвовало в очень огромных проектах которые начинались в очень лохматых 90-ых годах, и которые до сих пор работают.
Вот как раз в промышленном коде метапрограммирование очень нужно и востребовано, но не для генерации кода, а для наложения на него (на код) ограничений. Для каждого класса можно написать внешний по отношению к нему код проверяющий соответствие некому стандартному подходу разработки. Если постановлено, что никакой метод начинающийся на get_... не может возвращать ссылки, то пишем проверяющий данное правило код и весь неверный код перестаёт компилироваться. Т.е. мы получаем unit test времени компиляции, а не выполнения.
Здравствуйте, denisko, Вы писали:
D>>>смущает наличие составных функций типа is_base_of_base_of_base_of_base_function_contains_property(); Обычно когда так проектируют все кончается cmakе-ом или в лучшем случае киздецом.
Ну ты докопался до столба
У них вообще пока нет никакого более-менее законченного предложения про то, каким именно будет API и из каких функций он будет состоять. Это статья была (и выступление, которое на нем основано) — просто для оценки, насколько народ (и комитет) вообще готов принять такую фичу в таком виде.
Плюс оно все в любом случае будет базироваться на рефлексии, которую сейчас активно обсуждают (там в работе предложений 5 как минимум, о разных аспектах оной).
Конкретно про функции там http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0670r0.html и в нем есть пока просто is_virtual/is_pure_virtual/is_override, безо всяких base. Правда, непонятно, что там с унаследованными, но не переопределенными, но, опять же, это не финальный дизайн, естественно, такого маразма, как ты написал, никто предлагать не будет. Как вариант, должна быть просто рефлексия по всем унаследованным членам, типа
for ( auto f: $class.inherited().functions() )
{
if ( f.is_virtual() && ! $class.member[f.name()].is_override() )
error("override missing");
}
Здравствуйте, jazzer, Вы писали:
_NN>>Здравствуйте, jazzer, Вы писали: _NN>>Без упоминания сами-знаете-чего как-то скучновато J>Догадайся с полраза, почему J>http://www.rsdn.org/forum/trash/5283252 J>http://www.rsdn.org/forum/trash/5304078
Да мы все в курсе про язык который упоминать нельзя.. Но ссылки что-то не открываются, надо www убрать.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
J>>у меня в моем промышленном коде это очень даже нужно.
J>>Далее, как насчёт Qt? IDL? C++/CLI? ProtoBuf?
V>Протобаф это ужас, летящий на крыльях ночи.
Здравствуйте, Aleх, Вы писали:
A>Можешь раскрыть мысль?
ну, как минимум — тотальный тормоз, у которого хваленная компактная сериализация мало того, что не компактит, так еще и дико тормозит: https://github.com/niXman/cpp-serializers
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, jazzer, Вы писали:
J>З.Ы. Разве что кваз цитирование не помешало бы.
На 41:55 это практически оно и есть, там где инжектится кусок кода с подстановкой. Но, скорей всего, без доступа к дереву самой цитаты — то есть видимо всё что с ним можно сделать это заинжектить (что является основным use-case'ом).