-
- Добавлю про метопрограммирование. Когда я по взглядам был ближе к
твоей точке зрения, понадобилось мне не простая, но и не сложная
парсилка текста. Решил сделать библиотекой на мете, а именно на
boost::Spirit. Получалось красиво, но по мере приближения %
реализованного к задуманному время компиляции не сложного проекта
уверенно подбиралось к 10 минутам. Что приводило к чудовищным
потерям моих временных ресурсов. Это изрядно меня озадачило, сделал
то же самое руками, Kabdim(562 знак., 25.09.2020 16:09)
- Ты пытаешьсая упорно подвести к тезису, мол в языке есть некоторый
функционал позволяющий выстрелить себе в ногу, ты сам лично пару
ног себе отстрелил, поэтому язык негодный и плохой, а ровно такие
же языки только без этого функционала -- мол лучше. Потому, что
выстрелить в ногу нельзя. Чушь. Считаешь функционал лишним, не
нужным -- можешь его попросту не использовать. В данном конкретном
случае. Потому, что в общем это не совсем так, в общем он далеко не
лишний, т.к. fk0(1140 знак., 02.10.2020 10:06)
- Мой тезис не в том что есть мой вариант и неправильный. А в том что
метапрограммирование как оно есть со всеми способами применения,
которые я видел, не очень хороший инструмент, лучше которого можно
найти варианты для достаточно большого кол-ва случаев. Собственно
хорошо оно только там где его невозможно заменить - в области
специфкации шаблонов контейнеров и оно должно кмк там остаться. А с
этой узкой областью справилась бы любая компиляторная магия, вместо
же этого был Kabdim(1580 знак., 02.10.2020 12:28)
- Твой тезис именно в том, что вот какой-то функционал ты объявляешь
априори плохим ссылаясь на свою негативную практику и аппелируешь к
тому, что в "промышленных" ЯВУ (вроде C#) такого функционала нет. В
конце концов раз для тебя плохой -- не пользуйся. Но наличие возможности всегда лучше её отсутствия. В других языках такой возможности нет. Плохая она или хорошая. А
насколько плохая -- очень субъективная оценка. Вот я считаю -- что
хорошая. А твоя негативная fk0(4000 знак., 02.10.2020 13:08, ссылка, ссылка)
- >> Твой тезис именно в том, что вот какой-то функционал
ты объявляешь априори плохим ссылаясь на свою негативную практику Kabdim(2318 знак., 02.10.2020 18:29, ссылка, ссылка)
- Я не о восторгах, а о том, что C++ позволяет вещи невозможные на
других языках. А ты объявляешь то одно, то другое "плохим"
исключительно базируясь на своём негативном опыте. fk0(2720 знак., 02.10.2020 18:36)
- >> Вообще boost мало предназначен для практического
программирования Kabdim(1023 знак., 02.10.2020 19:26, ссылка)
- Я гляжу, пятница удалась. Давно холиваров не было. - йцyкeн(02.10.2020 20:28)
- +1 причем холиваров между профи по сильно интересной профильной теме. - Evgeny_CD(03.10.2020 00:24)
- Я гляжу, пятница удалась. Давно холиваров не было. - йцyкeн(02.10.2020 20:28)
- >> Вообще boost мало предназначен для практического
программирования Kabdim(1023 знак., 02.10.2020 19:26, ссылка)
- Я не о восторгах, а о том, что C++ позволяет вещи невозможные на
других языках. А ты объявляешь то одно, то другое "плохим"
исключительно базируясь на своём негативном опыте. fk0(2720 знак., 02.10.2020 18:36)
- >> Твой тезис именно в том, что вот какой-то функционал
ты объявляешь априори плохим ссылаясь на свою негативную практику Kabdim(2318 знак., 02.10.2020 18:29, ссылка, ссылка)
- Твой тезис именно в том, что вот какой-то функционал ты объявляешь
априори плохим ссылаясь на свою негативную практику и аппелируешь к
тому, что в "промышленных" ЯВУ (вроде C#) такого функционала нет. В
конце концов раз для тебя плохой -- не пользуйся. Но наличие возможности всегда лучше её отсутствия. В других языках такой возможности нет. Плохая она или хорошая. А
насколько плохая -- очень субъективная оценка. Вот я считаю -- что
хорошая. А твоя негативная fk0(4000 знак., 02.10.2020 13:08, ссылка, ссылка)
- Мой тезис не в том что есть мой вариант и неправильный. А в том что
метапрограммирование как оно есть со всеми способами применения,
которые я видел, не очень хороший инструмент, лучше которого можно
найти варианты для достаточно большого кол-ва случаев. Собственно
хорошо оно только там где его невозможно заменить - в области
специфкации шаблонов контейнеров и оно должно кмк там остаться. А с
этой узкой областью справилась бы любая компиляторная магия, вместо
же этого был Kabdim(1580 знак., 02.10.2020 12:28)
- Ты пытаешьсая упорно подвести к тезису, мол в языке есть некоторый
функционал позволяющий выстрелить себе в ногу, ты сам лично пару
ног себе отстрелил, поэтому язык негодный и плохой, а ровно такие
же языки только без этого функционала -- мол лучше. Потому, что
выстрелить в ногу нельзя. Чушь. Считаешь функционал лишним, не
нужным -- можешь его попросту не использовать. В данном конкретном
случае. Потому, что в общем это не совсем так, в общем он далеко не
лишний, т.к. fk0(1140 знак., 02.10.2020 10:06)
- Обычно все кто мне встречался приходили к примерно тем же выводам,
без необходимости внешних аргументов. Ну ладно, требование
аргументировать оно рациональное и правильное. Kabdim(3154 знак., 25.09.2020 13:47)
- Метапрограммирование не решается внешним шаблонизатором. Потому, что последний работает исключительно на уровне исходного текста. Это совсем не то, потому, что шаблоны в 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, ссылка)
- Добавлю про метопрограммирование. Когда я по взглядам был ближе к
твоей точке зрения, понадобилось мне не простая, но и не сложная
парсилка текста. Решил сделать библиотекой на мете, а именно на
boost::Spirit. Получалось красиво, но по мере приближения %
реализованного к задуманному время компиляции не сложного проекта
уверенно подбиралось к 10 минутам. Что приводило к чудовищным
потерям моих временных ресурсов. Это изрядно меня озадачило, сделал
то же самое руками, Kabdim(562 знак., 25.09.2020 16:09)