Шрифт:
Интервал:
Закладка:
Для того чтобы выделить код браузера из системы KDE, мне не потребовалось много времени. Программное обеспечение было организовано очень аккуратно, и Konqueror обитал, в основном, в двух директориях: KHTML и KJS.
После того, как я отделил код, я дал компьютеру задание подсчитать общее количество строк в этих двух директориях. Это должно было дать нам примерное представление о том, какой объем портирования нас ждет. Поскольку портирование могло потребоваться для каждой строчки кода, то, чем меньше их будет, тем лучше. Увидев результат, я улыбнулся, а когда я сообщил о нем Дону и Ричарду, они тоже расплылись в улыбке. В Konqueror было чуть больше 120 000 строк, и он составлял менее одной десятой размера Mozilla{12}. Сначала мы просто не могли поверить, что между двумя массивами исходного кода со схожими функциями может быть такая разница.
Дон объяснил, почему так произошло. Руководители проекта Mozilla разрабатывали систему, которая, как они надеялись, превратит их программное обеспечение в компоненты, соединяющиеся друг с другом, как кубики LEGO. Тем не менее такая схема требовала большого количества дополнительного стереотипного кода: программисты должны были сделать что-то вроде заполнения кучи форм, чтобы регистрировать новый код при повторном запуске системы, и эта волокита поглотила браузер. Теперь мы видели результат применения этого инженерного решения — размер кода Mozilla соотносился с кодом Konqueror как 10 к 1. Очевидно, работа с этими составляющими вышла из-под контроля. Mozilla оказался раздутым, громоздким и ненадежным.
Команда Konqueror использовала противоположный подход. Их код был аккуратным и без излишеств. Они превыше всего ставили лаконичность. Их стиль в программировании больше всего напоминал Хемингуэя, а вот Mozilla — Фолкнера.
В пользу Konqueror говорил не только подсчет строк кода, но и то, что Ричард уже сделал с этим браузером потрясающую демоверсию, а мой анализ строк исходного кода после нее занял всего пару часов. Это отнюдь не означало, что наше портирование будет напоминать прогулку в парке, но нам понравилось, как быстро мы сумели добиться первых результатов с Konqueror.
Успехи добавили нам уверенности взяться за дело. Дон сказал, что он вместе с Ричардом покажет его демоверсию всей цепочке руководителей, отвечающих за создание программного обеспечения. Они надеялись получить одобрение Скотта Форсталла, его начальника Бертрана Серле и босса Бертрана Эви Теваняна на то, чтобы использовать Konqueror как основу нашего проекта по созданию веб-браузера.
Через несколько дней выяснилось, что наши руководители приятно удивлены, как мы и надеялись.
Демоверсия Ричарда была ясной и наглядной, поэтому нам не понадобилось убеждать начальство в том, что с нашим проектом все идет по плану.
После получения их одобрения нужно было разработать стратегию портирования 120 000 строк кода Konqueror на Macintosh. Чтобы понять, какую сложную программистскую задачу нам предстояло попытаться решить, потребуется некоторое знание жаргона разработчиков.
* * *
Когда я хочу, чтобы компьютер выполнил какую-то работу, я пишу точные инструкции, используя один из языков программирования, например, C++ — тот язык, который разработчики KDE использовали для создания Konqueror.
Возможно, подобные фразы не совсем понятны, если вы не знакомы с лексикой, которую используют программисты, но если оставить в стороне технические подробности, то компьютерные программы напоминают рецепты из кулинарной книги. И те и другие предлагают конкретные шаги, чтобы выполнить определенную задачу. Тем не менее, если шеф-повара пишут кулинарные книги, которые будут читать люди, программисты не могут писать для компьютеров таким же образом, потому что компьютеры по умолчанию не воспринимают языки программирования. Машины «говорят» на двоичном коде из нулей и единиц, поэтому, чтобы заставить компьютер выполнить мое задание, мне нужно преобразовать мой код на C++ в понятную компьютеру бинарную форму с помощью программы под названием «компилятор». Этот процесс преобразования из того, что может прочитать человек, в то, что может выполнить компьютер, называется «компиляцией» или «сборкой». Также эта процедура объясняет, почему строки кода, написанные на языке программирования, называют «исходным кодом». Это исходный материал, переводимый компилятором в бинарный код, который компьютер может «прочитать» и сделать.
Поскольку полнофункциональные программы, такие как браузер, требуют большого количества исходного кода — более 100 000 строк для достаточно скромного Konqueror, например, — программисты разбивают все эти строки на отдельные файлы исходного кода. Это помогает им организовать и структурировать отдельные подзадачи. В случае с веб-браузером код, отвечающий за обработку веб-адресов (URL) может содержаться всего в одном файле исходного кода, тогда как связанная с ним более сложная составляющая, например использование URL для загрузки информации, может быть распределена по многим файлам исходного кода.
Шеф-повара также разделяют свои рецепты на отдельные части. Рецепт яиц «Бенедикт», к примеру, помимо инструкций по приготовлению яйца-пашот, поджаривания канадского бекона и английских булочек, будет содержать часть с рецептом голландского соуса. Тем не