Re[2]: Си с классами vs C++
От: alpha21264 СССР  
Дата: 12.07.18 10:11
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Говнокод на С++, написанный С-шником -- это "С с классами".

MZ>Коды возврата вместо исключений.
MZ>Возврат значений через указатель на результат в параметре.
MZ>Указатели на коллбэки вместо полиморфизма.
MZ>Макросы вместо шаблонов.
MZ>И так далее.

И что интересно, всё это работает и делает то же самое.
Так с какого бодуна это — "говнокод"?

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Си с классами vs C++
От: sergey2b ЮАР  
Дата: 12.07.18 13:25
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Здравствуйте, sergey2b, Вы писали:



>>объясните плиз чем Си с классами отличаеться от C++\

S>>те когда это еще Си с классами, а вот после этого стал уже С++

MZ>Говнокод на С++, написанный С-шником -- это "С с классами".

MZ>Коды возврата вместо исключений.
MZ>Возврат значений через указатель на результат в параметре.
MZ>Указатели на коллбэки вместо полиморфизма.
MZ>Макросы вместо шаблонов.
MZ>И так далее.

это все Ст шные приколы

MZ>Возврат значений через указатель на результат в параметре.



скажем функция формирует текстовое сообшение в буфере, как вы его веренете в std::string ?
Re[3]: Си с классами vs C++
От: AlexGin Беларусь  
Дата: 12.07.18 15:58
Оценка: -1
Здравствуйте, Mr.Delphist, Вы писали:
...
MD>Гы-гы-гы, это называется "перестал быть джуном"
+100500
Никто и не спорит, но это уже ООП (пусть хоть и самое начало)

MD>Настоящий С++ это именно шаблоны и всё такое, когда программа пишет сама себя. (если что, то я его точно знаю на Hello-world уровне)


Без настоящей рефлексии, как в .NET языках (тот же C#) — очень сомневаюсь что это в полной мере возможно...

P.S. В то же время, если сравнивать дженерики C# и шаблоны C++ — выигрыш подхода шаблонов C++ очевиден:
Для C++ templates — это сущности времени компиляции (в процессе выполнения кода — работают быстро и шустро)...
Для C# generics — это сущности времени выполнения (в процессе выполнения кода — работают медленно)

P.P.S. Понятное дело, что для каждого типа прикладных задач — сушествует свой подход — где-то рациональнее применение динамического полиморфизма, с применением абстрактных базовых классов, RTTI и т.д. А где-то статический полиморфизм на шаблоноах — самое то!
Отредактировано 12.07.2018 16:03 AlexGin . Предыдущая версия .
Re[3]: Си с классами vs C++
От: cures Россия cures.narod.ru
Дата: 12.07.18 16:00
Оценка: +1
Здравствуйте, sergey2b, Вы писали:

S>скажем функция формирует текстовое сообшение в буфере, как вы его веренете в std::string ?


Так и вернём, в std::string(buf).
Re[4]: Си с классами vs C++
От: sergey2b ЮАР  
Дата: 12.07.18 16:09
Оценка:
Здравствуйте, cures, Вы писали:

C>Здравствуйте, sergey2b, Вы писали:


S>>скажем функция формирует текстовое сообшение в буфере, как вы его веренете в std::string ?


C>Так и вернём, в std::string(buf).


прототип функции
что то преобразованиеСтроки(char *buf, size_t usize)

у нас уже есть буфер, но тем неменее вы хотите выделить память скопировать результат, еще и возрат строки из функции будет чего то стоить
Re[5]: Си с классами vs C++
От: smeeld  
Дата: 12.07.18 16:50
Оценка: +1
Здравствуйте, sergey2b, Вы писали:

S>но тем неменее вы хотите выделить память скопировать результат, еще и возрат строки из функции будет чего то стоить


А потом бегут на кывт с вопросами почему прога на С++ работает медленее чем прога на python.
Re[5]: Си с классами vs C++
От: so5team https://stiffstream.com
Дата: 12.07.18 16:56
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>что то преобразованиеСтроки(char *buf, size_t usize)


Это какой-то неправильный прототип. Вот так будет лучше:
что-то преобразованиеСтроки(gsl::span<char> buf);
Re[6]: Си с классами vs C++
От: sergey2b ЮАР  
Дата: 12.07.18 17:00
Оценка:
Здравствуйте, so5team, Вы писали:

S>Здравствуйте, sergey2b, Вы писали:


S>>что то преобразованиеСтроки(char *buf, size_t usize)


S>Это какой-то неправильный прототип. Вот так будет лучше:

S>
что-то преобразованиеСтроки(gsl::span<char> buf);



прикольно
Re[5]: Си с классами vs C++
От: cures Россия cures.narod.ru
Дата: 12.07.18 17:01
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>прототип функции

S>что то преобразованиеСтроки(char *buf, size_t usize)

Плохой прототип, негодный, обычную текстовую строку "Hello, world!" туда не передашь, ибо константная.

S>у нас уже есть буфер, но тем неменее вы хотите выделить память скопировать результат,


А что Вы потом планируете с возвращённым значением делать? Солить?
И нафига заводили буфер, если его можно завести как раз под результат, чтобы результат дальше спокойно использовать, не боясь, что в это время в том же буфере начнут преобразовывать другую строку?

S>еще и возрат строки из функции будет чего то стоить


Возврат строки из функции будет стоить положения одного пойнтера и двух size_t в заранее зарезервированное место на стеке.
Более того, если функция инлайнится (или при LTO), компилер может присвоение результата, скажем, в ещё одну строку, просто выкинуть, а в Вашем случае придётся побайтно копировать, да ещё перед этим её длину считать.
Re[6]: Си с классами vs C++
От: cures Россия cures.narod.ru
Дата: 12.07.18 17:04
Оценка:
Здравствуйте, so5team, Вы писали:

S>что-то преобразованиеСтроки(gsl::span<char> buf);


Не пишет Ваш спан, он константный, а товарищ зачем-то inplace преобразование хочет.
Re[7]: Си с классами vs C++
От: so5team https://stiffstream.com
Дата: 12.07.18 17:13
Оценка: +1
Здравствуйте, cures, Вы писали:

S>>что-то преобразованиеСтроки(gsl::span<char> buf);


C>Не пишет Ваш спан, он константный,


Это GSL-есвкий span, с чего бы ему быть константным?
https://github.com/Microsoft/GSL/blob/master/include/gsl/span#L510

C>а товарищ зачем-то inplace преобразование хочет.


Товарища прежде всего нужно спросить зачем ему std::string, если у него уже есть буфер для преобразования.
Re[8]: Си с классами vs C++
От: cures Россия cures.narod.ru
Дата: 12.07.18 17:39
Оценка:
Здравствуйте, so5team, Вы писали:

S>Товарища прежде всего нужно спросить зачем ему std::string, если у него уже есть буфер для преобразования.


Товарища об этом можно не спрашивать, достаточно прочитать его предыдущее сообщение и сообщение, на которое он отвечал.
Перед этим MasterZiv назвал говнокодом возврат значения через параметр-указатель. А, типа, если через референс, то нормально?
На это sergey2b привёл не очень удачный контрпример: спросил, как иначе возвращать результат работы, если вся работа — преобразование переданного буфера. Кроме того, что пример довольно искусственный — не так часто результат работы и размер исходной строки совпадают — так он ещё и не подходит для константных аргументов (например, лежащих в секции .text), да и саму исходную строку портить не всегда желательно. А завести новый стринг и вернуть через него по времени ничего не стоит. Может стоить по памяти, но мы все помним про преждевременную оптимизацию. Да и в любом случае, это явно не то, что имел в виду MZ. Тут речь про in-out аргумент, а имелись в виду чистые out. Но прикопался я именно к тому, почему бы в подобных случаях не возвращать результат отдельно.
Re[6]: Си с классами vs C++
От: sergey2b ЮАР  
Дата: 12.07.18 17:44
Оценка:
Здравствуйте, cures, Вы писали:

C>А что Вы потом планируете с возвращённым значением делать? Солить?

C>И нафига заводили буфер, если его можно завести как раз под результат, чтобы результат дальше спокойно использовать, не боясь, что в это время в том же буфере начнут преобразовывать другую строку?

планирую удалять пробелы перед текстом и после текста и заменять %s на свою подстроку
Re[7]: Си с классами vs C++
От: cures Россия cures.narod.ru
Дата: 12.07.18 17:55
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>планирую удалять пробелы перед текстом и после текста и заменять %s на свою подстроку


Вполне классическая обработка текста. Когда заменять станете — точно в тот же буфер не уложитесь, придётся или молиться, чтобы "своя подстрока" оказалась не длиннее двух символов, или таки заводить новый буфер. Во втором случае — новый выбор: подсчитывать ли количество вхождений %s в строку отдельным проходом, или сразу делать выделяемый буфер изменяемого размера.
Много ли Вы при всём при этом рассчитываете сэкономить тем, что на первом проходе не выделите новый буфер, а уложитесь в старый (сделаев свою функцию более узко применимой) ? По операциям — одинаково: чтение-модификация-запись, причём, как я понимаю, последовательные. И то, что читать и писать будете в одну и ту же память, на скорость практически не повлияет. Выделение памяти — штука нынче довольно быстрая. Если Вам не нужна исходная строка — так она освободит память, если присвоите результат в неё же. Сдаётся мне, тут совершенно классический пример незрелой оптимизации.
Re[8]: Си с классами vs C++
От: cures Россия cures.narod.ru
Дата: 12.07.18 18:03
Оценка:
Здравствуйте, so5team, Вы писали:

S>Это GSL-есвкий span, с чего бы ему быть константным?


Забавная конструкция, жалко что не стандартная.

S>https://github.com/Microsoft/GSL/blob/master/include/gsl/span#L510


Выделенное много объясняет: брать у них даже прилично выглядящий код, да ещё и с непонятной лицензией, чревато боком.
Re[2]: Си с классами vs C++
От: Stanislav V. Zudin Россия  
Дата: 12.07.18 18:10
Оценка: +2
Здравствуйте, MasterZiv, Вы писали:

MZ>Возврат значений через указатель на результат в параметре.


Ох ты ёлки, а чем этот способ не угодил? Вполне годный вариант.
А как ошибку возвращать?
Кидать исключение, а потом снаружи наворачивать try/catch, как в Яве?
Или городить std::any с кастами? И что, код станет читабельнее или быстрее?

MZ>Указатели на коллбэки вместо полиморфизма.


Тоже не соглашусь.
Иногда колбек (ну замени его на std::function) очень даже уместен и гораздо читабельнее, чем полиморфизьм, навернутый на ровном месте. Контекст надо смотреть.

Про макросы тоже согласился бы, но надо смотреть по месту.
Иногда приходится поддерживать всякие экзотические системы, где не то, что про С++17, про С++03 едва слышали.

У меня пока складывается впечатление, что "труЪС++" это типа хипстерской цацки, типа мы модные и современные.
Для внутренней разработки это канает, а вот как только появляется какая-никакая поддержка продукта, то лучше придерживаться теплого лампового "Си-с-классами", по крайней мере работать будет везде.
_____________________
С уважением,
Stanislav V. Zudin
Re[9]: Си с классами vs C++
От: so5team https://stiffstream.com
Дата: 12.07.18 18:19
Оценка:
Здравствуйте, cures, Вы писали:

C>Забавная конструкция, жалко что не стандартная.


Это часть C++ Core Gudelines Support Library. Кандидат на включение в C++20.

S>>https://github.com/Microsoft/GSL/blob/master/include/gsl/span#L510


C>Выделенное много объясняет: брать у них даже прилично выглядящий код, да ещё и с непонятной лицензией, чревато боком.


Можно взять другую реализацию GSL: https://github.com/martinmoene/gsl-lite/blob/master/include/gsl/gsl-lite.hpp#L1750
Одна беда, она лежит на ресурсе, который принадлежит Microsoft.
Re[10]: Си с классами vs C++
От: cures Россия cures.narod.ru
Дата: 12.07.18 19:13
Оценка:
Здравствуйте, so5team, Вы писали:

S>Одна беда, она лежит на ресурсе, который принадлежит Microsoft.


Беда не приходит одна! Эта реализация, опять же, имеет какую-то левую лицензию, да ещё и с явным копирайтом (не копилефтом) Микрософта.
Re[11]: Си с классами vs C++
От: so5team https://stiffstream.com
Дата: 12.07.18 19:32
Оценка: +1
Здравствуйте, cures, Вы писали:

C>Беда не приходит одна! Эта реализация, опять же, имеет какую-то левую лицензию, да ещё и с явным копирайтом (не копилефтом) Микрософта.


MIT-лицензия стала левой? Куда катится этот мир!
Re[12]: Си с классами vs C++
От: Ops Россия  
Дата: 13.07.18 07:13
Оценка:
Здравствуйте, so5team, Вы писали:

S>MIT-лицензия стала левой? Куда катится этот мир!


Это религия. На мой взгляд, MIT-BSD самые удобные лицензии, но у красноглазиков от них подгорает.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.