плохой язык C++ :)
От: Зверёк Харьковский  
Дата: 02.03.06 14:26
Оценка: 46 (7) +3 -6 :))) :))) :))) :))) :)))
avva пишет

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

Одна из главных причин, почему C++ плохой язык: для этого надо сначала понять, почему C хороший. В чем состоит то свойство C, из-за которого его называют "портабильным ассемблером"? Дело не в том, что "близко к машине", и всё низкого уровня. Дело в том, что почти всегда в C эффект любой строки кода локален и очевиден. Когда я что-то делаю в C, неважно что, я очень хорошо понимаю, что именно происходит. Если я пишу x=y, я знаю точно, что происходит. Если я пишу f(...), я знаю точно, какая конкретно функция будет вызвана, я могу указать на неё пальцем, и я знаю точно, что произойдёт в момент входа в неё и выхода из неё. Если я выделяю память, я знаю точно, что она не исчезнет, пока я её не освобожу. Итд. итп. Атомарные строки кода переходят в атомарные куски кода во время запуска, и никаких сюрпризов. Есть исключения: например, если я вызываю функцию через ссылку, я не знаю, что собственно я вызвал, до рантайма. Но этих исключений очень мало и они тоже "локализованы" и их легко понять.

Это необязательно хорошо. Но это — в C — выполняется последовательно, и то, что это последовательно — хорошо. Разные языки по-разному решают вопрос о том, как позволить программистам прятать информацию от самих себя. В объектно-ориентированных языках принцип полиморфизма, принципиального незнания мной того, объект какого класса я вызываю по ссылке (базового или наследника), является краеугольным; и это по-своему хорошо, если проведено последовательно.

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

Но, с другой стороны: полностью нарушен (я бы сказал, низвергнут с пьедестала и подвержен особо извращенному поруганию) этот самый принцип локальности поведения системы в ответ на строчку моего кода. Я всего лишь объявил переменную какого-то типа, написав "Typename varname;", но эта строчка может привести к вызову неизвестного мне конструктора, а за ним — кода сколь угодно, вообще говоря, сложности. Я всего лишь применяю известный мне оператор к переменной — а он, оказывает, overloaded у этого класса, и черт знает что на самом деле там произойдет. Я всего лишь вышел из функции, что может быть проще, написал }, а в рантайме на самом деле пошли плясать деструкторы всех автоматических объектов в этой функции. И даже и не буду начинать говорить про copy constructor и прочие подобные прелести.

Так вот, поэтому C++ — плохой язык.

Он настолько много прячет за кулисами, чтобы навязать программисту режим работы "моя хата с краю": пиши свой код, не волнуйся насчёт того, что магически происходит вокруг него, всё хорошо, всё идёт по плану... И в то же время того же программиста заставляет следить за всеми malloc()'ами и new, рассчитывать ужасные иерархии наследования и дикие функции-"френды", не говоря уж о темплейтах. По сути дела, медленно и неумолимо превращает программиста в шизофреника.

FAQ — це мiй ай-кью!
Re: плохой язык C++ :)
От: IT Россия linq2db.com
Дата: 02.03.06 14:36
Оценка: 1 (1) +4 :))) :))) :)))
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>avva пишет


Со всех сторон бедные плюсы подпёрли. Сишники-пуританцы снизу, дотнетчики сверху
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: плохой язык C++ :)
От: Kluev  
Дата: 02.03.06 14:38
Оценка: +4
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Зверёк Харьковский, Вы писали:


ЗХ>>avva пишет


IT>Со всех сторон бедные плюсы подпёрли. Сишники-пуританцы снизу, дотнетчики сверху


Собаки лают, караван идет.
Re[2]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.03.06 14:38
Оценка: :))) :))) :))) :)
Здравствуйте, IT, Вы писали:

IT>Со всех сторон бедные плюсы подпёрли. Сишники-пуританцы снизу, дотнетчики сверху


Rubyist-ы слева, а функциональщики -- справа

И только C++никам все по барабану


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: плохой язык C++ :)
От: anonymous_user  
Дата: 02.03.06 14:45
Оценка: 6 (2) +1 :))) :))) :))
Здравствуйте, Зверёк Харьковский, Вы писали:

мир вообще очень сложен
бабочка махнет крылом в китае, и начнется ураган во флориде
а с++ был создан затем, чтобы максимально удобно отразить в коде всю сложность окружающего мира
Re[3]: плохой язык C++ :)
От: IT Россия linq2db.com
Дата: 02.03.06 14:48
Оценка: +1 :)))
Здравствуйте, Kluev, Вы писали:

IT>>Со всех сторон бедные плюсы подпёрли. Сишники-пуританцы снизу, дотнетчики сверху


K>Собаки лают, караван идет.


Главное, что бы этот караван не превратился в караван неуловимых Джо
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: плохой язык C++ :)
От: Programmierer AG  
Дата: 02.03.06 14:51
Оценка: +3 :))) :))) :))) :))) :))) :)
Здравствуйте, anonymous_user, Вы писали:

_>мир вообще очень сложен

_>бабочка махнет крылом в китае, и начнется ураган во флориде
_>а с++ был создан затем, чтобы максимально удобно отразить в коде всю сложность окружающего мира
В C++ можно замечательно отражать в коде всю сложность C++ .

А насчет всей сложности окружающего мира — это ты загнул.
Re[3]: плохой язык C++ :)
От: IT Россия linq2db.com
Дата: 02.03.06 14:56
Оценка:
Здравствуйте, eao197, Вы писали:

IT>>Со всех сторон бедные плюсы подпёрли. Сишники-пуританцы снизу, дотнетчики сверху


E>Rubyist-ы слева, а функциональщики -- справа


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

E>И только C++никам все по барабану


Ну дай бог им здоровья
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: плохой язык C++ :)
От: Programmierer AG  
Дата: 02.03.06 14:59
Оценка: +2 :))) :))) :)
Здравствуйте, eao197, Вы писали:


IT>>Со всех сторон бедные плюсы подпёрли. Сишники-пуританцы снизу, дотнетчики сверху

E>Rubyist-ы слева, а функциональщики -- справа
Я правильно понимаю, что Rubyist-ы — коммунисты, а функциональщики — экстремисты?
Re[4]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.03.06 15:02
Оценка: +1
Здравствуйте, IT, Вы писали:

E>>И только C++никам все по барабану


IT>Ну дай бог им здоровья


Спасибо!


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: плохой язык C++ :)
От: amih Россия  
Дата: 02.03.06 15:02
Оценка: 3 (1) +1 -1
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>avva пишет


ЗХ>

ЗХ>Следующие рассуждения в принципе мне кажутся очень простыми, но ни разу их не встречал.

ЗХ>Одна из главных причин, почему C++ плохой язык: для этого надо сначала понять, почему C хороший. В чем состоит то свойство C, из-за которого его называют "портабильным ассемблером"? Дело не в том, что "близко к машине", и всё низкого уровня. Дело в том, что почти всегда в C эффект любой строки кода локален и очевиден. Когда я что-то делаю в C, неважно что, я очень хорошо понимаю, что именно происходит. Если я пишу x=y, я знаю точно, что происходит. Если я пишу f(...), я знаю точно, какая конкретно функция будет вызвана, я могу указать на неё пальцем, и я знаю точно, что произойдёт в момент входа в неё и выхода из неё. Если я выделяю память, я знаю точно, что она не исчезнет, пока я её не освобожу. Итд. итп. Атомарные строки кода переходят в атомарные куски кода во время запуска, и никаких сюрпризов. Есть исключения: например, если я вызываю функцию через ссылку, я не знаю, что собственно я вызвал, до рантайма. Но этих исключений очень мало и они тоже "локализованы" и их легко понять.
...
превращает программиста в шизофреника.


угу, но только вот при объеме такого "простого и понятного" кода на С в несколько десятков тысяч строк кода понять где что происходит становится вабще невозможно. "из-за деревьев леса не видно". где что инициализируется, где разрушается... и механизмов поправить это в С нет. да, программирование уже вылезло из пеленок, теперь f(...) может означать что угодно, но обратного пути нет, т.к. системы будут становиться только сложнее и сложнее и язык должет отражать эти изменения. обычный человеческий язык тоже сложен и многозначан, но ты ведь понимаеш что я пишу. или ты предлагаеш вернуться к завязыванию узилков на веревочке?
Re[2]: плохой язык C++ :)
От: AVC Россия  
Дата: 02.03.06 15:04
Оценка: 12 (1) :))) :))) :))) :)
Здравствуйте, IT, Вы писали:

IT>Со всех сторон бедные плюсы подпёрли. Сишники-пуританцы снизу, дотнетчики сверху


Сверху, снизу...
Дождемся, кто пристроится сзади...

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

Хоар
Re[4]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.03.06 15:04
Оценка: +1
Здравствуйте, Programmierer AG, Вы писали:

PA>Я правильно понимаю, что Rubyist-ы — коммунисты, а функциональщики — экстремисты?


На счет коммунизма -- это вряд ли. Скорее хиппи

Про функциональшиков ничего не скажу, бо злые они.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.03.06 15:10
Оценка: :))) :))
Здравствуйте, Programmierer AG, Вы писали:

PA>А насчет всей сложности окружающего мира — это ты загнул.


Да, для этого C++ еще не достаточно сложен.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: плохой язык C++ :)
От: Programmierer AG  
Дата: 02.03.06 15:16
Оценка: +1 :)))
Здравствуйте, eao197, Вы писали:

E>Да, для этого C++ еще не достаточно сложен.

Саттер над этим уже работает.

А для отражения зависимости ураганов от бабочек очень не хватает деструкторов копии .
Re[5]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.03.06 15:19
Оценка: -1
Здравствуйте, Programmierer AG, Вы писали:

E>>Да, для этого C++ еще не достаточно сложен.

PA>Саттер над этим уже работает.

Угу. Но не он один. Нужно еще Александреску вспомнить, и Абрахамса, и Гуртового и пр. Правда они не столько над языком работают, сколько над стилем его использования. Нужно сказать, что у них получается.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: плохой язык C++ :)
От: Programmierer AG  
Дата: 02.03.06 15:24
Оценка: :))) :)))
Здравствуйте, eao197, Вы писали:

E>Угу. Но не он один. Нужно еще Александреску вспомнить, и Абрахамса, и Гуртового и пр. Правда они не столько над языком работают, сколько над стилем его использования. Нужно сказать, что у них получается.


Это диверсанты-функциональщики на самом деле .
Re[7]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.03.06 15:32
Оценка: :)
Здравствуйте, Programmierer AG, Вы писали:

PA>Это диверсанты-функциональщики на самом деле .


Вот я и говорю: бо злые они, функциональщики


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: плохой язык C++ :)
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 02.03.06 17:02
Оценка: 7 (2) +1
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Следующие рассуждения в принципе мне кажутся очень простыми, но ни разу их не встречал.


Я встречал в частных беседах

Что такое хорошо и что такое плохо это извечный вопрос. Да, C хорош тем, что позволяет четко отследить порядок действий. Одного этого достаточно для написания достаточно сложным комплексов (таких как Linux, Free BSD, ...).

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

С++ поддерживает несколько способов. Убрав лишние фичи, мы можем получить C-подобный язык, другие фичи --- Java-подобный, третьи фичи --- некий макроязык. Плюс это или минус --- также философский вопрос, на который тоже нет однозначного ответа.
Re[3]: плохой язык C++ :)
От: vladserge Россия  
Дата: 02.03.06 17:57
Оценка: -1 :)))
Здравствуйте, Kluev, Вы писали:

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


IT>>Здравствуйте, Зверёк Харьковский, Вы писали:


ЗХ>>>avva пишет


IT>>Со всех сторон бедные плюсы подпёрли. Сишники-пуританцы снизу, дотнетчики сверху


K>Собаки лают, караван идет.


на йух
С Уважением Сергей Чикирев
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.