Информация об изменениях

Сообщение Re[3]: С++ всё? Rust навсегда? Простота от 07.07.2020 7:41

Изменено 07.07.2020 8:17 velkin

Re[3]: С++ всё? Rust навсегда? Простота
Здравствуйте, Erop, Вы писали:

E>Ну всё-таки для С++ уровень нужен повыше. И если задачи совсем простые -- типа клепания 100500 шаблонных формочек и отчётов, то С++ таки избыточен


А я сейчас решил почитать "Язык программирования C++. Специальное издание" Бьёрна Страуструпа.

Часть конспекта по 4.1 Фундаментальные типы:
типы C++
+-------------+--------+-------------------------------+
|название     |типы    |категория                      |
+-------------+--------+------------+--+---------------+
|логические   |bool    |            |  |               |
|символьные   |char    |интегральные|  |               |
|целые        |int     |(целые)     |  |               |
+-------------+--------+------------+  |фундаментальные|
|вещественные |double  |арифметические |(встроенные)   |
+-------------+--------+---------------+               |
|отсутствующие|void    |                               |
+-------------+--------+-------------------------------+
|указательные |тип*    |                               |
|массивы      |тип[]   |построенные поверх типов       |
|ссылочные    |тип&    |                               |
+-------------+--------+-------------------------------+
|перечислимые |enum    |                               |
|структуры    |struct  |определяемые пользователем     |
|классы       |class   |                               |
+-------------+--------+-------------------------------+

И он дальше пишет:

Фундаментальные типы языка C++ вместе с указателями и массивами предоставляют программисту отражение этого машинного уровня в манере, относительно независимой от конкретной реализации.

В большинстве приложений можно обойтись типом bool ддя логики, типом char для символов, типом int для целых чисел и типом double — для дробных (чисел с плавающей запятой). Остальные фундаментальные типы являются вариациями, предназначенными для оптимизации и решения специальных задач, и их лучше до поры игнорировать. Но, разумеется, их нужно знать для чтения существующего стороннего кода на С и C++.

Он буквально говорит,
1) арифметические типы имеют прямое отражение в машинном коде.
2) существует лишь 4-е арифметических типа: bool, char, int, double.

Я то, конечно, знаю, что можно породить кучу типов из каждого, и каждая операция будет преобразована в соответствующие команды процессора.

Продолжение конспекта:

оптимизация арифметических типов:
1) объём занимаемой памяти
2) точность представления
3) диапазоны значений

без оптимизации рекомендуется использовать арифметические типы:
1) логика bool
2) символы char
3) целые int
4) вещественные double


И опять же помимо этого поверх можно построить:
1) указатель (константный указатель, указатель на константу, константный указатель на константу)
2) массив (многомерный массив)
3) ссылку (ссылку на константу)

И чем дальше в лес, тем толще партизаны. По словам Страуструпа я могу сделать вывод, что даже float это оптимизация. А программисты могли бы не париться и запомнить четыре арифметических типа.

А что насчёт языков программирования где нет оптимизации арифметических типов? Могу ли я сказать, что вот здесь нет такой оптимизации и это хорошо? А что если я последую советам Страуструпа и не буду использовать в C++ оптимизации?

Очевидно одна из проблем заключается в принципе:

Если в начале пьесы на стене висит ружье, то к концу пьесы оно должно выстрелить


Если людям дали возможность разделить класс физически на заголовочный файл и единицу компиляции, то мы же не можем этим не воспользоваться, не так ли? Мы уже не можем написать всё в одном файле, чтобы программирование в C++ напоминало программирование в скрипте. Вы разве не видите, что висит ружьё? Следовательно оно должно выстрелить. А в C++ очень много таких ружей.

Тоже клепание формочек может показаться простой задачей, особенно с генератором формочек. Но что если нужно будет создать формочки с нуля, то есть код отвечающий за их отображение и взаимодействие с пользователем или другими системами?

Или проведём умственный эксперимент. А что если бы программист не знал про оптимизации арифметических типов в C++? Вот пожалуйста, снижение требований как к программистам, так и к программным системам.

То же множественное наследование вне интерфейсов в C++, так не хочешь, не пользуйся. Но нет, мы же не можем отказаться, на стене висит ружьё: — "Надо Федя, надо". Но почему его отсутствие превратилось в преимущество C# или других языков программирования лично я не понимаю.

А вывод у меня такой. Дело не в том, что C++ запредельно сложен, а в том, что не все умеют использовать его по простому. Я, например, не умею, потому и решил почитать Страуструпа.

Афоризмы и цитаты о простоте

Усложнять просто, упрощать сложно.
Все должно быть изложено так просто, как только возможно, но не проще.
Будь проще, и ты поймешь, что проще некуда.
Нужно усложнять, чтобы в результате все стало проще, а не упрощать,
чтобы в результате все стало сложнее.
Если существует более сложный способ делать что либо, кто нибудь
непременно его откроет.
На всякого мудреца простоты не напасешься.
Не корчите из себя ничего; простота есть отпечаток гения.
Простота есть ближайшая родственница ума и дарований.
Простота делает жизнь не только более приятной, но… и более чистой и
прекрасной.
Простота есть необходимое условие прекрасного.
Язык правды прост.
Чем проще человек выражается, тем легче его понимают.
В характере, в манерах, в стиле, во всем самое прекрасное — это
простота.
Нет ничего проще, чем величие; воистину, быть простым — значит быть
великим.
Простота — это то, что труднее всего на свете; это крайний предел
опытности и последнее усилие гения.
Стремление к простоте жизни является у сложнейших душ, а все простое
стремится к сложности.
Все люди, занятые истинно важным делом, всегда просты, потому что не
имеют времени придумывать лишнее.
Ничто так, как простота, не содействует сближению людей.
Простота есть необходимое условие прекрасного.

Re[3]: С++ всё? Rust навсегда? Простота
Здравствуйте, Erop, Вы писали:

E>Ну всё-таки для С++ уровень нужен повыше. И если задачи совсем простые -- типа клепания 100500 шаблонных формочек и отчётов, то С++ таки избыточен


А я сейчас решил почитать "Язык программирования C++. Специальное издание" Бьёрна Страуструпа.

Часть конспекта по 4.1 Фундаментальные типы:
типы C++
+-------------+--------+-------------------------------+
|название     |тип     |категория                      |
+-------------+--------+------------+--+---------------+
|логические   |bool    |            |  |               |
|символьные   |char    |интегральные|  |               |
|целые        |int     |(целые)     |  |               |
+-------------+--------+------------+  |фундаментальные|
|вещественные |double  |арифметические |(встроенные)   |
+-------------+--------+---------------+               |
|отсутствующие|void    |                               |
+-------------+--------+-------------------------------+
|указательные |тип*    |                               |
|массивы      |тип[]   |построенные поверх типов       |
|ссылочные    |тип&    |                               |
+-------------+--------+-------------------------------+
|перечислимые |enum    |                               |
|структуры    |struct  |определяемые пользователем     |
|классы       |class   |                               |
+-------------+--------+-------------------------------+

И он дальше пишет:

Фундаментальные типы языка C++ вместе с указателями и массивами предоставляют программисту отражение этого машинного уровня в манере, относительно независимой от конкретной реализации.

В большинстве приложений можно обойтись типом bool ддя логики, типом char для символов, типом int для целых чисел и типом double — для дробных (чисел с плавающей запятой). Остальные фундаментальные типы являются вариациями, предназначенными для оптимизации и решения специальных задач, и их лучше до поры игнорировать. Но, разумеется, их нужно знать для чтения существующего стороннего кода на С и C++.

Он буквально говорит,
1) арифметические типы имеют прямое отражение в машинном коде.
2) существует лишь 4-е арифметических типа: bool, char, int, double.

Я то, конечно, знаю, что можно породить кучу типов из каждого, и каждая операция будет преобразована в соответствующие команды процессора.

Продолжение конспекта:

оптимизация арифметических типов:
1) объём занимаемой памяти
2) точность представления
3) диапазоны значений

без оптимизации рекомендуется использовать арифметические типы:
1) логика bool
2) символы char
3) целые int
4) вещественные double


И опять же помимо этого поверх можно построить:
1) указатель (константный указатель, указатель на константу, константный указатель на константу)
2) массив (многомерный массив)
3) ссылку (ссылку на константу)

И чем дальше в лес, тем толще партизаны. По словам Страуструпа я могу сделать вывод, что даже float это оптимизация. А программисты могли бы не париться и запомнить четыре арифметических типа.

А что насчёт языков программирования где нет оптимизации арифметических типов? Могу ли я сказать, что вот здесь нет такой оптимизации и это хорошо? А что если я последую советам Страуструпа и не буду использовать в C++ оптимизации?

Очевидно одна из проблем заключается в принципе:

Если в начале пьесы на стене висит ружье, то к концу пьесы оно должно выстрелить


Если людям дали возможность разделить класс физически на заголовочный файл и единицу компиляции, то мы же не можем этим не воспользоваться, не так ли? Мы уже не можем написать всё в одном файле, чтобы программирование в C++ напоминало программирование в скрипте. Вы разве не видите, что висит ружьё? Следовательно оно должно выстрелить. А в C++ очень много таких ружей.

Тоже клепание формочек может показаться простой задачей, особенно с генератором формочек. Но что если нужно будет создать формочки с нуля, то есть код отвечающий за их отображение и взаимодействие с пользователем или другими системами?

Или проведём умственный эксперимент. А что если бы программист не знал про оптимизации арифметических типов в C++? Вот пожалуйста, снижение требований как к программистам, так и к программным системам.

То же множественное наследование вне интерфейсов в C++, так не хочешь, не пользуйся. Но нет, мы же не можем отказаться, на стене висит ружьё: — "Надо Федя, надо". Но почему его отсутствие превратилось в преимущество C# или других языков программирования лично я не понимаю.

А вывод у меня такой. Дело не в том, что C++ запредельно сложен, а в том, что не все умеют использовать его по простому. Я, например, не умею, потому и решил почитать Страуструпа.

Афоризмы и цитаты о простоте

Усложнять просто, упрощать сложно.
Все должно быть изложено так просто, как только возможно, но не проще.
Будь проще, и ты поймешь, что проще некуда.
Нужно усложнять, чтобы в результате все стало проще, а не упрощать,
чтобы в результате все стало сложнее.
Если существует более сложный способ делать что либо, кто нибудь
непременно его откроет.
На всякого мудреца простоты не напасешься.
Не корчите из себя ничего; простота есть отпечаток гения.
Простота есть ближайшая родственница ума и дарований.
Простота делает жизнь не только более приятной, но… и более чистой и
прекрасной.
Простота есть необходимое условие прекрасного.
Язык правды прост.
Чем проще человек выражается, тем легче его понимают.
В характере, в манерах, в стиле, во всем самое прекрасное — это
простота.
Нет ничего проще, чем величие; воистину, быть простым — значит быть
великим.
Простота — это то, что труднее всего на свете; это крайний предел
опытности и последнее усилие гения.
Стремление к простоте жизни является у сложнейших душ, а все простое
стремится к сложности.
Все люди, занятые истинно важным делом, всегда просты, потому что не
имеют времени придумывать лишнее.
Ничто так, как простота, не содействует сближению людей.
Простота есть необходимое условие прекрасного.