-
- ps Ещё вопрос. Вот в бейсике есть встроенные функции синус/косинус
и протчая. А в плюсах они есть? (без библиотек, когда плюс сам по
себе). И что такого может сделать С++, чего не могут сделать Бейсик
с Паскалем, Фортраном и Ассемблером? - argus98(22.09.2020 21:33)
- В C++ доступна вся C-библиотека. Когда C++ сам себе разумеется нет,
а как ты себе представляешь? Можешь написать свою реализацию... Что
может C++, чего не могут другие: fk0легенда(3338 знак., 23.09.2020 00:30, ссылка, ссылка)
- Не могу согласится со всем. Kabdim(1039 знак., 25.09.2020 11:46)
- Твоё сообщение не содержит никакой осмысленной аргументации.
"Багодром, в современных языках заменено, вскрывающееся зло,
выстрелы в ногу, рукожопы..." -- это лишь _твоя_ оценка,
субъективная. Теперь по пунктам: fk0легенда(4024 знак., 25.09.2020 12:58)
- Добавлю про метопрограммирование. Когда я по взглядам был ближе к
твоей точке зрения, понадобилось мне не простая, но и не сложная
парсилка текста. Решил сделать библиотекой на мете, а именно на
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)
- Это красивая сказка, на деле сам SWIG спотыкается и полученный им результат бывает настолько плох, что проще руками. - fk0легенда(02.10.2020 13:16)
- Так или иначе 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)
- Твоё сообщение не содержит никакой осмысленной аргументации.
"Багодром, в современных языках заменено, вскрывающееся зло,
выстрелы в ногу, рукожопы..." -- это лишь _твоя_ оценка,
субъективная. Теперь по пунктам: fk0легенда(4024 знак., 25.09.2020 12:58)
- какие книги Вы читаете, что так гладко и по делу излагаете? - Constantin24(24.09.2020 21:43)
- Спасибо! Отлично написал! - Evgeny_CDАрхитектор(23.09.2020 00:35)
- Не могу согласится со всем. Kabdim(1039 знак., 25.09.2020 11:46)
- Вообще есть, гуглится через cmath. Бейсик с паскалем годятся только для обучения детей информатике, фортран был вытеснен питоном. Ассемблер очень спецефическая вещь, чаще он нужен для того, чтобы понять, как компилятор представляет ваш код. Для задействования аппаратных фишек платформы ( обычно через интрисиксы ) нужен, ещё хакерам он нужен. evgeniy1294(63 знак., 22.09.2020 21:48)
- На С++ я могу написать управление стира(те)льной машиной и уложиться в 2K озу и 32K пзу, из перечисленных Вами языков это можно сделать только на Паскале, с натяжкой. На ассемблере тоже можно, но если машина будет стирать не то, что нужно - ошибку найти нелегко, да и модернизировать сложно, ну, чтоб стирала помимо самолетиков, ракетки какие-нибудь :) - Xитpый Kитaeц(22.09.2020 21:46)
- В C++ доступна вся C-библиотека. Когда C++ сам себе разумеется нет,
а как ты себе представляешь? Можешь написать свою реализацию... Что
может C++, чего не могут другие: fk0легенда(3338 знак., 23.09.2020 00:30, ссылка, ссылка)
- А что, в плюсах уже есть сложение/вычитание/сдвиги с переносом? - argus98(22.09.2020 21:02)
- Очуметь какая проблема! У некоторых процессоров нет флага переноса!
Например у MIPS. И ничего, живут же как-то. - fk0легенда(22.09.2020 21:06)
- Херово живут... Вместо переноса/заёма генерируют прерывание.
Обалдеть, какое революционное решение - argus98(22.09.2020 21:25)
- Прерывание совсем не для этого, а для обнаружения/обработки ошибок. Если нужно складывать, например, "многорегистровые" числа без флага переноса, то это делается через лишнюю одну арифметическую операцию (a += b, carry = a < b), если нужна ротация, для CRC, например, то тоже лишняя операция (carry = !!(a & INT_MIN), a <<= 1). Не так уж и фатально. Потому, что в практическом коде операции с переносом редко встречаются. - fk0легенда(23.09.2020 00:41)
- Херово живут... Вместо переноса/заёма генерируют прерывание.
Обалдеть, какое революционное решение - argus98(22.09.2020 21:25)
- Очуметь какая проблема! У некоторых процессоров нет флага переноса!
Например у MIPS. И ничего, живут же как-то. - fk0легенда(22.09.2020 21:06)
- ps Ещё вопрос. Вот в бейсике есть встроенные функции синус/косинус
и протчая. А в плюсах они есть? (без библиотек, когда плюс сам по
себе). И что такого может сделать С++, чего не могут сделать Бейсик
с Паскалем, Фортраном и Ассемблером? - argus98(22.09.2020 21:33)