ФЭНДОМ


В 1994 году сформировалась объединенная команда, состоящая из специалистов по системам типов и нескольких разработчиков языка и виртуальной машины Self. В течении следующих двух лет была создана очень интересная реализация Смолтока, Strongtalk. Вскоре после демонстрации технологии на OOPSLA'96 фирма Animorphic Systems, Inc была куплена Sun Microsystems, а разработчики Strongtalk брошены на разработку ВМ HotSpot для Java.

Ниже предлагается вольный перевод статьи "История проекта Strongtalk", написаной руководителем группы разработчиков Дейвом Гризволдом.

(перевод сырой, нуждается в редактуре)

Статья "История проекта Strongtalk"Править

Предыстория Strongtalk распадается на две ветви, началом которых были независимые исследования на противоположных концах страны.

На Западном побережье группа под руководством Дэвида Юнгара (David Ungar) и Рэндалла Смита (Randall Smith) работала над радикально новой технологией виртуальных машин, которая позволила бы с достойной скоростью исполнять программы основанного на прототипах объектно-ориентированного языка Self. У них были мощная ВМ и великолепный сборщик мусора, но настоящая проблема заключалась в компиляции. Примитивные типы данных Self являются "честными" объектами, как в Smalltalk, а не специальными сущностями, как в C++, C# или Java [это означает, что для них должен работать полиморфизм -- б.б.]. В сочетании с тем, что Self (как, опять-таки, и Smalltalk) является языком с динамической типизацией, это приводит к серьезным накладным расходам при работе с фундаментальными вещами вроде битов и целых чисел, поскольку видя выражение a+b (или flag ifTrue: [...]) компилятор не может быть уверен, что имеет дело с целыми или с булевскими величинами. Еще один источник накладных расходов -- определение управляющих конструкций через блоки кода.

Положение усугублялось тем, что в Self нет прямого доступа к переменным экземпляра -- доступ к ним происходит только через методы доступа (то, что на первый взгялд выглядит как обращение к переменным, на самом деле является "синтаксическим сахаром" для вызова этих методов). В силу этих причин в технологию компиляции было вложено огромное количество усилий.

Настоящим прорывом со стороны ВМ стал созданый Урсом Хольцле (Urs Hoezle) type-feedback-компилятор, впервые позволивший заинлайнить большую часть посылок сообщений в обычном коде. После инлайнинга (иногда весьма многоуровневого), компилятор мог намного лучше оптимизировать код -- необходимое условие для существенного прироста производительности. Для осуществления всего этого потребовались весьма экзотичные механизмы вроде оптимистического инлайнинга с возможностью обратной свертки на лету в случае, нарушены предположения, исходя из которых выполнялся инлайнинг.

Self был огромным прорывом в исследованиях, но это был принципиально другой язык, нежели Smalltalk, и Self-система не была пригодна для промышленного использования из-за нестабильной работы и объема занимаемой памяти. Но благодаря ему было впервые показано, что языки с динамической типизацией могут в принципе достигнуть скоростей исполнения, сопоставимых с C.

На Восточном побережье я (Дейв Гризволд) был опечален многочисленными препятствиями, мешающими промышленному использованию Смолтока. Реализации ParcPlace и Digitalk прошли большой путь, во частности за счет механизма динамической трансляции Дойча/Шифмана (Deutch, Shiffman), который на тот момент обеспечил ускорение в 1.6 раза. Но такая скорость была совершенно недостаточной для интенсивных вычислений (которыми я занимался), а кроме того, я ощущал и другие препятствия, мешающие массовому использованию языка. Одним из таких препятствий с моей точки зрения было отсутствие системы типов -- свойство, придающее языку необычайную гибкость, но в то же время делающее созидание и понимание больших систем намного более сложным. Другим препятствием была слабая поддержка средств пользовательского интерфейса конкретных платформ, принесенная в жертву во имя переносимости. Неплохая идея с точки зрения человека, приверженного идеологии переносимости, но на практике она оборачивалась (и, в большой степени, оборачивается и сейчас) тем, что получающиеся в результате интерфейсы выбиваются из окружения (эмуляция средств конкретной платформы, например Windows, проблему до конца не решает).

Несколько человек уже пытались создавать систему типов для Смолтока (Borning&Ingalls, Palsberg&Schwartzbach, Graver&Johnson), однако эта задача показала себя как весьма сложная из-за чрезвычайной гибкости языка по сравнению со статически типизированными, не говоря уже о неподъемной задаче натягивания системы типов на уже существующий натипизированный код. Все предыдущие системы типов работали на крошечных фрагментах кода и даже близко не подошли уровню, необходимому для практического использования.

Однако я был уверен, что создать такую систему можно. Я нанял Джилада Браху (Gilad Bracha), который много знал о подобных вещах, и у которого были интересные идеи насчет вещей вроде микс-инов (mixins) и мы принялись создавать систему типов для Смолтока, которая работала бы. Первый вариант системы, о котором мы писали в трудах OOPSLA'93, работал, но весьма неуклюже, поскольку был намертво привязан к библиотекам ParcPlace. Это затрудняло работу, так как в "правильном" Смолтоке с типами базовые библиотеки должны быть иначе организованы, чтобы дать возможность проверки типов при наследовании. Существующие библиотеки полны отношениями наследования между несовместимыми типами (например, Dictionary и Set), так что мы были вынуждены задавать иерархию типов, отличающуюся от имевшей место в действительности иерархии классов.

В это время я исследовал различные пути способы ускорить Смолток (система типов для оптимизации не использовалась), но без экзотичных механизмов вроде оптимистического инлайнинга, эта задача не решалась. Лучшее, чего удалось достичь в направлении инлайнинга без использования type-feedback -- это специализация (customization): копирование методов вниз по иерархии наследования, позволяющее считать класс константой [в контексте конкретного метода] и инлайнить посылки сообщений самому себе. Я подсчитал, что в случае библиотеки ParcPlace это позволит заинлайнить около 25% методов.

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

Две технологии встретились, когда я начал общаться с Урсом Хольцле, только что закончившим type-feedback-компилятор (и диссертацию в Стенфорде) и ищущим, что бы поделать интересного. Прочитав его диссертацию я осознал, что механизм type-feedback не настолько сложен, как считали люди, читавшие о нем в контексте Self и впечатленные им до степени испуга. Походе, никто не оценил того, что type-feedback может стать основой для великолепного компилятора промышленного качества (хотя переход от Self к Смолтоку потребовал бы серьезных изменений).

Это была прекрасная возможность -- с технологией Урса (а также Ларса Бака (Lars Bak), внесшего огромный вклад в ВМ Self и знавшего ее вдоль и поперек) мы получали независимые друг от друга систему типов и технологию компиляции, которые могли стать основанием для Смолток-системы промышленного качества. Эта независимость очень важна, поскольку позволяла людям писать как типизированный, так и нетипизированный код, используя систему типов ровно в той степени, в которой это удобно и не жертвуя при этом производительностью.

Вместе с еще несколькими талантивыми людьми мы получили великолепную команду. В алфавитном порядке:

  • Ларс Бак (Lars Bak) -- был кудесником по части ВМ
  • Джилад Браха (Gilad Bracha) написал проверку типов, поддержку reflective interface, а также микс-ины в их смолтоковской части
  • Стивен Грерап (Steffen Grarup), работавший не только над ВМ (особенно над сборщиком мусора), но и на стороне Смолтока, где им были написаны среда программирования, система управления исходным кодом и многое другое
  • Дэвид Гризволд (David Griswold) написал типизированные версии библиотек из Синей книги систему пользовательского интерфейса на основе глифов (glyph-based user interface framework), виджеты, HTML-браузер, а также руководил работой группы
  • Роберт Гриземер (Robert Griesemer) написал интерпретатор, генератор интерпретаторов, большую часть компилятора и другие части ВМ (он также написал альтернативный компилятор, еще более быстрый, но он не был доведен и в этот релиз не включен)
  • Урс Хольцле (Urs Hoelzle) работал, разумеется, над компилятором, а также над хитрыми механизмами инлайнинга и другими частями ВМ
  • Позднее присоединился Срджан Митрович (Srdjan Mitrovic), проделавший основную работу по адаптации технологии к языку Java

Как сказано во введении, работа над системой началась осенью 1994, и к 1996 система неплохо работала, но затем всему настала Java, и мы вынуждены были переключиться на нее ещё до выпуска хоть чего-нибудь. Единственная публичная демонстрация данной технологии имела место в конце 1996, когда наш стенд на OOPSLA привлек некоторое внимание. Несколько человек оценивали её частным образом, и получали удивительные результаты в тестах производительности (один широко известный деятель получил двенадцатикратное ускорение для реального кода на Смолтоке), но затем она пропала из виду, а мы переключились на Java.

Глядя в будущее: Strongtalk содержит инновации, которые до сих пор остаются далеко впереди мейнстримных языков и ВМ. Теперь, когда исходники системы полностью открыты, будущее зависит от вас.

Дальнейшая судьба участников проектаПравить

  • Ларс Бак работал над встраиваемой версией HotSpot, а в 2002г. покинул Sun, и вместе со Стивеном Грерапом основал фирму OOVM, предлагающую одноименную встраиваемую реализацию Смолтока -- OOVM. В 2004г. фирма была куплена швейцарской компанией Esmertec, которая предлагает OOVM под названием Object-Oriented software platform (OSVM). Работы над OSVM в настоящее время ведет японское отделение Esmertec (citation needed)
  • Джилад Браха продолжает исследования в области систем типов и реализации ОО-языков. Долгое время провел в Sun. В конце 2006 он покинул Sun ради Cadence (последняя запись в его рабочем блоге в Sun). В настоящее время работает над языком Newspeak.
  • К 2006 году Роберт Гриземер и Урс Хольцле в Google
  • В 2008 году Бак и Гризволд также оказываются в Google, где ведут работу над ВМ для Javascript -- V8 (письмо Гризволда)

Смотрите также Править

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики