- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Редкая профессия - Евгений Зуев
Шрифт:
Интервал:
Закладка:
Несмотря на уже неприличное молчание Вальтера и полную неопределенность с будущим проектом, мощная инерция огромного программного текста, который, подобно тяжелому составу, даже после экстренного торможения проходящему юзом до километра пути, тянула нас вперед. Все новые и новые доработки, исправления, 93% успешных тестов, 95, 97… Компилятор, хотя и был официально сдан, все улучшался и улучшался. В результате мы довольно существенно продвинули и тесты, которые в целом, как нам казалось, уже вполне можно было считать программным продуктом.
У нас возникло ощущение, что, может быть, следует переправить бельгийцам то, что мы сделали за время после формальной сдачи. Наша (конечно же, несколько наивная) логика была такова: последняя принятая ими версия тестового пакета содержит ошибки. Теперь мы их исправили. Если мы оставим исправления при себе, то, продавая пакет с ошибками, фирма подмочит свою репутацию, что косвенно ударит и по нашему реноме. Мы несколько раз спорили друг с другом; наконец, решили не посылать сразу исправления, а сначала написать письмо с предложением: не хотите ли взять у нас новые версии компилятора и тестов? Тем самым, быть может, мы вынудим их раскрыть свои планы.
Ничего подобного не случилось. Ответ Вальтера был по-своему знаменателен. Он написал: "мы всегда готовы получить от вас новые версии".
Больше никаких контактов между нами не было. Все было кончено.
Любимое дитя
На душе было тяжело. Компилятор сдан, но его дальнейшая судьба абсолютно неизвестна. Если бельгийцы намереваются пустить его в дело, то первое, что они должны сделать, как и обещали,-- отдать на бета-тестирование. Полное молчание. Мы нисколько не боялись стороннего тестирования (уж сколько мы сами трепали его на всевозможных тестах!), наоборот, были бы несказанно рады, что у компилятора появляются какие-то перспективы. Но тогда, как бы ни был компилятор хорош, у пользователей обязательно должны были появляться проблемы, вопросы о непонятных ошибках и т.д… Никаких известий.
Словно послали учиться за границу единственного ребенка, а от него ни ответа ни привета.
Может быть, мы им так надоели, что они решили дальше работать с компилятором сами? Сомнительно. Несмотря на то что Вальтер в свое время продемонстрировал нам высокий уровень анализа нашего программного текста (даже ошибки у нас находил!), вряд ли, учитывая их непростое положение, они сейчас способны сами вести проект. Нет у них своих специалистов по Си++, а сформировать для поддержки бета-тестирования новую команду они просто не в состоянии. В любом случае, если бы они приняли определенное решение, рано или поздно они должны были объявить об этом публично. Однако их Web-страница наводила уныние, не меняясь уже больше года. Все это время на ней красовалось сообщение: "В конце года (какого? — авт.) у нас будет компилятор Си++"… Она и сейчас, когда прошло еще несколько месяцев, не изменилась ни в одном символе.
Единственное, что можно было еще предположить, — они продали исходный текст какой-нибудь третьей фирме. Тогда, конечно, мы уже никогда не узнаем, по чьим рукам пошел наш компилятор… Но и в это не очень верилось. Скорее всего, сейчас им просто не до компилятора.
Как бы вы поступили в подобном случае?
Долгое время мы просто переживали и… продолжали работать над компилятором. Как обычно, именно после официальной сдачи проекта обнаруживаются и исправляются ошибки из серии "непонятно, как раньше программа вообще работала", возникают новые плодотворные идеи и в течение нескольких дней воплощаются в программный текст. Появилась еще одна редакция предварительного стандарта, и те изменения, которые мы в ней увидели, были немедленно отражены в компиляторе. И в один прекрасный момент мы вдруг осознали, что:
* теперь компилятор соответствует самой последней редакции предварительного стандарта, а не версии годичной давности, как было зафиксировано в контракте;
* мы исправили несколько ошибок, выявленных уже после сдачи, и некоторые из этих ошибок были довольно серьезны;
* некоторые базовые алгоритмы были заметно улучшены в плане эффективности; компилятор заработал быстрее.
Таким образом, мы уже существенно ушли от той версии, которую сдали бельгийцам, и почувствовали, что находимся на правильном пути. Последним толчком для нас послужило предложение от одной московской фирмы включить компилятор в задумываемую ими систему программирования.
Но ведь мы не можем распространять от себя то, что формально нам не принадлежит! Следовательно, нужно сделать компилятор нашим. Из того, что рассказано выше, можно понять, что у нас давно чесались руки многое переделать. Теперь для этого возникли все условия. Часть пути уже пройдена, следует определить последующие шаги в этом направлении. Несколько дней мы провели в подробных обсуждениях. Мы не специалисты в юридических аспектах, относящихся к проблемам собственности, но нам было понятно, что изменения в компиляторе должны, с одной стороны, затрагивать если не все, то большинство его основных алгоритмов, и с другой — "внешний вид" программного текста также должен быть сильно модифицирован. Функциональность программы, естественно, останется (все компиляторы, по большому счету, делают одно и то же), но ее внутренности должны в значительной степени измениться. Это должен был быть новый компилятор.
Читатель простит некоторую сдержанность при описании этих аспектов работы. Скажу только, что в новой версии мы умудрились изменить даже стиль программирования, не говоря уже о более простых вещах. Что же касается переработки алгоритмов, то, помимо уже описанных выше изменений, мы оптимизировали формальное описание синтаксиса входного языка, сделав разбор выражений примерно на 20-25% быстрее, доработали механизм шаблонов, включив в него массу нововведений, появившихся за последнее время, реализовали новую схему работы с именами (см. главку "Как отремонтировать подгнивший дом") и усовершенствовали как компиляцию исключений, так и алгоритмы времени выполнения, связанные с обработкой исключительных ситуаций. Сделано еще много заметных изменений, и эта работа продолжается.
Мы перенесли компилятор на персоналки и заставили его работать в среде Windows’95 (правда, без формирования объектного кода — генератора для платформы Intel у нас пока нет).
Наконец, мы решили проблему с форматом промежуточного представления, которое порождает компилятор. Это очень интересная история. Читайте дальше.
Confidential
Наша система — не традиционный компилятор, порождающий объектный код, а так называемый компилятор переднего плана (front-end compiler), который в качестве результата своей работы формирует образ исходной программы на некотором промежуточном языке. Далее этот образ обрабатывается отдельной компонентой — генератором кода (back-end). Это обычная схема, давно принятая в многоязыковых системах программирования. Так как промежуточное представление выбирается единым для всех входных языков, то в системе достаточно единственного генератора кода, что исключает затраты на реализацию генератора для каждого отдельного компилятора. Кроме того, можно разработать несколько генераторов кода с единого внутреннего представления для различных аппаратных платформ, получив тем самым многоплатформную систему программирования. По этой схеме организована система gcc, похожим образом устроены и продукты семейства TopSpeed и десятки других.
Промежуточное представление, которое использовали бельгийцы в своих компиляторах (это, по существу, специальный язык, который можно назвать обобщенным ассемблером), было разработано довольно давно, выглядело несколько архаично, но для него было сделано несколько работающих генераторов для платформ Intel, Motorola, Sparc и менее известных процессоров. Спарковский генератор они и передали нам для использования совместно с создаваемым компилятором, специально оговорив недопустимость его копирования. На документации по промежуточному языку красовались жирные штампы "Confidential". Это вызывало уважение и некоторый трепет. Перед нами как бы приоткрыли дверь в святая святых компании — поделились своим ноу-хау.
Когда произошло все то, о чем было написано выше, и мы начали интенсивно переделывать и дорабатывать компилятор, стремясь сделать его полностью "нашим", перед нами, словно чугунный рельс,-- ни обойти, ни сдвинуть — все время стояло это безальтернативное, как хлопок двери, слово,-- "Confidential". В самом деле, пусть мы переписали компилятор, пусть его исходный текст сильно изменился, но он, тем не менее, порождает код, формат которого является чужой собственностью,-- как мы можем считать такой компилятор своим? Придумать собственное промежуточное представление или адаптировать, например, внутренний код gcc — он, как и весь проект GNU, имеет статус freeware — конечно, можно, но сколько времени это займет? А соответствующая переделка компилятора сравнима с созданием нового.
