-
- Метапрограммирование не решается внешним шаблонизатором. Потому, что последний работает исключительно на уровне исходного текста. Это совсем не то, потому, что шаблоны в C++ работают не на уровне отдельных буковок, а в пространстве типов языка. Это совсем другая история. Чтоб повторить то же самое во внешнем макропроцессоре на нём придётся написать половину компилятора C++, что очевидно невозможно. Внешний шаблонизатор не сможет, например, генерировать разный код в fk0(471 знак., 02.10.2020 10:43)
- В чём кошмар? Оптимизатор не идеален и работает как может? И в чём
проблема? Лучше так, чем никак. На других языках часто получается
вообще никак, всегда плохонько оптимизированный код. C++ даёт
возможность, но насколько она будет использована -- влияет масса
других факторов. Но хотя бы сама возможность она есть. У других же
и теоретической возможности нет оказывается. И зачем сразу
ассемблер. Он нужен чтоб посмотреть его и разобраться, и в
исходнике на C++ подтолкнуть fk0(430 знак., 02.10.2020 10:33)
- Кошмар в том что если это не абстрактное ускорение программы, а
оптимизация конкретного участка. В котором есть только 2 вариант:
работает как надо когда правильно оптимизированно и скорость
непримемлема в другом. Опираться на оптимизатор невозможно, нужно
сразу писать на асме. А общая оптимизация не так и важна, либо бы
она была не сильно хуже чем у конкурентов, что собственно llvm
обеспечивает широкому кругу языков. - Kabdim(02.10.2020 12:42)
- Развивая твою мысль дальше, для любой функции опираться на
оптимизатор невозможно, т.к. он даёт не гарантированный результат,
и нужно писать на асме... Однако ж пишут на C++. Последний как раз
и даёт возможность построить промежуточный код для LLVM таким
образом, что он может быть оптимизирован. А программирование где
динамический полиморфизм через таблицу виртуальных функций -- не
даёт (что в таблице не известно -- оптимизатор останавливается и
генерируется исключительно fk0(30 знак., 02.10.2020 13:14)
- Странное развитие, повторю поинты: Kabdim(468 знак., 02.10.2020 17:45)
- Это не совсем так или совсем не так. Иногда нужны средние
показатели. Например, чтоб размер бинарника влезал в flash-память
вообще-то для начала. Или чтоб какой-либо компонент в среднем,
работал попросту с приемлимой скоростью (пример: переключение
программ в телевизоре быстрей, чем за две секунды). И
оптимизирующий компилятор не в этом, так в другом месте даст
хороший средний результат. Вариант же "всё оптимально руками
переписать на C/ассемблере" для ПО со сроками fk0(37 знак., 02.10.2020 18:11)
- А почему ты все время подразумеваешь что я предлагаю всё переписать, хотя явно везде повторяю что тормоза всегда
концентрируется в маленьком участке кода? - Kabdim(02.10.2020 18:14)
- Потому, что бывает, что нет такого кусочка. Бывает когда когда
генерируется по месту, в зависимости от конкретного типа здесь и
сейчас, с помощью ненавистного тебе метапрограммирования. И
получается масса статических функций которые на ура инлайнятся.
Если убрать шаблоны -- можно сделать в лоб, перенеся всё, что делал
компилятор в рантайм. Но и скорость работы такой реализации очень
не понравится. И хуже того её ещё тестировать теперь в рантайме на
всех возможных вариантах fk0(503 знак., 02.10.2020 18:46)
- Можно пример программы которая равномерно использует весь свой код и хотя бы выбивается из закона Парето? - Kabdim(02.10.2020 19:29)
- Потому, что бывает, что нет такого кусочка. Бывает когда когда
генерируется по месту, в зависимости от конкретного типа здесь и
сейчас, с помощью ненавистного тебе метапрограммирования. И
получается масса статических функций которые на ура инлайнятся.
Если убрать шаблоны -- можно сделать в лоб, перенеся всё, что делал
компилятор в рантайм. Но и скорость работы такой реализации очень
не понравится. И хуже того её ещё тестировать теперь в рантайме на
всех возможных вариантах fk0(503 знак., 02.10.2020 18:46)
- А почему ты все время подразумеваешь что я предлагаю всё переписать, хотя явно везде повторяю что тормоза всегда
концентрируется в маленьком участке кода? - Kabdim(02.10.2020 18:14)
- Это не совсем так или совсем не так. Иногда нужны средние
показатели. Например, чтоб размер бинарника влезал в flash-память
вообще-то для начала. Или чтоб какой-либо компонент в среднем,
работал попросту с приемлимой скоростью (пример: переключение
программ в телевизоре быстрей, чем за две секунды). И
оптимизирующий компилятор не в этом, так в другом месте даст
хороший средний результат. Вариант же "всё оптимально руками
переписать на C/ассемблере" для ПО со сроками fk0(37 знак., 02.10.2020 18:11)
- Странное развитие, повторю поинты: Kabdim(468 знак., 02.10.2020 17:45)
- Развивая твою мысль дальше, для любой функции опираться на
оптимизатор невозможно, т.к. он даёт не гарантированный результат,
и нужно писать на асме... Однако ж пишут на C++. Последний как раз
и даёт возможность построить промежуточный код для LLVM таким
образом, что он может быть оптимизирован. А программирование где
динамический полиморфизм через таблицу виртуальных функций -- не
даёт (что в таблице не известно -- оптимизатор останавливается и
генерируется исключительно fk0(30 знак., 02.10.2020 13:14)
- Кошмар в том что если это не абстрактное ускорение программы, а
оптимизация конкретного участка. В котором есть только 2 вариант:
работает как надо когда правильно оптимизированно и скорость
непримемлема в другом. Опираться на оптимизатор невозможно, нужно
сразу писать на асме. А общая оптимизация не так и важна, либо бы
она была не сильно хуже чем у конкурентов, что собственно llvm
обеспечивает широкому кругу языков. - Kabdim(02.10.2020 12:42)
- С другими языками и совместимостью с C -- большие проблемы из-за: fk0(945 знак., 02.10.2020 10:27)
- Поэтому лучший вариант для не C/C++, что я видел - LuaJIT FFI - lloyd(03.10.2020 20:08)
- Всё перечисленное есть, только руками обычно всё это делать не нужно. Берется SWIG или что-то в этом роде и забывается. - Kabdim(02.10.2020 12:37)
- Так или иначе C++ широко используется при создании ОС и компонентов ОС. На C++ вообще хотя бы возможно создавать ОС. Ничего никуда "падать" при нормальном программировании не должно. Там самая большая проблема на самом деле -- ABI. Поэтому интерфейсы должны оставаться сишными. Создать же ОС на Java или C# прямо скажем сложно... Многие RTOS написаны на C++. - fk0(02.10.2020 10:19)
- Следуя такой логике (пункт 1) язык C нужно вообще закопать. В руках
вчерашнего студента он может быть ещё более страшен. Но ведь живёт
и здравствует. У каждого своя ниша. Очевидно, что C++ в ту область,
где работают студенты с околонулевым опытом -- не попадает. Это
язык для профессионалов с многолетним опытом работы. Это язык для
создания высокоэффективных и надёжных программ. Он не эффективерн в
области "веб дизайна" (высокая сложность и низкая скорость
разработки), в fk0(496 знак., 02.10.2020 10:15)
- Рынок постепенно закапывает, процесс не быстрый. Например график
отсюда в 2000 у C++ 15% в в 2020 уже 5% это падение то ли из-за
выдающихся качеств, то ли задачи в среднем стали настолько простыми
что C++ слишком гибкий для них. - Kabdim(02.10.2020 18:24, ссылка)
- Про то, что C++ завтра станет бесполезным уже слышно 20 лет... C++ не на пике популярности, но очевидно никуда не денется и учить C++ имеет смысл -- эти знания пригодятся и через 20 лет. А учить очередной web-фреймворк или очередные микрософтовские API -- бесполезно, они через 5 лет всё действительно поменяют или закопают, не впервой. Особенно вспоминается Go, что-то про него помалкивают в последнее время. - fk0(02.10.2020 18:51)
- Рынок постепенно закапывает, процесс не быстрый. Например график
отсюда в 2000 у C++ 15% в в 2020 уже 5% это падение то ли из-за
выдающихся качеств, то ли задачи в среднем стали настолько простыми
что C++ слишком гибкий для них. - Kabdim(02.10.2020 18:24, ссылка)