Здравствуйте, student__, Вы писали:
Pzz>>В принципе, это хорошо, конечно, что этих дебильных внешних форматов, в которые надо сериализовать, не так уж и много. Но как-то не очень-то generic получается. В общем, серебряной пули опять не получилось.
__>При чем тут статическая интроспекция?
Здравствуйте, Marty, Вы писали:
Pzz>>В принципе, это хорошо, конечно, что этих дебильных внешних форматов, в которые надо сериализовать, не так уж и много. Но как-то не очень-то generic получается. В общем, серебряной пули опять не получилось.
M>В случае динамической рефлексии описанная ситуация чем-то отличается?
Здравствуйте, lpd, Вы писали:
lpd>Только оптимизируют simd инструкциями и ручным управлением памятью, а вовсе не мув-семантикой.
Да много чем. Вопрос-то не в этом: всегда будут области с ограниченным ресурасами (память/энергия/время) и пока альтернативы для С/С++ для решения таких задач нет. 20 лет назад десктопы были ограничены в ресурсах, а сейчас условно неограниченны, там можно писать хоть на Java/С#/python/electron, они оттуда вытеснили С++, т.к. С++ объективно сложнее, да и не решенных задач там уже особо нет, чаше всего все сводится к новой обертке.
С другой стороны сейчас можно решать задачи которые 15 лет назад требовали полноценного десктопа на чем-то размером в пару квадратных миллимметров и потребляющем всего пару милливат. Это окрывает огромные возможности.
Здравствуйте, Marty, Вы писали:
M>По виртуализации в рантайме:
Это ж масло-масленное
Виртуальные функции это полиморфизм времени выполнения по определению.
Здравствуйте, Pzz, Вы писали: __>>При чем тут статическая интроспекция? Pzz>Пытаюсь понять, насколько она вообще полезна.
alex_public уже написал — для сериализации данных. К конкретному формату это отношения не имеет.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, AleksandrN, Вы писали:
AN>>Шаблоны в 90-х появились. Но злоупотребление метапрограммированием и раньше было, только вместо шаблонов использовались макросы с параметрами.
Pzz>Макросы с параметрами сроду не были тьюринг-полнымы, так что на них было особо не развернуться.
Но некоторые умудрялись делать совершенно монструозные конструкции из макросов, когда внутри одного макроса использовались другие макросы, внутри которых тоже использовались макросы и далее в таком же стиле. А потом к этому добавлялись #ifdef/#ifndef.
Здравствуйте, smeeld, Вы писали:
S>Здравствуйте, Marty, Вы писали:
M>>С другой стороны — вменяемый человек не будет писать распознавание речи на питоне
S>Пишут, распознования и речи, и изображений.
А библиотеки, которые Питон использует для этого, на нём же написаны или на чём-то другом?
Здравствуйте, Patalog, Вы писали:
BFE>>Исходя из этого для многих проектов просто запрещается динамическая аллокация памяти. Соответственно выбрасывается всё, что аллоцирует память, начиная с std::vector …
P>А можно подробностей? А то все что я видел "у взрослых пацанов" без динамической памяти — это своя нарукоблуженная вариация хипа поверх статического буфера. Но память они не аллоцируют, ага. И исключений нету =)
Если совсем никак без динамической аллокации не обойтись, то так делают, потому, что тогда можно написать доказательные тесты работы, когда память кончилась.
Однако обычно можно написать код, где вообще не нужна динамическая аллокация, а нужна аллокация только при инициализации. Например, если при старте концигурационные данные не помещаются в статически заказанные буферы, то выдаётся ошибка типа power-up-built-in-test failed.
Здравствуйте, Pzz, Вы писали:
Pzz>Мне кажется, первый десяток можно смело увольнять за то, что они вместо работы в форуме втыкают
У нас, С++-сников, есть железобетонная отмазка — проект компилируется
Здравствуйте, Pzz, Вы писали:
Pzz>А что значит, нету в принципе? Ты не используешь слово new, или все твои алгоритмы имеют требования к памяти O(1)?
new умеет в custom allocator если надо.
Вы заменили полиморфизм времени выполнения на полиморфизм времени компиляции
BFE>Кстати, #if / #else запрещены для исполняемого кода.
Очевидно, что это только для простоты примера...
Вот использование префиксов типа TLauncher должно быть запрещено
Здравствуйте, so5team, Вы писали:
BFE>>Вообще-то принято считать, что виртуальный метод переопределяет поведение, а определяется поведение методом объекта. S>Остается надеятся, что вы хотя бы сами поняли, что имели в виду.
BFE>>Где именно? S>В вопросах run-time полиморфизма.
Я плаваю вопросах run-time полиморфизма? Да я могу даже в шаблонные виртуальные методы на С++. А вы?
BFE>>Тот же самый код можно переписать вообще без объектов, как вы понимаете. S>Нет, я не понимаю, как можно рассуждать о C++ отказываясь от кода, написанного в стиле C++.
На С можно писать в стиле С++. Не знали?
BFE>>Я тут не стремился показать это, а только то, что виртуальность без динамической аллокации большого смысла не имеет. S>У вас не получилось. Ожидаемо.
Да ну? Я же переписал вашу вуртуальность на статический полиморфизм без всяких проблем. Не заметили?
S>Потому что вы так и не смогли ответить на вопрос о том, каким боком соотносятся виртуальные функции и динамическая аллокация.
Виртуальные функции без динамической аллокации не нужны.
BFE>>Скажите мне, что именно я не знаю. S>ООП, как минимум. Хотя бы в рамках классического "инкапсуляция, наследование, полиморфизм".
Вы ещё скажите, что "инкапсуляция, наследование, полиморфизм" невозможны на С.
Здравствуйте, Skorodum, Вы писали:
S>Вы заменили полиморфизм времени выполнения на полиморфизм времени компиляции
Да.
BFE>>Кстати, #if / #else запрещены для исполняемого кода. S>Очевидно, что это только для простоты примера...
Нет, не всё так просто. Код одного из классов vehicle_based_launcher/ship_based_launcher превращается из-за #if / #else в мертвый код, который не попадает под тест и следовательно должен быть выкинут из проекта. Если мы выкидывает один из классов, то нет никакого смысла делать launcher_ ссылкой, так как остаётся только один класс, а значит его прямо там и можно подставить.
Здравствуйте, Marty, Вы писали:
BFE>>Всё это хорошо, только вот на практике, ещё на этапе составления спецификации известно что, куда и с какой скорость писать, поэтому такая потребность в абстрагировании оказывается излишней.
M>И? Надо писать и COM-порт и на флешку.
В COM-порт вы будете писать без ответа-подтверждения?
Что будете делать, если на флешке нет места?
M>А еще я хочу, чтобы тот же код работал в утилите на компе, и там уже, куда писать, определяется в рантайме
Тогда надо предоставить спецификацию на комп и тесты для всех видов рантайма.
Здравствуйте, B0FEE664, Вы писали:
BFE>Я плаваю вопросах run-time полиморфизма? Да я могу даже в шаблонные виртуальные методы на С++. А вы?
А я могу высказать все, что думаю про человека с отсутствием фантазии, неспособностью к соображению и чрезмерным (даже для меня) самомнением. Но меня попросили грубо не выражаться и не нарушать правил приличий.
Здравствуйте, so5team, Вы писали:
S>Вы представляете, в C++ можно в одном месте хранить std::chrono::seconds, в другом std::chrono::milliseconds, в третьем std::chrono::minutes
Здравствуйте, Skorodum, Вы писали:
S>По качеству генерируемого кода clang пока не дорос до GCC (вроде не один большой проект еше не использоует clang для релизов), но он уже получает очень широкое распространение за счет лучшей архитектуры. Clang-tidy, clang-format, clazy реально облегчают жизнь и улучшают качество кода.
Apple очень активно продвигает clang. Поэтому практически все проекты под макос собраны clang'ом. Из-за этого macos такая глючная
Здравствуйте, smeeld, Вы писали:
S>Тут основной мотив-лицензия. БСДишники приняли решение выпилить GCC исключительно чтоб отвязать базовую систему от GPL. Clang же сильно сливает GCC во всём, начиная от оптимизации и заканчивая количеством поддерживаемых архитектур.
Здравствуйте, Basil2, Вы писали:
B>Я здесь не про язык вообще, а конкретно про С++. Он сложнее чем большинство предметных областей. Если человек знает С++, он осилит почти что угодно. Поэтому знание С++ является определяющим, на мой взгляд.
Ну тогда военных пилотов надо до любой профессии без собеседований и сертификатов допускать. Если человек осилил истребитель, он осилит почти что угодно.