Roman
Или немножно руками задать floorplan
Roman
Но это всё уже трудозатратно
Evgenii
@zamazan4ik вот тебе еще оптимизаций - https://godbolt.org/g/815CBg
Alexander "SonnySlave"
Evgenii
Evgenii
на глаз у гцц
Evgenii
и посмотри как во второй функции гцц фейлится
Evgenii
дело реально в порядке операций https://godbolt.org/g/B5HjBw
Roman
где-нибудь в природе есть хорошая либа для runtime reflection для C++ ? Всё что я вижу на github похоже не развивается - даже пробовать страшно
Dr. Friedrich
Ну, Qt же что-то похожее реализует, да?
Dr. Friedrich
Я видел только чтоб реализацию из Qt использовали, там она достаточно «взрослая».
Dr. Friedrich
Ну да, это верно. А есть ли другие распространённые идеи для реализации runtime reflection?
Roman
Ну самая очевидная идея - использовать отладочную информацию.
Denis
Есть clreflect например.
Roman
Собираешь с отладочной информацией - получаешь рефлекшн.
Denis
Donald Williamson писал на базе кланга.
Denis
Я когда-то писал на базе макросов runtime reflection.
Roman
На базе макросов было что-то в boost
Roman
но это отстойно. должно быть автоматически всё
Denis
clreflect — последний коммит год назад.
Denis
автоматически всё — это в сишарп или джава. Или ждите, может в стандарте что-нибудь появится.
Denis
Там были интересные пропозалы на эту тему.
Roman
В стандарте более крутой вариант - статическая рефлексия
Denis
Оно уже попало в стандарт?
Roman
Нет ;) Ещё обсуждают. Когда я последний раз пробовал - работало не всё Например лямбды не работали
Denis
Я помню толк то ли Александреску, то ли Sutter рассказывали про какую-то штуку с классами забавную.
Denis
Про доопределения своих типов классов.
Denis
Забыл как это называлось.
Denis
Вот там он рефлекшон использовал активно.
Roman
саттер последнее время про метаклассы рассказывает
Denis
Дада.
Denis
Метаклассы.
Roman
там предполагается что рефлекшн уже есть, а это поверх него работает
Roman
Т.е. если рефлешн появится в 2025, то метаклассы где-нибудь в 2030 )
Denis
Можно не дожить короче.
Roman
В общем думаю в бусте должны озаботиться созданием библиотеки для runtime рефлексии на базе отладочной инфы
Denis
Не, там нету вроде. Не было в 2013 году по крайней мере.
Roman
В бусте уже есть либы которые отладочную информацию используют
Denis
Да? Круто.
Roman
Например boost stacktrace умеет выводить callstack
Roman
c реальными именами функций из отладочной инфы
Roman
В общем идея использовать отладочную инфу кажется здравой, но видимо мало кому нужно
Roman
А после того как в стандарте появится статическая рефлексия, то ещё меньше кому надо будет
Roman
С другой стороны при использовании статической рефлексии единственный способ программирования - TMP. Что не всегда удобно
Denis
Если надо на базе входных данных строить какое-нибудь дерево например из наследников узла разных, то рантайм рефлекшон удобнее. И сериализовать обратно из произвольной композиции таких узлов.
Roman
ну скорей всего на практике будет использоваться какая-то комбинация compile-time и runtime программирования
Roman
вот тут пример библиотеки сделанной на базе compile-time рефлекcии и TMP : http://matus-chochlik.github.io/mirror/doc/html/
Roman
Вот интересно, почему в С++ по умолчанию предпочитают unsafe методы?
например в std::array и std::vector operator[] индекс не проверяет, а at ( n ) проверяет
Roman
не логичнее ли было сделать наоборот?
Roman
по умолчанию safe вариант, если хочется перформанса, меняешь на at() где требуется
Roman
не один раз подрывался на этой хрени
Denis
Исторически сложилось так, что самые простые варианты самые производительные.
Denis
[] в си без проверок
Roman
ну в си вообще варианта с проверкой нет
Roman
что жалко
Roman
Пожалели size_t байт
Denis
Ты имей в виду, что на этих языках ещё для ембеда пишут.
Roman
Причем какой-нибудь new T[n] все равно сохраняет размер массива в память, если у T есть деструктор
Denis
Где такое поведение по умолчанию непозволительно.
Roman
Почему?
Denis
Потому что когда у тебя оперативная память в байтах ичисляется — ты не хочешь лишний оверхед.
Denis
И время конечно же.
Roman
Ну вот если памяти и перформанса не хватает, я отключу проверку
Roman
но дайте safety по умолчанию
Roman
расплата за эту ошибку как правило очень высокая
Roman
потому что перетереть можно случайно что угодно, можно даже segfault не получить, просто некорректную работу
Pepe 🐸
какждый доступ к элементу чтобы еще проверять это дорого
Denis
Можно. емнип, можно включить опцию компилятора, чтобы проверял.
Roman
почему дорого? одна проверка дорогая, все последующие дешевы
Roman
в процессоре единственная проблема подрузить размер массива
Roman
сделать проверку индекса ничего не стоит
Roman
ну смотри когда мы делаем первую проверку нужно загрузить размер массива из памяти
Roman
для всех последующих он уже в регистре