@ProCxx

Страница 2421 из 2477
Alexey
10.10.2018
13:31:01
но она не требует прямой поддержки компилятором

Igor
10.10.2018
13:31:09
Зачем вы кормите тролля?

Constantine
10.10.2018
13:31:28
Зачем вы кормите тролля?
Вы говорите будто никогда не флудили...

Google
Igor
10.10.2018
13:31:53
Зачем вы кормите тролля?
чтобы проникнуться его мудростью и научиться вбрасывать так же же

Alexey
10.10.2018
13:31:53
рефлексия становится действительно полезной только тогда, когда не надо писать кучу boilerplate-кода на каждый чих

Alexey
10.10.2018
13:32:25
как частный случай

Alexey
10.10.2018
13:34:39
от рефлексии я ожидаю систему выражения, отличную от работы с объектами языка

constexpr в контексте рефлексии выглядит притягиванием за уши

потому что разнородные сущности начинают выглядеть одинаково

Constantine
10.10.2018
13:35:51
Alexey
10.10.2018
13:36:13
я не против рефлексии в С++ в компайле, мне видятся уродливыми конструкции, с помощью которой они вводятся

ну например одно из классических применений - сериализация в текстовое представление (JSON, YAML, XML и т.п.)

когда нужно сопоставлять сущности их именам и наоборот

Google
Constantine
10.10.2018
13:37:49
ну например одно из классических применений - сериализация в текстовое представление (JSON, YAML, XML и т.п.)
это как раз та самая рефлексия в метаклассах, требует уметь в компильтайме перечислять поля класса

Alexey
10.10.2018
13:38:33
или замена специализаций с помощью enable_if

Constantine
10.10.2018
13:39:24
или замена специализаций с помощью enable_if
как она вообще относится к рефлексии?

Alexey
10.10.2018
13:40:38
метаинформация без лишнего кода и жутких выражений, без build-in приблуд специфичных для компилятора типа "тут у нас плоская структура без наследования и виртуальных методов"

вот как нужно написать constexpr if, чтобы обработать примитивные типы?

либо длинной портянкой, либо с большим количеством разных скобочек и двоеточий

вместо простых и лаконичных конструкций

когда структуры будут просты и лаконичны и хотя бы отдалённо напоминать что-то вида typeof(T).IsEnum, тогда С++ will become great again

Igor
10.10.2018
13:45:08
Вчера выложили неплохой толк Louis Dionne с CppCon про compile-time programming в будущих стандартах. В том числе краткий обзор пропозалов по рефлекшену - https://youtu.be/CRDNPwXDVp0?t=2283

Constantine
10.10.2018
13:45:26
когда структуры будут просты и лаконичны и хотя бы отдалённо напоминать что-то вида typeof(T).IsEnum, тогда С++ will become great again
тем, что вы предлагаете заменить более слабую конструкцию typeof(T).IsEnum на более сильную is_enum_v?

Alexey
10.10.2018
13:46:35
когда эти радости наконец будут доступны для использования, в том числе на embedded (не тот, который linux-based, а тот, который bare metal)?

ed
10.10.2018
13:46:55
is_enum_v<T> чем хуже?
Статикой же, ну..

ed
10.10.2018
13:47:45
не понимаю чем они отличаются
Компайлтайм и рантайм?

Constantine
10.10.2018
13:47:56
не понимаю чем они отличаются
набор вызываемых class member function не расширяем

Побитый
10.10.2018
13:48:41
Компайлтайм и рантайм?
И там и там надо знать тип T. Так что это та же статика

Google
Constantine
10.10.2018
13:48:42
вы не можете определить vector::is_single_element но можете is_single_element(vector)

Constantine
10.10.2018
13:49:31
Дак хорошо же?
что значит хорошо или плохо? не можете :)

Alexey
10.10.2018
13:49:59
а что, компайл-тайм аллокаторы уже завезли?

Побитый
10.10.2018
13:50:14
что значит хорошо или плохо? не можете :)
Ну раз не могу, значит вариант typeof(T).IsEnum хуже, чем is_enum_v<T> где я это могу. О чём я и говорил))

Constantine
10.10.2018
13:50:25
Дак хорошо же?
внешние предикаты реализуются по месту расширения, классы реализуются по месту класса

ed
10.10.2018
13:51:24
Alexey
10.10.2018
13:55:37
набор вызываемых class member function не расширяем
хотел бы я посмотреть на твои кровоточащие глаза и пальцы, когда ты будешь писать что-нибудь не вполне тривиальное, пригодное для использования в constexpr if

Constantine
10.10.2018
13:55:43
Ну раз не могу, значит вариант typeof(T).IsEnum хуже, чем is_enum_v<T> где я это могу. О чём я и говорил))
Короче есть вообще имхо, что использование ООП вне вопроса сокрытия способа записи состояния излишне (в том числе любая функция - член класса, которая может быть написана без доступа в protected/private, должна быть написана снаружи)

Constantine
10.10.2018
13:57:02
Согласен. Сам стараюсь так делать.
Угу. А для группировки по признакам придумали namespace :)

Alexey
10.10.2018
13:57:36
ой, а можно UFCS не только для операторов? ?

Constantine
10.10.2018
13:58:01
т.е. в идеале читаемости (но нельзя по причине +inf compilation time) std::type::is_enum_v

Constantine
10.10.2018
13:59:27
А почему это inf compilation time?
Объем объектника прямо пропорционален длине имен :)

Alexey
10.10.2018
14:00:13
Constantine
10.10.2018
14:01:49
спорное утверждение
поверьте, все, что там занимает место, это имена сущностей :)

Alexey
10.10.2018
14:02:24
-s на тебя

Google
Constantine
10.10.2018
14:05:22
не знаю про -s, но плюсовый компайлер обязан вывалить все инстанцированные шаблоны в объектник

Alexey
10.10.2018
14:06:20
под объектником ты понимаешь .o/.a/.obj или .so/.dll/.exe/.elf?

Constantine
10.10.2018
14:07:11
второе я называю бинарником)

объектник именно то, что передается от компилятора линковщику

Alexey
10.10.2018
14:08:08
ок

отогда да

Constantine
10.10.2018
14:08:17
и вот на этом этапе вы подрубается SSD/RAM потому что там идут громадные потоки данных

Constantine
10.10.2018
14:09:42
ну zapcc немного спасает ситуацию
это разностный который?

в любом случае как у меня горело от того, что замена std::function на самописную простейшую реализацию уменьшает объем на 15%!

Alexey
10.10.2018
14:11:14
ты уверен, что тебе этот объём критичен?

Alexander
10.10.2018
14:11:29
это разностный который?
это который кэширующий clang

Constantine
10.10.2018
14:11:38
я уверен, что 10ГБ с определенным сжатием... не мгновенно линкуется

Constantine
10.10.2018
14:12:04
смотря каким линкером
какая разница, ему надо 10ГБ вычитать

Alexey
10.10.2018
14:12:07
а ещё когда link-time optimization гоняется...

Alexander
10.10.2018
14:12:16
Alexey
10.10.2018
14:12:20
не обязательно

Alexander
10.10.2018
14:12:37
ну понятно, что от вычитки ты сильно не избавишься (только если не tmpfs)

Alexey
10.10.2018
14:12:56
внутри объектников тоже лукап-таблицы есть, и не обязательно что по всем объектникам идти придётся

Google
Constantine
10.10.2018
14:13:24
внутри объектников тоже лукап-таблицы есть, и не обязательно что по всем объектникам идти придётся
осталось выяснить, как обрабатывать объектники быстрее их суммарного объема :)

попытки лениво почитать фрагменты с диска обернется ужасными просадками

(экспериментировал с расчетом миллиардов позиций в 2048 :) )

Alexey
10.10.2018
14:14:23
писать в объектники намного больше, чем надо ?

а 10 гигов объектников на С++ - это open office какой-нибудь?

Constantine
10.10.2018
14:15:33
Там что-то вроде 10МБ на одну формочку

Alexey
10.10.2018
14:16:15
маньяк

а у тебя Celeron 666 какой-нибудь и веник на 40 гигов IDE

Constantine
10.10.2018
14:17:24
на машинках не экономят, это уж поверьте

самоубийц мало

понятно, что там на SSD всё

Pavel
10.10.2018
14:18:19
Скорее всего

Constantine
10.10.2018
14:18:47
Детали не знаю, знаю только, что чуть быстрее висящего рядом HDD для мусора работает :)

(экспериментировал с расчетом миллиардов позиций в 2048 :) )
в общем, определенные эксперименты с затратными по объемам памяти расчетами привели к тому, что идея частично подгружать что-то полный бред и нужно просто честно последовательно обрабатывать все

уверен, что все C++ линкеры делают ровно то же самое

Страница 2421 из 2477