Roman
Или немножно руками задать floorplan
Roman
Но это всё уже трудозатратно
Дмитрий ⬡
самый жырный формат, для хранения не оч
Для хранения да, я и предлагаю — если приспичило посимвольно что-то делать.
Evgenii
@zamazan4ik вот тебе еще оптимизаций - https://godbolt.org/g/815CBg
Alexander "SonnySlave"
@zamazan4ik вот тебе еще оптимизаций - https://godbolt.org/g/815CBg
да я видел, как ты там гадишь в issue 😊
Evgenii
да я видел, как ты там гадишь в issue 😊
лень мануалы копать, у кого быстрее
Evgenii
на глаз у гцц
Evgenii
и посмотри как во второй функции гцц фейлится
Evgenii
дело реально в порядке операций https://godbolt.org/g/B5HjBw
Roman
где-нибудь в природе есть хорошая либа для runtime reflection для C++ ? Всё что я вижу на github похоже не развивается - даже пробовать страшно
Dr. Friedrich
Ну, Qt же что-то похожее реализует, да?
Dr. Friedrich
Я видел только чтоб реализацию из Qt использовали, там она достаточно «взрослая».
Denis
Я видел только чтоб реализацию из Qt использовали, там она достаточно «взрослая».
она норм, если нет проблем с тем, что она добавляет нехилый оверхед. По сути, каждое свойство или видимый метод - лишняя строка и все сравнивается на уровне строк
Dr. Friedrich
Ну да, это верно. А есть ли другие распространённые идеи для реализации runtime reflection?
Roman
Ну самая очевидная идея - использовать отладочную информацию.
Denis
Есть clreflect например.
Roman
Собираешь с отладочной информацией - получаешь рефлекшн.
Denis
Donald Williamson писал на базе кланга.
Denis
Я когда-то писал на базе макросов runtime reflection.
Roman
Есть clreflect например.
тоже похоже мертвый проект
Roman
На базе макросов было что-то в boost
Roman
но это отстойно. должно быть автоматически всё
Denis
clreflect — последний коммит год назад.
Dr. Friedrich
Ну самая очевидная идея - использовать отладочную информацию.
Мне она, признаться, очевидной не кажется. Но вот то, что эта идея интересная — это да.
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
Потому что когда у тебя оперативная память в байтах ичисляется — ты не хочешь лишний оверхед.
Pepe 🐸
Пожалели size_t байт
а процессорное время на проверку?
Denis
И время конечно же.
Roman
Ну вот если памяти и перформанса не хватает, я отключу проверку
Roman
но дайте safety по умолчанию
Roman
расплата за эту ошибку как правило очень высокая
Pepe 🐸
но дайте safety по умолчанию
да не, за индексами надо самому следить по умолчанию
Roman
потому что перетереть можно случайно что угодно, можно даже segfault не получить, просто некорректную работу
Pepe 🐸
какждый доступ к элементу чтобы еще проверять это дорого
Denis
Можно. емнип, можно включить опцию компилятора, чтобы проверял.
Roman
почему дорого? одна проверка дорогая, все последующие дешевы
Roman
в процессоре единственная проблема подрузить размер массива
Roman
сделать проверку индекса ничего не стоит
Pepe 🐸
почему дорого? одна проверка дорогая, все последующие дешевы
почему одна? не понял, может я не понимаю как можно сделать
Roman
ну смотри когда мы делаем первую проверку нужно загрузить размер массива из памяти
Roman
для всех последующих он уже в регистре