опять об c++ (программистское)
avva — 23.06.2010
Линус в очередной раз сказал,
что думает о C++. Вот длинная цитата, но вообще-то стоит все
прочитать.
One of the absolute worst features of C++ is how it makes a lot of things so context-dependent - which just means that when you look at the code, a local view simply seldom gives enough context to know what is going on.А вот что я писал четыре года назад :)
That is a huge problem for communication. It immediately makes it much harder to describe things, because you have to give a much bigger context. It's one big reason why I detest things like overloading - not only can you not grep for things, but it makes it much harder to see what a snippet of code really does.[...]
And C is a largely context-free language. When you see a C expression, you know what it does. A function call does one thing, and one thing only - there will not be some subtle issue about "which version" of a function it calls.
Одна из главных причин, почему C++ плохой язык: для этого надо сначала понять, почему C хороший. В чем состоит то свойство C, из-за которого его называют "портабильным ассемблером"? Дело не в том, что "близко к машине", и всё низкого уровня. Дело в том, что почти всегда в C эффект любой строки кода локален и очевиден. Когда я что-то делаю в C, неважно что, я очень хорошо понимаю, что именно происходит. Если я пишу x=y, я знаю точно, что происходит. Если я пишу f(...), я знаю точно, какая конкретно функция будет вызвана, я могу указать на неё пальцем, и я знаю точно, что произойдёт в момент входа в неё и выхода из неё. Если я выделяю память, я знаю точно, что она не исчезнет, пока я её не освобожу. Итд. итп. [...](это тоже длинная цитата, но не всё - см. по ссылке).
C++ - смесь разных принципов отношения к информации и средствам её прятать или открывать, которые доступны программисту; смесь, кажется, очень плохо продуманная. С одной стороны, полностью сохранён "низкий уровень" C, в том числе отсутствие сборки мусора, т.е. очень важный пример того, что заставляем программиста за всем следить и обо всём помнить. [...] Но, с другой стороны: полностью нарушен (я бы сказал, низвергнут с пьедестала и подвержен особо извращенному поруганию) этот самый принцип локальности поведения системы в ответ на строчку моего кода. Я всего лишь объявил переменную какого-то типа, написав "Typename varname;", но эта строчка может привести к вызову неизвестного мне конструктора, а за ним - кода сколь угодно, вообще говоря, сложности. Я всего лишь применяю известный мне оператор к переменной - а он, оказывает, overloaded у этого класса, и черт знает что на самом деле там произойдет. Я всего лишь вышел из функции, что может быть проще, написал }, а в рантайме на самом деле пошли плясать деструкторы всех автоматических объектов в этой функции. И даже и не буду начинать говорить про copy constructor и прочие подобные прелести.
Тогда я хорошо понимал, почему C лучше C++. Прошло четыре года, и теперь я хорошо понимаю, почему C++ лучше, чем C (сомневаюсь, что Линус об этом напишет). При этом я не отказываюсь ни от одного слова, и все еще считаю, что C лучше C++. Никаких дешевых парадоксов, просто два разных смысла слова 'лучше'. Об этом как-нибудь в другой раз.
|
|
</> |
Заказать продвижение сайта: как выбрать оптимальную стратегию
«Motorola T62»
Пушистая красотка
пааааанеслась!
на Гарде
Сотни книг написаны про воспитание детей. Часто они противоречат друг другу.
Предвоенная цензура на Тайване
Самый главный подарок для родителей...
Почин-2026 из аргентинской Патагонии.

