понедельник, 27 сентября 2010 г.

[prog.flame] Понравился наезд на C++ со стороны Гая Стила

Вот здесь Гай Стил (если я правильно понял авторство) забавно высказался:

As for C++–well, it reminds me of the Soviet-era labor joke: "They pretend to pay us, and we pretend to work." C++ pretends to provide an object-oriented data model, C++ programmers pretend to respect it, and everyone pretends that the code will work. The actual data model of C++ is exactly that of C, a single two-dimensional array of bits, eight by four billion, and all the syntactic sugar of C++ fundamentally cannot mask the gaping holes in its object model left by the cast operator and unconstrained address arithmetic.

Или в моем вольном переводе:

По отношению к C++ это мне напоминает шутку советских служащих: “Они делают вид, что платят нам, а мы делаем вид, что работаем.” С++ делает вид, что предоставляет объектно-ориентированную модель данных, С++ программисты делают вид, что признают это, и каждый делает вид, что код будет работать. Но настоящая модель данных С++ точно такая же, как в C – единственный двумерный массив бит, восемь на четыре миллиарда, и весь синтаксический сахар C++ совершенно не может скрыть зияющих дыр в его объектной модели, которые были проделаны операторами приведения и неконтролируемой адресной арифметикой.

Гай Стил – один из авторов языка Scheme. Принимал участие в комитетах по стандартизации нескольких языков (C, ECMAScript, Fortran, Common Lisp). А с 2005 в Sun-е он руководил разработкой языка Fortress. В общем, авторитетный в области computer science дядька.

Особенно мне понравился пассаж про “каждый делает вид, что код будет работать”. Веселуха, мля. Вокруг полно кода, который, как бы то не нравилось ученым-теоретикам, работает. И, что совсем удивительно, впечатляющий объем этого кода написан как раз на C++. Т.е. к жизни эта замечательная по своей ироничности и остроумности фраза имеет очень далекое отношение. Зато иронично и остроумно. И Гай Стил, да.

8 комментариев:

  1. "Copyright 2002" н-да... занимаешься археологией? :)

    ОтветитьУдалить
  2. Типа того :)
    На RSDN-е проскочила ссылка на какое-то обсуждение "провала ООП", копнул туда и набрел вот на этот документик.

    К тому же для C++а 2002 -- это еще ничего. С тех пор все равно нового стандарта не принято. Так что фундаментальных изменений нет.

    Да и лисповоды с тех пор менее оголтелыми не стали. Скорее даже наоборот. После того как Yahoo их главного флагмана -- какую-то торговую площадку написанную Полом Грэхемом -- стал переписывать на C++ :)

    ОтветитьУдалить
  3. Замыкания появились... В GCC и MSVC уже работают.

    ОтветитьУдалить
  4. @san: в компиляторах появились, в стандарте еще нет :)

    PS. Сдается мне, что они не совсем замыкания. Для настоящих замыканий GC нужен.

    ОтветитьУдалить
  5. > and all the syntactic sugar of C++ fundamentally cannot mask the gaping holes in its object model left by the cast operator and unconstrained address arithmetic.

    Бугага! Как будто в CLOS по-другому. (Кстати, а че там в схеме с объектной системой?)

    Вот легким движением руки достаем приватные слоты:

    http://www.linux.org.ru/jump-message.jsp?msgid=5377010&cid=5381992

    ОтветитьУдалить
  6. Во всех спорах вокруг ООП меня удивляет то, насколько редко упоминается труд Бертрана Мейера "Объектно-ориентированное конструированние программ". Он же там, помнится, очень толково и убедительно обосновывал ООП, отталкиваясь (чтобы не соврать) от идей абстрактных типов данных.

    ОтветитьУдалить
  7. Во всех спорах вокруг ООП меня удивляет то, насколько редко упоминается труд Бертрана Мейера "Объектно-ориентированное конструирование программ"
    Да просто наверное мало кто читал эту книгу, а некоторые, возможно, и не знают о ее существовании. А вот наезды на ООП идут постоянно. Вот один из последних:
    http://www.linux.org.ru/forum/development/5377010
    p.s. конструирование пишется с одной буквой "н".

    ОтветитьУдалить
  8. @Quaker: как раз эту ссылку и на RSDN-не пропиарили. Я пытался просмотреть материалы, на которые там были ссылки. Долго плевался. Если найду время, напишу об этом подробнее.

    ОтветитьУдалить