Чтение онлайн

на главную - закладки

Жанры

Журнал «Компьютерра» № 34 от 18 сентября 2007 года
Шрифт:

Придирчивый читатель мог бы заметить, что автор упускает из виду "объективно древние" исходники, которые по той или иной причине – нет старого компилятора, нет старой ОС, нет старой библиотеки – просто не могут быть собраны и запущены. Автор не упускает. В этом случае "деятельное чтение" просто становится сложнее – приходится изучать "древнюю драгоценность" почти вслепую; в простейшем случае (чтение интереса ради) – «запуская» код в уме; в более сложном (необходимо таки заставить старую библиотеку работать; или переписать старый алгоритм на новом языке) – по кусочку переводя проект "на новые рельсы" и тщательно анализируя

результат.

Короче говоря, практически единственный честный и полноценный способ исследования "археологических древностей" – полное переписывание; не обязательно «честное», оно может выглядеть просто как удаление частей исходника и постепенное их возвращение на место – тем не менее других вариантов "качественного ознакомления" с артефактом человечество пока не придумало [Другой вопрос, многие ли «древности» стоят таких трудов?].

Но самое смешное, что когда «старый» код [Или извлеченные из него идеи] станет «новым», твоим, родным, частью проекта, – он неизбежно начнет стареть, чуть только отведешь глаза, перестанешь обновлять и пересматривать эти части исходников. Остается лишь повторять, как и все, вслед за Черной Королевой: "Здесь, знаешь ли, приходится бежать со всех ног, чтобы только остаться на том же месте!"

Примеры и иллюстрации

Пример довольно простого кода, который для понимания может потребовать длительных изысканий, – быстрый алгоритм нахождения обратного квадрата числа (1/яx), приписываемый разработчику Quake Джону Кармаку. Алгоритм использует метод быстрых приближений Ньютона и включает следующую «очевидную» строчку с использованием магического числа (сопутствующий ей комментарий, как правило, встречается во всех популярных описаниях алгоритма):

i = 0x5f3759df – (i >> 1); // what the f..k?

Пример переписывания «мнимо древнего» кода – одно из первых в истории веб-приложений бизнес-класса, Viaweb. Оно было написано знаменитыми хакерами Полом Грэмом и Робертом Моррисом на Lisp и через некоторое время куплено Yahoo и переименовано в Yahoo!Store. Впоследствии Yahoo, озабоченная экзотичностью Lisp’а, заставила своих программистов провести «археологические изыскания» для переписывания приложения с нуля на Perl и C++. По слухам, код современного Yahoo!Store очень похож на интерпретатор Lisp (иллюстрируя тем самым 10-е правило Гринспуна).

Пример проблемы объективной древности – Strongtalk, эффективная реализация языка Smalltalk с возможностью статической типизации была некогда куплена Sun, а через много лет возвращена программистскому сообществу как open source. Естественно, все исходники виртуальной машины (языки – C и ассемблер) требовали древних версий компиляторов. И если C-часть была «переведена» на современный диалект языка довольно быстро, то ассемблерные куски до сих пор требуют Borland TASM 4.0 (еще DOS’овская версия), поэтому приходится распространять как исходный код, так и скомпилированные «энтузиастами-археологами» файлы.

Пример «археологических изысканий ради понимания алгоритма» – мы знаем, что формат файла Microsoft Word как таковой существует. Спецификация на него известна и даже доступна публично (какой-то из антимонопольных процессов потребовал этого от корпорации), но ее стиль и степень подробности не позволяют «просто написать соответствующий код» – многие нюансы требуют экспериментирования. Поэтому гораздо более полезный справочник по форматам Microsoft – опенсорсные библиотеки для чтения этих форматов (например, antiword или Apache POI, а лучше – «перекрестный допрос» обеих библиотек, дабы лучше понять, что является особенностью формата, а что особенностью библиотеки).

Пример ситуации, где старение сильнее автора кода, – программа Sketchpad, созданная в 1963 году. Она была во многом революционной, еще бы – первая интерактивная CAD, первая объектно-ориентированная система… Но несмотря на то, что автор программы по-прежнему жив и в здравом уме, сомнительно, что сегодняшний вице-президент Sun Айвен Сазерленд смог бы подробно объяснить логику исходников, некогда написанных аспирантом Айвеном Сазерлендом на макроассемблере машины TX-2.

Ностальгируя по БЭСМ-6…

Автор: Юрий Романов

В Интернете на странице «Ностальгия по БЭСМ-6» Леонида Брухиса я встретил информацию о том, как однажды Сергей Вакуленко написал первую версию эмулятора БЭСМ-6. И мне очень захотелось включить в тему номера небольшой материал об этой работе. Обуреваемый сложными чувствами [Все очень просто: я сам неравнодушен к этой машине. Не как к «флагману парка советских ЭВМ», как ее когда-то называли. Очень много прекрасных часов любимой работы связаны для меня с аббревиатурой БЭСМ. Оказалось, не только у меня… Так что ностальгия налицо. – Ю.Р.], я списался с Сергеем и объяснил суть моих планов. Вот что он рассказал:

РЕАЛИИ

"Старые видеоархивы, записанные на «Кадр-103» и «Кадр-3ПМ», требуют срочного перевода на современный формат. Дело в том, что полностью прекращено производство запасных частей для этих аппаратов, что делает материалы в этих форматах практически непригодными для использования (не на чем воспроизводить)".

Директор Гостелерадиофонда России А. И. Высторобец

– Да, тема, конечно, интересная. Трудность в том, что я уже смутно помню, как было дело. Тексты первых версий программы, к сожалению, не сохранились. Архивные магнитные ленты тех лет перестали читаться… Основные факты, впрочем, известны.

В 1989 году я защитил диплом, темой которого был перенос Си-компилятора Джонсона (pcc) на БЭСМ-6 и Эльбрус-Б. В дальнейшем компилятор использовался командой Новосибирского ИТМиВТ при разработке Unix для этих машин. При отладке возникла определенная сложность: тестирование порожденного кода оказалось более трудоемким, чем хотелось бы. Чтобы выполнить «сгенеренный» бинарный код на реальной машине, надо было преодолевать не только несовместимость форматов носителей, но и несколько сот метров пространства между разными зданиями ВЦ института Курчатова. Кроме того, в ОС ДИСПАК для БЭСМ-6 не существовало диалогового отладчика с возможностью пошагового выполнения команд. Возникла мысль: а почему бы не сделать эмулятор? Со встроенным отладчиком. Система команд простая и известная, а тонкости команд деления и алгоритма нормализации меня тогда не интересовали [Через несколько лет эти команды доставят много хлопот любителям "археологических раскопок" БЭСМ-6. См., например, www.mailcom.com/besm6/emulnews_ru.shtml].

Поделиться:
Популярные книги

Я еще не князь. Книга XIV

Дрейк Сириус
14. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще не князь. Книга XIV

LIVE-RPG. Эволюция 2

Кронос Александр
2. Эволюция. Live-RPG
Фантастика:
социально-философская фантастика
героическая фантастика
киберпанк
7.29
рейтинг книги
LIVE-RPG. Эволюция 2

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Кодекс Крови. Книга VII

Борзых М.
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VII

Безымянный раб [Другая редакция]

Зыков Виталий Валерьевич
1. Дорога домой
Фантастика:
боевая фантастика
9.41
рейтинг книги
Безымянный раб [Другая редакция]

Светлая ведьма для Темного ректора

Дари Адриана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Светлая ведьма для Темного ректора

ТОП сериал 1978

Арх Максим
12. Регрессор в СССР
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
ТОП сериал 1978

Сердце дракона. Том 18. Часть 2

Клеванский Кирилл Сергеевич
18. Сердце дракона
Фантастика:
героическая фантастика
боевая фантастика
6.40
рейтинг книги
Сердце дракона. Том 18. Часть 2

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

Я — Легион

Злобин Михаил
3. О чем молчат могилы
Фантастика:
боевая фантастика
7.88
рейтинг книги
Я — Легион

Двойной запрет для миллиардера

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Двойной запрет для миллиардера

Газлайтер. Том 12

Володин Григорий Григорьевич
12. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 12

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

На границе империй. Том 10. Часть 2

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 10. Часть 2