Здравствуйте, alpha21264, Вы писали:
A>И кого сейчас это волнует? A>Реально тормозит 1% программного кода. Вот его и надо оптимизировать. A>А остальное пишется как проще/надёжнее.
Что значит "1% тормозит"? Если ты закинул работу с std::string, обеспечивающими успешно копирования туда-сюда одного и того же на ровном месте (и не только std::string, много у чего из STL та же проблема), в асинхронный хендлер (код который вызывается в потоке хендлера) сетевого демона, то эта функция просто сразу же вылетает в топ в профилировщике при задании демону высокой нагрузки. Недавно возился с apache trafficserver, он написан на Си с классами с редкими вкраплениями использования параметризации типов, но нигде нет ни малейшего использования штук из STL в коде ядра демона (это 98% всего TS), всё своё, оптимизированное по-максимому.
Здравствуйте, AlexGin, Вы писали:
AG>Без настоящей рефлексии, как в .NET языках (тот же C#) — очень сомневаюсь что это в полной мере возможно...
Рефлексия — это всё же run-time (когда программа уже написана), а шаблоны — чистый compile-time. Обе вещи полезны, но работают в совершенно разных областях.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Рефлексия — это всё же run-time (когда программа уже написана), а шаблоны — чистый compile-time. Обе вещи полезны, но работают в совершенно разных областях.
Оригинальный смысл рефлексии — это когда программа сама себя наблюдает и модифицирует. Run-time или compile-time — зависит от того, что за программа подразумевается. В C++ идет нацеливание на compile-time и эдакую "мета-программу"
Здравствуйте, smeeld, Вы писали:
S>Здравствуйте, alpha21264, Вы писали:
A>>И кого сейчас это волнует? A>>Реально тормозит 1% программного кода. Вот его и надо оптимизировать. A>>А остальное пишется как проще/надёжнее.
S>Что значит "1% тормозит"? Если ты закинул работу с std::string, обеспечивающими успешно копирования туда-сюда одного и того же на ровном месте (и не только std::string, много у чего из STL та же проблема), в асинхронный хендлер (код который вызывается в потоке хендлера) сетевого демона, то эта функция просто сразу же вылетает в топ в профилировщике при задании демону высокой нагрузки. Недавно возился с apache trafficserver, он написан на Си с классами с редкими вкраплениями использования параметризации типов, но нигде нет ни малейшего использования штук из STL в коде ядра демона (это 98% всего TS), всё своё, оптимизированное по-максимому.
Ну вот примерно это и означает.
Есть места, которые надо оптимизировать, а есть места, которые не надо.
Тех, которые надо, в среднем 1%. Во всех остальных делаем как проще.
Ты же хотел "шаблоны и прочие возможности языка"? Ну вот они.
В данном случае STL. Ты што, против STL? Ну ты и ретроград!
Здравствуйте, Ops, Вы писали:
Ops>Это религия. На мой взгляд, MIT-BSD самые удобные лицензии, но у красноглазиков от них подгорает.
Удобные, для копирастов
Прочитайте, под ней можно софтину перелицензировать, плюс даётся разрешение позволять пользователям модифицированной софтины делать с ней то же самое. То есть, по умолчанию у них такого права не будет.
Здравствуйте, smeeld, Вы писали:
S>Что значит "1% тормозит"?
Это значит, что остальные 99% не тормозят
S>Если ты закинул работу с std::string, обеспечивающими успешно копирования туда-сюда одного и того же на ровном месте (и не только std::string, много у чего из STL та же проблема),
"На ровном месте" никто ничего никуда не копирует. Максимальная возможная неприятность, которая и обсуждается, — следят, чтобы никто не прошёл неинициализированным. Копировать обратно в тот же буфер, или же в буфер новый — по времени стоит практически одинаково.
S>в асинхронный хендлер (код который вызывается в потоке хендлера) сетевого демона,
С демонами аккуратнее надо быть.
S>то эта функция просто сразу же вылетает в топ в профилировщике при задании демону высокой нагрузки.
Нагрузка не должна особо поменяться. Может чуть подрасти расход памяти. Или Вы не умеете их готовить.
S> Недавно возился с apache trafficserver, он написан на Си с классами с редкими вкраплениями использования параметризации типов, но нигде нет ни малейшего использования штук из STL в коде ядра демона (это 98% всего TS), всё своё, оптимизированное по-максимому.
Из того, что какая-то софтина написана на Ц с классами и работает быстро, никак не следует, что на крестах она работала бы медленней. Но в целом, я верю, что apache вылизывали по максимуму, дожимая даже не самые горячие места. Альфа же, совершенно справедливо, говорит, что в обычном повседневном программировании такое редко требуется. Гораздо важнее сделать код надёжным, повторно используемым и сопровождаемым. Simple is better than complex. Beautiful is better than ugly.
И Питон Вы таки не к месту упомянули, нет в том коде потери производительности на два с лишним порядка ни в одном из вариантов.
Здравствуйте, alpha21264, Вы писали:
A>Ты же хотел "шаблоны и прочие возможности языка"? Ну вот они. A>В данном случае STL. Ты што, против STL? Ну ты и ретроград!
Похоже. Вы не совсе мопоняли. STL-это либа. Вообще говоря выступаю за параметризацию сущностей в целях обобщения и абстрагирования используя для этого шаблоны С++ (не штуки из STL) как средство. Почему-то под понятием шаблонов C++ часто понимается использование каких-то библиотек, которые входят в стандарт и которые предоставляют параметризованные сущности. С какого перепугу?
Здравствуйте, cures, Вы писали:
Ops>>Это религия. На мой взгляд, MIT-BSD самые удобные лицензии, но у красноглазиков от них подгорает. C>Удобные, для копирастов C>Прочитайте, под ней можно софтину перелицензировать, плюс даётся разрешение позволять пользователям модифицированной софтины делать с ней то же самое. То есть, по умолчанию у них такого права не будет.
Да, это как раз и есть настоящие свободные лицензии. В отличие от всякой вирусной мерзости типа GPL, которые не имеют вообще никакого отношения к свободе.
Здравствуйте, alex_public, Вы писали:
_>Да, это как раз и есть настоящие свободные лицензии. В отличие от всякой вирусной мерзости типа GPL, которые не имеют вообще никакого отношения к свободе.
Ага, не дают со "свободных" дурачков бабла настричь!
Здравствуйте, cures, Вы писали:
C>Удобные, для копирастов
Нет, удобные для пользователей, использующих код. Как копирасты могут что-то предъявить к такому коду, или нажиться на нем — вообще непонятно.
C>Прочитайте, под ней можно софтину перелицензировать, плюс даётся разрешение позволять пользователям модифицированной софтины делать с ней то же самое. То есть, по умолчанию у них такого права не будет.
Это ж здорово. Я могу с кодом делать что хочу, и ни перед кем ни отчитываться, в отличие от богомерзкой GPL, которая мало того, что ограничивает использование, так еще и прилипает намертво к любому коду, который заденет.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, sergey2b, Вы писали:
S>объясните плиз чем Си с классами отличаеться от C++\
Подразумевается, что C++ это не только объектно-ориентированное программирование. Но и какие-то элементы метапрограммирования на шаблонах, возможности по перегрузке функций и операторов, пространства имён, argument dependent lookup в частности, исключения, полиморфизм, какой-то syntax sugar и современного C++ типа lambda-выражений. В середине-конце 90-х и начале 2000-х выпускалось много книг рассматривающих C++ именно в разрезе OO, мол это единственная парадигма и серебрянная пуля, видимо отсюда и пошёл C с классами, от Turbo-C++, первых версий MSVC, да и поддержка C++ в них была далеко не на высоте, в gcc времён 3.3.3 тоже. Собственно в начале 2000-х все возможности C++ и использовать толком не было возможности, так что C с классами скорей старая школа, кто учился в начале 2000-х.
Здравствуйте, MasterZiv, Вы писали:
>>объясните плиз чем Си с классами отличаеться от C++\ S>>те когда это еще Си с классами, а вот после этого стал уже С++
MZ>Говнокод на С++, написанный С-шником -- это "С с классами". MZ>Коды возврата вместо исключений. MZ>Возврат значений через указатель на результат в параметре.
Это удел фортранщиков. У них там in и out переменные. Благо передаются все по ссылке.
А как правильно? В нормальных языках (перл, tcl, питон) можно вернуть список. В C++ до введения auto и tuple делать было нечего.
MZ>Указатели на коллбэки вместо полиморфизма.
Не соглашусь в общем случае. О полиморфизма как раз зло, он вынуждает вместо легковесного класса адаптера городить тот самый C с классами. Да, коллбэк как функция -- зло. Но интефейсный класс не сильно меньшее зло. Что мешало оставить некий функтор, в который ляжет лямбда или std::function адаптирующая вызов к реальному классу, если он там вообще есть и нужен.
MZ>Макросы вместо шаблонов.
Макросы не заменяют шаблоны и наборот. Можно пытаться изобразить шаблон из макроса (но для него ж элементарно не написать специализации для разных типов, например). Часто макросы пишутся вместо отсутствущих вложенных функций (которые есть в паскале и gcc без ++).
fk0> Подразумевается, что C++ это не только объектно-ориентированное программирование. Но и какие-то элементы метапрограммирования на шаблонах, возможности по перегрузке функций и операторов, пространства имён, argument dependent lookup в частности, исключения, полиморфизм, какой-то syntax sugar и современного C++ типа lambda-выражений. В середине-конце 90-х и начале 2000-х выпускалось много книг рассматривающих C++ именно в разрезе OO, мол это единственная парадигма и серебрянная пуля, видимо отсюда и пошёл C с классами, от Turbo-C++, первых версий MSVC, да и поддержка C++ в них была далеко не на высоте, в gcc времён 3.3.3 тоже. Собственно в начале 2000-х все возможности C++ и использовать толком не было возможности, так что C с классами скорей старая школа, кто учился в начале 2000-х.
про операторы, шаблоны для функций min max и namespace вопрсов нет
где можно например использовать остальное в
большой колекции однотипных объектов
web server
сканирование файлов
топик был создан с целю понять что можно использовать из нового в текущем проекте