Концепция умного C++
От: Shmj Ниоткуда  
Дата: 17.04.25 21:38
Оценка: +1 :))
Вопрос такой.

Встречалась ли вам концепция — "C++ как C с классами". Т.е. когда правила кодирования устанавливают запрет на множество фич, которые есть в языке, но которые часто запутывают код и делают сложным для восприятия — сводят фактически к C, но с удобным синтаксисом для RAII. Однако же указатели и пр. — используются все как в C.

Причем на C успешно пишут все что угодно — то какие проблемы делать то же самое, добавив в C — удобный RAII в мин. варианте?

B здесь главное не поддаться греху гордыни — когда тебе хочется доказать другим что ты способен, что SFINAE и 4-х этажные шаблоны тебе по плечу. А нужно не поддаваться греху гордыни а наоборот проявить смирение и кротость — аскетизм. Ограничить себя в излишествах и довольствоваться простым минимализмом.


В принципе — я всецело поддерживаю и уважаю эту концепцию C++. Чем проще код — тем лучше. Кто хочешь поддаться греху гордыни — есть вам Haskell — пожалуйста.

Но! С появлением умных указателей стала возможна другая концепция — C++ может быть аналогом ЯВУ типа C#|Java. В чем суть? Суть в том, чтобы в угоду простоте кодирования и отладки — отказаться от ряда фич языка, запретить их использование. А именно:

1. Отказ от сырых указателей, буквальный запрет их в коде. Замена — умные указатели, ссылки, std::optional, std::optional<std::reference_wrapper<>>.

2. Отказ от сложных шаблонов, вариадических, SFINAE, запрет концептов. Т.е. свести к уровню шаблонов в Java/C#.

3. Отказ от макросов.

4. Запрет множественного наследования реализаций.

5. И т.д. (это примерный список, на самом деле гораздо больше).

Вы скажите — в чем тогда смысл, не лучше ли писать сразу на Java? А смысл чисто практический — по факту С++ наиболее кросс-платформенный и наименее гемморный на сегодня. Дошло до того, что C# компиллят в C++. Здесь не вопрос холивара — просто по факту так оно и есть.

Встречали ли вы такую концепция кодирования? Одобряете?
=сначала спроси у GPT=
Отредактировано 17.04.2025 21:56 Shmj . Предыдущая версия . Еще …
Отредактировано 17.04.2025 21:51 Shmj . Предыдущая версия .
Re: Концепция умного C++
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 17.04.25 22:06
Оценка: :)
Здравствуйте, Shmj, Вы писали:

Мамкин концептолог объявился...

C++ разный. Пишешь библиотеку — тут можно и десятиэтажные шаблоны делать, главное — максимально всё предусмотреть, документировать , и чтобы она была максимально проста в использовании.

Пишешь прикладной код — тут можно и по простому.


S>Вопрос такой.

S>Встречали ли вы такую концепция кодирования? Одобряете?

Какую? Я из твоей портянки так и не понял, что за концепция. Я пишу максимально кондово и понятно для всех
Маньяк Робокряк колесит по городу
Re[2]: Концепция умного C++
От: Shmj Ниоткуда  
Дата: 18.04.25 05:58
Оценка: :)
Здравствуйте, Marty, Вы писали:

M>C++ разный. Пишешь библиотеку — тут можно и десятиэтажные шаблоны делать, главное — максимально всё предусмотреть, документировать , и чтобы она была максимально проста в использовании.


Это если библиотеку гарантированно никто другой не будет править.

M>Пишешь прикладной код — тут можно и по простому.


А обоснование какое?

M>Какую? Я из твоей портянки так и не понял, что за концепция. Я пишу максимально кондово и понятно для всех


Учись пока я жив. Берешь простыню текста и вводишь в GPT, потом задаешь свой вопрос. Учись, я сделал это для тебя:

Автор описывает две концепции упрощённого C++:

1. «C++ как C с классами» — минимализм, RAII, отказ от сложностей языка.
2. «C++ как Java/C#» — управление через умные указатели, без сырых указателей и сложных шаблонов.


С появлением GPT теперь мы юридически точно можем сказать кто дурак — пишущий или читающий. Так что теперь как раньше не прокатывает, уже нельзя обвинить оппонента без оснований — ранее можно было, т.к. критерия точного не было, теперь есть.
=сначала спроси у GPT=
Re: Концепция умного C++
От: Pzz Россия https://github.com/alexpevzner
Дата: 18.04.25 06:45
Оценка: +1 :)
Здравствуйте, Shmj, Вы писали:

S>В принципе — я всецело поддерживаю и уважаю эту концепцию C++. Чем проще код — тем лучше. Кто хочешь поддаться греху гордыни — есть вам Haskell — пожалуйста.


Haskell основан на трёх с половиной идеях, которые там повсеместно используются единообразным образом. А C++ — это такая сборная солянка из всех идей, которые когда-либо отсветились на протяжении всей истории computer science.

Haskell проще, чем C++, на два порядка.

S>Вы скажите — в чем тогда смысл, не лучше ли писать сразу на Java? А смысл чисто практический — по факту С++ наиболее кросс-платформенный и наименее гемморный на сегодня. Дошло до того, что C# компиллят в C++. Здесь не вопрос холивара — просто по факту так оно и есть.


Нихрена он не кросс-платформенный. Даже в разные дистрибутивы линуха целиться с помощью C++ проблематично: непонятно, на какие библиотеки можно рассчитывать. А таскать это с собой — кросс-платформенность немедленно превращается в лютый геморрой, когда даже сборку программы отстроить становится весьма непростой проблемой.

Вот Go, да, он кросс-платформенный. Rust подозреваю, что тоже.
Re[2]: Концепция умного C++
От: Shmj Ниоткуда  
Дата: 18.04.25 07:01
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Haskell основан на трёх с половиной идеях, которые там повсеместно используются единообразным образом.


Зато каких идеях...

Pzz>Нихрена он не кросс-платформенный. Даже в разные дистрибутивы линуха целиться с помощью C++ проблематично: непонятно, на какие библиотеки можно рассчитывать.


А причем тут библиотеки? Библиотеки и системные функции — это отдельный вопрос — главное что ваши программы будут 100% компилировать под все платформы.

Pzz>А таскать это с собой — кросс-платформенность немедленно превращается в лютый геморрой, когда даже сборку программы отстроить становится весьма непростой проблемой.


Кросс-платформа — всегда не просто и не дешево, но на практике на C++ это проще всего получается.

На C++ есть уже готовые кросс-платформенные либы, которые реально работают.

Pzz>Вот Go, да, он кросс-платформенный. Rust подозреваю, что тоже.


Go — это сборщик мусора, тащить за собой всю среду не оно. Как и .Net.

Rust не имеет полноценного ООП — это скорее замена голого C и то спорная.
=сначала спроси у GPT=
Отредактировано 18.04.2025 7:02 Shmj . Предыдущая версия .
Re[3]: Концепция умного C++
От: RonWilson Россия  
Дата: 18.04.25 07:08
Оценка:
Здравствуйте, Shmj, Вы писали:

M>>Какую? Я из твоей портянки так и не понял, что за концепция. Я пишу максимально кондово и понятно для всех


S>Учись пока я жив. Берешь простыню текста и вводишь в GPT, потом задаешь свой вопрос. Учись, я сделал это для тебя:


говорят, люди иногда читают, а иногда пишут. Вот бредописатель из тебя — отличный, умеющий сформулировать без всяких gpt мысль — тут все плохо.
Re: Концепция умного C++
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 18.04.25 07:15
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Встречали ли вы такую концепция кодирования? Одобряете?


У С++ другие немного приоритеты, как будто схожие с тем, что ты описываешь, но в другую степь, называются профили.
Это связано не с удобством пользователей, а с безопасностью.
Re: Концепция умного C++
От: Muxa  
Дата: 18.04.25 07:19
Оценка:
S>Встречалась ли вам концепция — "C++ как C с классами". Т.е. когда правила кодирования устанавливают запрет на множество фич, которые есть в языке,

Да, когда писал драйвер.

S>Вы скажите — в чем тогда смысл, не лучше ли писать сразу на Java?


Драйвер на Java? Ты совсем дурачек чтоли?
Re: Концепция умного C++
От: Maniacal Россия  
Дата: 18.04.25 07:20
Оценка:
Здравствуйте, Shmj, Вы писали:

S>1. Отказ от сырых указателей, буквальный запрет их в коде. Замена — умные указатели, ссылки, std::optional, std::optional<std::reference_wrapper<>>.

S>2. Отказ от сложных шаблонов, вариадических, SFINAE, запрет концептов. Т.е. свести к уровню шаблонов в Java/C#.

Ну да, ну да...

S>3. Отказ от макросов.

макросы это фишка C, а не C++, отказываться от фишек C в пользу C++ это какой-то неумный C

S>4. Запрет множественного наследования реализаций.

Ещё большее урезание. Тогда лучше использовать умный C#
Re: Концепция умного C++
От: alpha21264 СССР  
Дата: 18.04.25 07:20
Оценка:
Здравствуйте, Shmj, Вы писали:

S>B здесь главное не поддаться греху гордыни — когда тебе хочется доказать другим что ты способен, что SFINAE и 4-х этажные шаблоны тебе по плечу. А нужно не поддаваться греху гордыни а наоборот проявить смирение и кротость — аскетизм. Ограничить себя в излишествах и довольствоваться простым минимализмом.

S>


Ну вот я всегда пишу аскетичный код. И вообще стараюсь не использовать ничего кроме циклов, условий и подпрограмм.
И только когда этого не хватает, применяю что-нибудь другое.
Начинаю с макросов. Потом функции высшего порядка (как qsort), и только потом всё остальное.

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Концепция умного C++
От: Shmj Ниоткуда  
Дата: 18.04.25 07:48
Оценка:
Здравствуйте, Maniacal, Вы писали:

S>>3. Отказ от макросов.

M>макросы это фишка C, а не C++, отказываться от фишек C в пользу C++ это какой-то неумный C

Ох ё... Это вторая концепция же — в первой, где С с классами — макросы разрешены.

S>>4. Запрет множественного наследования реализаций.

M>Ещё большее урезание. Тогда лучше использовать умный C#

C# просто тупо физически не позволяет писать кросс-платформенные библиотеки (под все 6 платформ человечества), пригодные для реального использования из других языков через FFI. Покажите мне хотя бы одну такую библиотеку.
=сначала спроси у GPT=
Re: Концепция умного C++
От: rg45 СССР  
Дата: 18.04.25 07:57
Оценка: +4
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой.

S>Встречалась ли вам концепция — "C++ как C с классами"...

У меня вопрос другой: ты нахрена опять профильный форум загаживаешь своей трепологией? Тебе КСВ мало?
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Концепция умного C++
От: Pzz Россия https://github.com/alexpevzner
Дата: 18.04.25 07:58
Оценка:
Здравствуйте, Shmj, Вы писали:

Pzz>>Нихрена он не кросс-платформенный. Даже в разные дистрибутивы линуха целиться с помощью C++ проблематично: непонятно, на какие библиотеки можно рассчитывать.


S>А причем тут библиотеки? Библиотеки и системные функции — это отдельный вопрос — главное что ваши программы будут 100% компилировать под все платформы.


Потому, что возможность программировать кросс-платформенно, но без библиотек, имеет исключительно акедемическую ценность.

Pzz>>А таскать это с собой — кросс-платформенность немедленно превращается в лютый геморрой, когда даже сборку программы отстроить становится весьма непростой проблемой.


S>Кросс-платформа — всегда не просто и не дешево, но на практике на C++ это проще всего получается.


Я в курсе.

S>На C++ есть уже готовые кросс-платформенные либы, которые реально работают.


Pzz>>Вот Go, да, он кросс-платформенный. Rust подозреваю, что тоже.


S>Go — это сборщик мусора, тащить за собой всю среду не оно. Как и .Net.


.Net ташит за собой рантайм в виде кучи файлов. Go просто линкует программу статически.

S>Rust не имеет полноценного ООП — это скорее замена голого C и то спорная.


И что?
Re[4]: Концепция умного C++
От: Shmj Ниоткуда  
Дата: 18.04.25 08:06
Оценка: :)
Здравствуйте, Pzz, Вы писали:

Pzz>Потому, что возможность программировать кросс-платформенно, но без библиотек, имеет исключительно акедемическую ценность.


Уже есть ряд библиотек, которые так же придерживаются концепции кросс-платформы.

Pzz>.Net ташит за собой рантайм в виде кучи файлов. Go просто линкует программу статически.


Вроде для WASM — пустое приложение уже получается слишком большим.

На iOS — плохая поддержка.

На C++ QT можно писать полноценное приложение для iOS — на Go не возможно даже за миллиард долларов.

S>>Rust не имеет полноценного ООП — это скорее замена голого C и то спорная.

Pzz>И что?

ООП не смотря на популярные статьи крикунов — это основа разработки ПО.
=сначала спроси у GPT=
Re: Концепция умного C++
От: rg45 СССР  
Дата: 18.04.25 09:07
Оценка: 6 (1) +2
Здравствуйте, Shmj, Вы писали:

S>B здесь главное не поддаться греху гордыни — когда тебе хочется доказать другим что ты способен, что SFINAE и 4-х этажные шаблоны тебе по плечу. А нужно не поддаваться греху гордыни а наоборот проявить смирение и кротость — аскетизм. Ограничить себя в излишествах и довольствоваться простым минимализмом.

S>


На этот вопрос я тебе уже отвечал
Автор: rg45
Дата: 16.04.25
, но ты, как обычно, предпочёл "не заметить" неудобную информацию.

Что ж, повторюсь. Нормальные программисты используют шаблоны и SFINAE совсем не для того, чтобы кому-то что-то доказать, а для того, чтобы решать какие-то задачи. Отказ от использования перечисленного — это просто отказ от решения задач. А сложный и запутанный код, как правило, получается у новичков, которые только начинают осваивать этот подход. У опытных программистов даже со SFINAE код получается понятным и читабельным, вот тебе свежий пример:

http://rsdn.org/forum/cpp/8923323.1
Автор: rg45
Дата: 18.04.25


template<typename CharPointerType>
const char* rawConstCharPtrFromIterator(CharPointerType* pstr)
{
   return reinterpret_cast<const char*>(pstr);
}

template <typename IteratorType, std::enable_if_t<
    IsDereferenceableToLvalue<IteratorType>
    and not IsPointer<IteratorType>
, int> = 0>
const char* rawConstCharPtrFromIterator(IteratorType it)
{
   return reinterpret_cast<const char*>(&*it);
}


Также повторюсь, что SFINAE потерял актуальность с приходом концептов. И современный C++ позволяет записывать то же самое компактнее и элегантнее:

http://rsdn.org/forum/cpp/8923201.1
Автор: rg45
Дата: 18.04.25


const char* rawConstCharPtrFromIterator(Pointer auto p)
{
   return reinterpret_cast<const char*>(p);
}
const char* rawConstCharPtrFromIterator(Dereferenceable auto it)
{
   return reinterpret_cast<const char*>(&*it);
}



Но главное, чего ты не соображаешь — это то, что некоторая сложность при реализации шаблонных сущностей — это всего лишь скромная плата за то упрощение, которое они дают в точках использования, число которых несоизмеримо больше, чем код самих шаблонов:

https://rsdn.org/forum/cpp/8923323.1
Автор: rg45
Дата: 18.04.25


   rawConstCharPtrFromIterator(c);
   rawConstCharPtrFromIterator(s.begin());
   rawConstCharPtrFromIterator(it);


Такие как ты предпочитают размазать говно по всему коду, вместо того, чтобы в одном месте написать пару несложных шаблончиков. И это вовсе не по каким-то "концептуальным" соображениям, а просто потому, что вам это недоступно, вот и всё.

А конкретно ты — просто неуч и лентяй. Вместо того, чтобы учиться и осваивать язык, ты ищешь способы, как программировать, не приходя в сознание.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 18.04.2025 9:54 rg45 . Предыдущая версия . Еще …
Отредактировано 18.04.2025 9:48 rg45 . Предыдущая версия .
Отредактировано 18.04.2025 9:47 rg45 . Предыдущая версия .
Отредактировано 18.04.2025 9:44 rg45 . Предыдущая версия .
Отредактировано 18.04.2025 9:43 rg45 . Предыдущая версия .
Отредактировано 18.04.2025 9:42 rg45 . Предыдущая версия .
Отредактировано 18.04.2025 9:18 rg45 . Предыдущая версия .
Re[3]: Концепция умного C++
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 18.04.25 09:49
Оценка:
Здравствуйте, Shmj, Вы писали:

M>>C++ разный. Пишешь библиотеку — тут можно и десятиэтажные шаблоны делать, главное — максимально всё предусмотреть, документировать , и чтобы она была максимально проста в использовании.


S>Это если библиотеку гарантированно никто другой не будет править.


Уровень библиотеко-писателей должен быть примерно одинаков, школоту конечно нельзя подпускать


M>>Пишешь прикладной код — тут можно и по простому.


S>А обоснование какое?


Прикладной код может и школота потом править



M>>Какую? Я из твоей портянки так и не понял, что за концепция. Я пишу максимально кондово и понятно для всех


S>Учись пока я жив. Берешь простыню текста и вводишь в GPT, потом задаешь свой вопрос. Учись, я сделал это для тебя:


S>

S>Автор описывает две концепции упрощённого C++:

S>1. «C++ как C с классами» — минимализм, RAII, отказ от сложностей языка.
S>2. «C++ как Java/C#» — управление через умные указатели, без сырых указателей и сложных шаблонов.


Правда, обеспечение RAII уже требует сложностей языка.
Правда, умные указатели (у это не разве не тоже RAII?) требуют сложностей языка.


S>С появлением GPT теперь мы юридически точно можем сказать кто дурак — пишущий или читающий. Так что теперь как раньше не прокатывает, уже нельзя обвинить оппонента без оснований — ранее можно было, т.к. критерия точного не было, теперь есть.


Не можем. безусловно, никакая AI-гопота не может быть арбитром
Маньяк Робокряк колесит по городу
Re[2]: Концепция умного C++
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 18.04.25 09:55
Оценка:
Здравствуйте, Marty, Вы писали:

M>Пишешь библиотеку — тут можно и десятиэтажные шаблоны делать, главное — максимально всё предусмотреть, документировать , и чтобы она была максимально проста в использовании.


Если использование библиотеки предполагает включение заголовка с этими "десятиэтажными шаблонами" в клиентский код, она никак не может быть "максимально проста в использовании". Чисто технически.
Re[3]: Концепция умного C++
От: rg45 СССР  
Дата: 18.04.25 09:57
Оценка: :)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Если использование библиотеки предполагает включение заголовка с этими "десятиэтажными шаблонами" в клиентский код, она никак не может быть "максимально проста в использовании". Чисто технически.


Угу. А Земля имеет форму чемодана. Потому что тебе так хочется.

Подключать-то по-разному можно. Если подключаешь только то, что нужно и только туда, где это нужно, то и проблем никаких у тебя не будет. Если же ты бездумно пхнешь все инклюды подряд в заголовки верхнего уровня, то, скорее всего, у тебя что-то с головой.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 18.04.2025 10:04 rg45 . Предыдущая версия . Еще …
Отредактировано 18.04.2025 10:00 rg45 . Предыдущая версия .
Re[2]: Концепция умного C++
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 18.04.25 09:57
Оценка: :)
Здравствуйте, Muxa, Вы писали:

M>Драйвер на Java? Ты совсем дурачек чтоли?


Те, кто регулярно спрашивает в сообществах, как им написать драйвер на питоне, не считают себя дурачками.
Re: Концепция умного C++
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 18.04.25 09:58
Оценка: :)))
Здравствуйте, Shmj, Вы писали:

S>3. Отказ от макросов.


C++ слишком убог, чтобы это было возможно без серьезного урезания удобства работы с ним.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.