Обсуждаем языки программирования

Тема в разделе "Машинное отделение", создана пользователем WinPooh, 10 июл 2006.

  1. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Видимо, от этой темы никуда не деться :)

    Сейчас скопирую сюда начало дискуссии из ветки, которую по ошибке удалил раньше времени (но страничка в кэше осталась).

    atoku:

    Все котируется. Я не совсем линуксоид. Скорее законченный юниксоид. Под винду писал, много на С++ и MFC (можно еще найти мой Uni-K Sensei в интернете), но потом крайне разочаровался в С++ и теперь пишу либо на чистом С (ANSI C99) если нужна скорость работы, либо на Python. Пробовал что-то делать на Haskell и Лиспе, но пока ниасилил на нужном уровне и работа продвигается довольно медленно. Дело в том, что основное мое дело - это наука, типа космическая физика smile

    bankuss:

    ну С++ от С только классами отличается, а их в шахматах применять не обязательно smile

    winpooh:

    Ох, не только...

    atoku:

    С++ отличается от С только тем, что С++ - это бред сумасшедшего, в котором без поллитра делать нечего. Единственно хоть немного ценного в С++ - это шаблоны - которые Страуструп ненавидит и не хотел включать в стандарт - и STL. Все остальное идет лесом. Впрочем, структуры с методами имеют право на жизнь. А вот вся эта неортогональная бредовая конструкция с наследованием, виртуальщина и прочее - слишком сложно. Одно и то же можно написать тысячью способов, в итоге народ использует лишь собственное подмножество языка и не понимает друг дружку.

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

    winpooh:

    А как же exceptions? Неужели тоже лесом?

    atoku:

    Лесом! Зачем они нужны? assert максимум что нужно для здоровой программы. Впрочем, это не так тупо, безусловно, даже в питоне есть трай, но излишне, ведь можно просто обрабатывать код ошибки программы.

    Да, верно, лесом и эксепшены! smile

    Да, в С мне несколько не хватает перегрузки функций wink

    winpooh:

    exceptions - замечательная вещь
    Вот думает, например, программа, над ходом. И тут на глубине 25 полуходов вдруг замечает, что у неё кончилось выделенное на ход время. Или пользователь, что серьезнее, нажал кнопку MoveNow.

    Что делает программист на С? Вызывает грязный хак с setjmp/longjmp, или какой-нибудь не менее грязный хак с глобальным флагом (в Греке сейчас так, и мне за этот код стыдно). Или, того хуже, возвращает через 25 вызовов наверх спецзначение: пора делать ход.

    Что делает программист на C++? Кидает исключение smile

    А насчёт обработки кода ошибки - есть классический пример, называется "последовательное выделение ресурсов". При количестве выделяемых ресурсов более трёх получаем спаггетти. Кушать подано smile

    atoku:

    Я не очень понял в чем проблема. Сделал оценку, проверил время. Время вышло - вернуться к предыдущему выбранному ходу, когда думалось на 24 полухода.

    Аналогично и с пользовательским прерыванием.

    Код ошибки пока у меня спагетти не вызывал ни разу smile
    Или там рекурсия? - хм... Ну, а чем плох лонгджамп? wink

    NS:

    У меня тоже выставляется флаг, и идет возврат по дереву.
    Ничего плохого в этом не вижу.
    Исключение - не очень хороший метод. Мне не нравится. smile
    Но кто мешает рекурсию полностью заменить стеком?

    atoku:

    Да нет, и без лонгджампа взад можно обойтись, я уверен. Просто надо немного переиначить стихотворение smile Я имею в виду код.

    Мне кажется, что рекурсию лучше оставить - это красиво! smile

    NS:

    Красиво?
    Программа должна быть понятной, и быстрой smile
    В search() передается слишком много параметров.
    Намного понятней и лучше делать на стеке, тем более что есть возможность обратится не только к текущим значениям параметров, но и посмотреть их историю.
    Я от рекурсии при переписывании откажусь. smile

    atoku:

    Умных людей надо слушать. Я тогда тоже сделаю без рекурсии. smile Сделаю на двустороннем списке, чтобы не повторяться smile

    winpooh:

    Ты будешь смеяться, но он, стек, там уже есть.
    Только не руками программиста реализованный, а рантайм-средой smile

    Для кого - понятнее? Для читателя? Не уверен. Хуже глобальных параметров ничего нет, мне кажется.
    Этак вы скоро до ассемблера договоритесь smile

    Вопрос на засыпку: для чего вообще люди придумали параметры фукнций? Передавали бы всё через общие ячейки памяти, как в Фортране-IV... Эффективность зато, да.

    И не говорите мне про плохой стиль. Пока Анечка, написанная в хорошем стиле, не обыграет Фрукта, написанного "по-старинке", с параметрами функций и прочей неэффективностью smile

    Дело вкуса. С точки зрения скорости exceptions, думаю, не проигрывают longjmp, и существенно выигрывают у возврата по дереву.
  2. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Это не массовая операция, так что можно и по дереву растечься мыслею :)

    Глобальные переменные - это зло, адназначна! :) Впрочем, обычно даже дефайны с параметрами зло, а я их пользую беспощадно, вместо inline (который в С99 есть)
  3. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Вот сегодня прочитал у Хьятта, про тестовые матчи с контролем 100 ходов в 1 секунду. Думаю, там это будет уже критично.
  4. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Кстати, слышал что СмартСинк написан как-то функционально или что-то вроде того. Кто знает достоверно, отзовитесь!
  5. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Надо проверять, конечно, но разве матчи не сам с собой он проводит, для отладки ОФ - тогда не очень важно. А соревноваться с другими в таком режиме кто будет?
  6. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Насчет того, что стек и так есть - да, есть.
    Но сравни по сложности аварийный выход, когда перебор полностью на стеке организован с рекурсией....
    И странно, когда куча всего в стеке (массиве) хранится (вспомогательная информация, киллеры и т.д.), а часть в аппаратном (альфа, бетта, depth)
  7. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    На самом деле, я тоже постепенно в своих структурах данных какие-то "псевдо-стеки" завожу. Например, флаг находится ли позиция под шахом, держу сейчас в массиве для каждой глубины по отдельности - чтобы легко было проверить, как там "наверху"?
  8. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Так и зачем-же тогда рекурсия? :)
    Один стек объектов (я буду делать record в Делфи) и больше ничего не надо :)
  9. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    короче, в любом случае мне из всех языков С++ больше всего нравится. я бы яву выбирал, если бы она не была такой плотнообедающей памятью. вот. а дефайны вообще надо позабыть. что это?!!:rolleyes:
    константы и шаблоны круче.
  10. akupr Новичок

    • Новичок
    Рег.:
    11.02.2006
    Сообщения:
    72
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Руки прочь от C++ :)
  11. akupr Новичок

    • Новичок
    Рег.:
    11.02.2006
    Сообщения:
    72
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Хотя с исключениями для возврата из рекурсии, конечно, не соглашусь.
    Есть более "правильные" методы. Исключения должны применяться в исключительных случаях.
  12. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Да, нет на вас Луговского! Он бы назвал вас быдлокодерами и направил бы в биореактор по месту жительства.

    "Автору С++ место в дурке или на погосте" © В.С.Луговский.
  13. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Сказал, как отрезал :)
  14. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Если рассматривать исключения как события, то всё нормально.
    На самом деле всё это дело вкуса, лишь бы утечек памяти не было.
    При сворачивании через глобальный флаг можно четче отследить, и нормально свернуть рекурсию.
  15. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Исключительное событие - это то, что происходит редко. Например, сто миллионов узлов посмотрели нормально, а на сто миллионов первом надо ход делать - вполне себе исключительная ситуация.
    Невозможность открыть файл или создать сокет, думаю, случается чаще - а в этих случаях даже в стандартных библиотеках кидают исключения.

    Это всё схоластика :)
  16. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Хм, я все равно не понимаю, зачем там вообще что-то кидать. Рекурсия-то хвостовая? ;)
  17. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Не хвостовая она, увы. Возвращаемое значение проверяется, если оно нас по каким-то причинам не устраивает, может понадобиться повторный поиск с другим окном.
    Халявы не будет :)
  18. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Я уже заметил, что нет халявы в вашем шахматном программировании.

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

    У меня была первая идея тоже совать в список, но показалось, что в вектор - это более быстрое решение.

    Кстати, заодно хотел спросить: а как принято кодировать ход?
  19. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Обычно кодируют - одкуда (6 бит) и куда (6 бит) итого 12 бит на ход.
  20. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Не забудь ещё код фигуры, в которую превратились.

    Можно ещё хранить всякие флаги, облегчающие обработку - не взятие ли это на проходе, не рокировка ли...
    Можно добавочное поле для предварительной сортировки по MVV/LVA... И дальше - что подскажет фантазия. Скажем, если хранить код сходившей и взятой фигуры, упрощается MakeMove/UnmakeMove - зато чуть усложняется генератор.

    В общем, от 16 до 32 бит на ход - типичное значение.
  21. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Кстати у Крафти как раз хороший код :)
    И вдобавок с хорошими комментариями.
  22. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    У меня только в Ферзя :)
  23. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Тогда твоя программа играет не в шахматы, а в некоторую другую игру, пусть и с похожими правилами :)
  24. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Вопрос двоякий - как хранить ход в Хеше, или в каком виде выдавать генератором.
  25. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Я знаю. Первые доступные Рыбки тоже играли не в Шахматы :)
    Не знаю что на меня нашло, но я решил Собезьяничать :)
  26. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    А я хотел передавать вообще сразу маску 64 бита. Плюс код фигуры в нагрузку. Но, видимо, это слишком много памяти будет жрать? Или фиг с ней с памятью? Или небольшое замедление на move/unmove - это не проблема. Вы опытные, подскажите! :)
  27. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Я сейчас использую 32-бита на ход везде - и в хэш-таблице, и в генераторе.
    Реализован как класс-обертка вокруг int с удобными методами доступа к полям.
  28. akupr Новичок

    • Новичок
    Рег.:
    11.02.2006
    Сообщения:
    72
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    А кто такой Луговский?
    Судя по цитате, сам он человек не вполне уравновешенный :)

    А если серьезно, то у вашего любимого C нет никаких преимуществ по сравнению с C++. Даже с точки зрения производительности.
    Да и на C++ Вы можете писать в стиле C, используя только подмножество языка. Избавившись от дурацких макросов (const для констант и inline функции), объявляя переменные по мере необходимости, а не в начале блока. Нелюбимые Вами исключения избавляют от головной боли с постоянными проверками возвращаемых значений, делая код гораздо более читаемым.
    И это только малая часть!
  29. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    А вот не подерётесь :)
  30. akupr Новичок

    • Новичок
    Рег.:
    11.02.2006
    Сообщения:
    72
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Согласен, схоластика :)
    В конце концов, это дело вкуса.
    В главном, я думаю, мы согласны: C++ — рулез форева! :)
  31. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    const и inline есть в стандарте ANSI С (inline с С99). Это к слову.

    Знаете, akupr, вы зря думаете, что это простой вопрос по поводу С++. Существует в сети множество очень глубоких дискуссий на эту тему и мои приколы лишь немножко отражают истинные и серьезные претензии к С++. На эту тему можно поискать в гугле. Особенно много англоязычных материалов, но, думается, можно найти что-то и по-русски.

    Виталий Луговский очень своеобразный апологет функциональных языков и в частности O'Caml. Его одиозные, хамские и резкие, но обычно довольно глубокие и остроумные выступления в сети лет пять назад привлекли к нему лично, а заодно и к функциональным языкам очень большое внимание. Он бывший физик, а ныне программист, работает в Англии. В жизни совершенно не такой, как представлялся в давнюю пору в сети.
  32. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Обычно используется не более 16-ти бит на ход в хеше (я уже говорил - у меня 8 бит - хранится не ход, а номер хода) 32 бита слишком много. Жалко столько памяти.
    эти лишние 16 бит можно использовать для других целей (как напрмер в Тоге)
    Запись Хеша 128 бит? У меня 128.
  33. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Вы действительно считаете С++ рулезом? Попробуйте все же найти материалы. Если вы человек думающий, а вы, уверен, таковы, то обязательно увидите как неоднозначно увлечение С++ и какую даже опасность для мозга он представляет :) Он калечит ваше понимание и умение!

    Чтобы зародить хоть какое-то зерно сомнения, я прошу вас вспомнить о таком одиозном языке как Кобол, который был популярен еще более чем С++ и как он сгинул во тьме веков...

    Также хочу напомнить о попсе, столько популярной и столь бесполезной. А еще найду вам в сети один прикол и размещу в следующем посте :)
  34. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    все мы не такие... один мой знакомый говорил, что теоретики никому не нужны, что полиморфизм, наследование, виртуальные функции - бред сивой кобылы. Что языки С/С++ нужно выкинуть и тралала... Я не понимаю такого отношения. каждый язык хорош по-своему. и я не буду ругать питон только потому что его не знаю, пролог - потому что у меня к нему отвращение, паскаль - потому что паскаль.
    Кстати, Луговский по описанию Чича напоминает :)
  35. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Интервью Bjarne Stroustrup, данное 1 января 1998 года
    для журнала Computer.
    1998, Computer
    перевод: Mike Bluesman


    Первого Января 1998 года Bjarne Stroustrup давал интервью журналу 'Computer'. Вообще-то редакторы предполагали, что он расскажет о семи годах объектно-ориентированного программирования с применением языка, который он и
    разработал.


    К окончанию беседы выяснилось, что интервьюер извлек больше информации, чем предполагал, и, естественно, редакторы решили урезать содержание 'для пользы индустрии', но, как обычно получается в таких случаях, произошла
    утечка информации. Вот полный и нередактированный протокол интервью - это не похоже на обычные запланированные вопросы/ответы. Вам наверняка покажется это интересным.

    ——————————————————————————————-

    Интервьюер - далее И., Stroustrup - далее C..

    И. Прошло несколько лет с тех пор, как Вы изменили мир разработки
    программного обеспечения. Что Вы теперь чувствуете, оглядываясь назад?

    C. Вообще-то я думал об этих днях как раз перед тем как Вы приехали. Помните
    - все писали свои версии 'C', и проблема была в том, что все это делали
    чертовски замечательно. Университеты тоже чертовски замечательно преподавали
    этот язык. Это привело к понижению компетенции. Под 'компетенцией' в данном
    случае я подразумеваю феноменальность. Вот что породило проблему.

    И. Проблему?

    C. Да, проблему. Помните когда все писали Cobol?

    И. Конечно, я тоже это делал.

    C. Ну вот, в начале эти ребята были как боги. Им платили кучу денег и
    относились как к королям.

    И. Да уж, вот это были времена...

    С. Именно. Ну и что же случилось? IBM прямо заболела этим и вложила миллионы
    в тренирующихся программистов, пока их не стало до ужаса много.

    И. Вот так и я вылетел из этой сферы. Втечение года зарплата упала
    настолько, что даже журналистом можно было зарабатывать больше...

    С. Точно. То же самое случилось и с программистами, писавшими на 'C'.

    И. Понятно, ну и что же Вы все-таки хотите этим всем сказать?

    C. Однажды я сидел у себя в оффисе, и мне пришла в голову небольшая идейка,
    как хоть немного восстановить баланс. Я подумал: интересно что же было бы,
    если бы был язык программирования с такими широкими возможностями и такой
    сложный для изучения, что никто бы уже не смог заполнить рынок толпой
    программистов, пишуших на этом языке? У меня уже были тогда кое-какие мысли
    по этому поводу. Вот, знаете наверно, X10 и X windows. Это тогда была такая
    графическая система, которая работала на этих самых Sun 3/60. У нее были все
    ингредиенты, которые мне были нужны - комплексный синтаксис, неявно
    определенные сложные для понимания мрачные функции,
    псевдо-объектно-ориентированная структура. Даже сейчас никто не пишет чистый
    код X-windows. Motif - единственный путь, если хочешь сохранить
    здравомыслие.

    И. Шутите?

    C. Ничуть. Есть еще одна проблема. Unix был написан на 'C' - это значило то,
    что любой программист, пишущий на 'C', мог очень легко стать системным
    программистом. Помните сколько обычно зарабатывали большинство системных
    программистов?

    И. Да, я же ведь тоже этим занимался.

    С. Так вот, этот новый язык должен был отделять себя от Unix путем скрывания
    всех системных вызовов, которые так здорово связывают 'C' и Unix. Тогда
    ребята, которые только про DOS и знали, получили бы по заслугам.

    И. Не верится в то, что Вы это сказали...

    С. Это уже происходит достаточно долго, но вроде сейчас большинство людей
    уже уяснили для себя, что C++ - это пустая трата времени, но должен сказать,
    что осознание этого происходило дольше чем я ожидал.

    И. Ну расскажите поточнее, как же Вы все-таки сделали это?

    C. Это была просто шутка, я никогда не думал, что люди воспримут эту книгу
    всерьез. Любой человек, даже с половиной мозга, может понять что
    объектно-ориентированное программирование интуитивно, нелогично и
    неэффективно.

    И. Что?

    С. И относительно 'переносимого кода' - когда Вы слышали чтобы хоть одна
    компания переносила что-либо?

    И. Ну, вообще-то не слышал, но...

    С. Вот так-то. Некоторые, кстати, пытались. Была такая компания из Орегона -
    Mentor Graphics, в которой просто заболели тем, что пытались переписать все
    что можно на C++ в '90 или '91 году. Я на самом деле им сочувствовал, но
    думаю, что люди по крайней мере, научились чему-то на их ошибках.

    И. Очевидно у них ничего не вышло?

    С. Вообще ничего. Но было бы сложно объяснить держателям акций компании
    ущерб в 30 миллионов долларов и вот, надо отдать им должное , они все-таки
    заставили это работать в итоге.

    И. Так все-таки у них получилось? Это доказывает что
    'объектное-ориентирование' работает.

    C. Почти. Запускаемый файл получился такой огромный, что загружался 5 минут
    на рабочей станции HP со 128Mb оперативной памяти. Я думал, что это станет
    камнем преткновения, но это никого особенно не заботило. Sun и HP были очень
    рады продавать до ненормальности мощные ящики с огромными ресурсами для
    выполнения на них тривиальных программ. Знаете, когда мы в AT&T
    откомпилировали нашим первым компилятором C++ программку 'Hello World', я не
    мог поверить своим глазам: запускаемый файл получился размером 2.1Mb.

    И. Да уж... Но компиляторы с тех пор прошли долгий путь.

    C. Вы так думаете? Попробуйте тот же пример 'Hello World' с последней
    версией g++ - вы получите примерно пол-мегабайта. А кроме этого есть еще
    множество примеров со всего мира. У British Telecom чуть было не возникли
    большие проблемы, но к своему счастью они вовремя догадались свернуть проект
    и начать все заново. И им больше повезло, чем Australian Telecom. А теперь я
    слышал, что Siemens cоздает какого-то динозавра и все больше и больше
    волнуется по поводу размера того, что у них получается. Не правда ли забавно
    смотреть на это всеобщее заблуждение?

    И. Да, но C++ -то, в общем, вполне нормальный язык.

    С. Вы в это так верите? Попробовали ли вы когда-нибудь сесть и поработать
    над проектом на C++ ? Во первых, я расставил достаточно ловушек, чтобы
    просто так работали только тривиальные проекты. Под конец проекта получается
    что одни и те же операторы в разных модулях означают совершенно разные вещи.
    А теперь попробуйте соединить все эти модули в единое целое, особенно если у
    вас их штук 100. Боже, я иногда не могу удержаться от смеха, когда слышу о
    проблемах разных компаний, которые не могут сделать так, чтоб их модули
    общались между собой.

    И. Я должен сказать, что совершенно сбит с толку всем что Вы сказали. Вы
    сказали что сделали это для того, чтоб повысилась оплата труда
    программистов. Но это же бессмыслица.

    С. Не совсем так. У каждого есть его выбор. Я не предполагал, что все это
    так выйдет из-под контроля. Но все-равно, практически все у меня получилось.
    C++ cейчас уже умирает, а труд програмистов продолжает нормально
    оплачиваться - особенно тех, кто имеет дело со всей этой чепухой - вы же
    понимаете, что невозможно использовать эффективно большой программный модуль
    на C++ , если не вы сами его написали.

    И. Как это?

    С. Не понятно что-ли? Помните typedef ?

    И. Конечно.

    С. А теперь вспомните сколько времени приходится копаться в заголовках для
    того, например, чтобы просто найти, что какое-нибудь там 'RoofRaised' -
    число с двойной точностью. Представьте теперь сколько времени уйдет на
    нахождение всех определений типов в большом проекте.

    И. Значит, Вы утверждаете, что Вам все, что Вы хотели удалось...

    C. Ну, вспомните сколько занимает реализация проекта среднего размера на
    'C'. Это около 6 месяцев. Не достаточно долго чтобы парень с женой и детьми
    мог заработать себе на нормальное существование. Попробуйте тот же проект
    реализовать на C++ , и что получится? Вам понадобится 1-2 года. Не правда
    ли, это замечательно? Кроме этого: в университетах уже так давно не
    преподают 'C', что теперь стало мало людей программирующих на 'C', особенно
    таких, которые знают все о программировании под Unix. Как вы думаете :
    сколько парней смогут сообразить что делать с 'malloc' , после того как
    втечение многих лет они пользовались 'new' и никогда не заботились о
    проверке кода возврата? Большинство программистов на C++ вообще не
    выбрасывают этот код возврата. Что произошло со старой доброй '-1' ? По
    и?айней мере было сразу понятно, что у тебя где-то ошибка без всяких там

    С. Нет, я же говорил... Замечали, в чем разница между стадиями планирования
    проектов на 'C' и C++ ? Для проекта на C++ эта стадия в три раза дольше.
    Время уходит на то, чтоб убедиться что все что надо наследуется, а все что
    не надо - нет. И все-равно без ошибок не обходится. Кто слышал когда-нибудь
    об утечке памяти в программе на 'C' ? Теперь нахождение этих утечек - целый
    труд. Большинство компаний сдаются, так и выпускают продукт, зная что утечка
    памяти существует.

    И. Но есть различные программные инструменты...

    С. Большинство из которых написаны на C++.

    И. Если мы опубликуем все это, то Вас просто могут линчевать, понимаете ?

    C. Сомневаюсь. Как я сказал C++ уже уходит в прошлое. Ни одна компания без
    предварительного тестирования теперь не начнет проект на C++, а если будет
    тестирование, то они поймут, что это путь к неудаче. Если не поймут - то так
    им и надо. Знаете, я пытался убедить Dennis'a Ritchie переписать Unix на
    C++.

    И. О Боже. И что же он сказал?

    C. К счастью у него присутствует хорошее чувство юмора. Я думаю и он, и
    Brian понимали что я тогда делал. Он ответил, что может мне помочь написать
    версию DOS на C++, если я захочу.

    И. Ну и как? Вы захотели?

    С. Я написал DOS на C++. Могу дать вам demo. Она у меня работает на Sparc 20
    в другой комнате. Просто летает на четырех процессорах и занимает всего то
    70 мегабайт на диске.

    И. На что же это похоже на PC ?

    С. Вы, очевидно, шутите. Видели же вы Windows'95 ? Я о них думаю как о своем
    величайшем успехе.

    И. Знаете, эта идея насчет Unix++ заставила меня задуматься. Ведь где-то
    может сидеть парень, которому придет в голову сделать это...

    С. Но не после того, как он прочитает это интервью.

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

    С. Но это же история века. Я просто хотел чтоб мои приятели-программисты
    помнили меня за то, что я для них сделал. Знаете как сейчас оплачивается
    программирование на C++ ?

    И. Последнее, что я слышал - настоящие профессионалы зарабатывают $70-80 в
    час.

    С. Понимаете теперь? И я уверен, что он заслуживает этих денег. Отслеживание
    всех этих ловушек, которые я встроил в C++ - не легкая работа. И, как я
    говорил раньше, каждый программист на C++ чувствует себя связанным тем
    обстоятельством что он должен использовать каждый элемент языка в каждом
    проекте. Вообще это и меня часто раздражает, даже тогда, когда это служит
    моим целям. Но сейчас, когда прошло столько времени, мне уже начинает
    нравиться этот язык...

    И. Имеете ввиду, что раньше Вам C++ не нравился?

    С. Ненавидел его. Он даже выглядит неуклюже, вы не согласны? Но когда стали
    там выходить разные книги... вот, тогда-то я и увидел полную картину.

    И. Погодите, а как насчет ссылок? Вы подтверждаете что шли от поинтеров 'C'
    ?

    С. Хмм. Я и сам не знаю. Вообще я думал, что да. Потом я как-то говорил с
    парнем, который написал C++ с самого начала. Он говорил, что не мог
    запомнить были ли ссылки на его переменные или нет, поэтому он всегда
    использовал поинтеры.

    И. Обычно на этой стадии я говорю 'большое спасибо за интервью', но сейчас
    это было бы как-то не к месту.

    С. Пообещайте мне, что опубликуете это.

    И. Я извещу Вас, но мне кажется, что я знаю, что скажет мой редактор по
    этому поводу.

    С. А все-равно, кто этому поверит? Кстати, не могли бы вы мне прислать копию
    этой записи?

    И. Это я могу.

    ——————————————————————————————-

    Примечание переводчика :

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

    специальный перевод для Hacknet Review выполнил Mike Bluesman, март 1998

Поделиться этой страницей