Сообщение Re[3]: С++ всё? Rust навсегда? Простота от 07.07.2020 7:41
Изменено 07.07.2020 8:17 velkin
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++ запредельно сложен, а в том, что не все умеют использовать его по простому. Я, например, не умею, потому и решил почитать Страуструпа.
Афоризмы и цитаты о простоте
Усложнять просто, упрощать сложно.
Все должно быть изложено так просто, как только возможно, но не проще.
Будь проще, и ты поймешь, что проще некуда.
Нужно усложнять, чтобы в результате все стало проще, а не упрощать,
чтобы в результате все стало сложнее.
Если существует более сложный способ делать что либо, кто нибудь
непременно его откроет.
На всякого мудреца простоты не напасешься.
Не корчите из себя ничего; простота есть отпечаток гения.
Простота есть ближайшая родственница ума и дарований.
Простота делает жизнь не только более приятной, но… и более чистой и
прекрасной.
Простота есть необходимое условие прекрасного.
Язык правды прост.
Чем проще человек выражается, тем легче его понимают.
В характере, в манерах, в стиле, во всем самое прекрасное — это
простота.
Нет ничего проще, чем величие; воистину, быть простым — значит быть
великим.
Простота — это то, что труднее всего на свете; это крайний предел
опытности и последнее усилие гения.
Стремление к простоте жизни является у сложнейших душ, а все простое
стремится к сложности.
Все люди, занятые истинно важным делом, всегда просты, потому что не
имеют времени придумывать лишнее.
Ничто так, как простота, не содействует сближению людей.
Простота есть необходимое условие прекрасного.
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++ запредельно сложен, а в том, что не все умеют использовать его по простому. Я, например, не умею, потому и решил почитать Страуструпа.
Афоризмы и цитаты о простоте
Усложнять просто, упрощать сложно.
Все должно быть изложено так просто, как только возможно, но не проще.
Будь проще, и ты поймешь, что проще некуда.
Нужно усложнять, чтобы в результате все стало проще, а не упрощать,
чтобы в результате все стало сложнее.
Если существует более сложный способ делать что либо, кто нибудь
непременно его откроет.
На всякого мудреца простоты не напасешься.
Не корчите из себя ничего; простота есть отпечаток гения.
Простота есть ближайшая родственница ума и дарований.
Простота делает жизнь не только более приятной, но… и более чистой и
прекрасной.
Простота есть необходимое условие прекрасного.
Язык правды прост.
Чем проще человек выражается, тем легче его понимают.
В характере, в манерах, в стиле, во всем самое прекрасное — это
простота.
Нет ничего проще, чем величие; воистину, быть простым — значит быть
великим.
Простота — это то, что труднее всего на свете; это крайний предел
опытности и последнее усилие гения.
Стремление к простоте жизни является у сложнейших душ, а все простое
стремится к сложности.
Все люди, занятые истинно важным делом, всегда просты, потому что не
имеют времени придумывать лишнее.
Ничто так, как простота, не содействует сближению людей.
Простота есть необходимое условие прекрасного.