Введение

Операционная система Symbolics, основанная на Lisp

Genera — коммерческая операционная система и интегрированная среда разработки для машин Lisp, созданная компанией Symbolics. Фактически, это ответвление от более ранней операционной системы, разработанной в Лаборатории искусственного интеллекта Массачусетского технологического института (MIT AI Lab) для машин Lisp, которые Symbolics использовала совместно с компаниями Lisp Machines, Inc. (LMI) и Texas Instruments (TI). Symbolics также продавала Genera под названием Open Genera, которая позволяет запускать Genera на компьютерах, основанных на процессоре Alpha от Digital Equipment Corporation (DEC) с использованием Tru64 UNIX. В 2021 году была выпущена новая версия под названием Portable Genera, работающая на Tru64 UNIX на Alpha, Linux на x86 64 и Arm64 Linux, а также на macOS на x86 64 и Arm64 (Apple Silicon M Series). Она распространяется и лицензируется как проприетарное программное обеспечение. Genera является примером объектно-ориентированной операционной системы, построенной на языке программирования Lisp. Genera поддерживает инкрементную и интерактивную разработку сложного программного обеспечения, используя сочетание стилей программирования с широкой поддержкой объектно-ориентированного подхода.

Операционная система Genera

Symbolics разработала новые машины Lisp и опубликовала операционную систему под названием Genera. Последняя версия – 8.5. Symbolics Genera была разработана в начале 1980-х и начале 1990-х годов. В последние годы разработка сводилась в основном к исправлениям, с очень небольшим количеством новых функций. Symbolics разработала Genera на основе операционной системы машин MIT Lisp. Она продавала операционную систему и многоуровневое программное обеспечение. Некоторые из слоев программного обеспечения были интегрированы в Genera в более поздних выпусках. Symbolics улучшила и расширила программное обеспечение операционной системы, исходно разработанное для машин MIT Lisp. Операционная система Genera была доступна только для машин Symbolics Lisp и виртуальной машины Open Genera. Symbolics Genera обладает множеством функций и поддерживает все версии оборудования, которое Symbolics производила на протяжении своего существования. Ее исходный код насчитывает более миллиона строк, точное количество зависит от выпуска и установленного программного обеспечения. Symbolics Genera распространялась на магнитных лентах и CD-ROM. Выпуск операционной системы также включал большую часть исходного кода операционной системы и ее приложений. Пользователь имел свободный доступ ко всем частям работающей операционной системы и мог вносить изменения и расширения. Исходный код операционной системы разделен на системы. Эти системы объединяют исходные тексты, двоичные файлы и другие файлы. Инструментарий построения систем (SCT) поддерживает зависимости, компоненты и версии всех систем. Система имеет два номера: основной и дополнительный. Основной номер версии указывает количество полных сборок системы, а дополнительный – количество исправлений для этой системы. Исправление – это файл, который можно загрузить для устранения проблем или добавления расширений к определенной версии системы. Symbolics разработала версию под названием Open Genera, которая включала виртуальную машину, позволяющую выполнять Genera на рабочих станциях на базе DEC Alpha, а также несколько расширений и приложений Genera, продаваемых отдельно (например, пакет Symbolics S Graphics). Кроме того, была создана новая операционная система Minima для встраиваемых систем, написанная на Common Lisp. Последней версией является Portable Genera, в которой виртуальная машина портирована на процессоры x86 64, Arm64 и Apple M1, в дополнение к процессору DEC Alpha. Виртуальная машина затем работает под Linux и macOS, в дополнение к Tru64 UNIX. Оригинальная операционная система для машин Lisp была разработана на Lisp Machine Lisp с использованием объектно-ориентированного расширения Flavors. Symbolics предоставила преемника Flavors под названием New Flavors. Позже Symbolics также поддерживала Common Lisp и Common Lisp Object System (CLOS). Symbolics Common Lisp стала диалектом Lisp по умолчанию для разработки программного обеспечения для Genera. Программное обеспечение операционной системы было написано в основном на Lisp Machine Lisp (под названием ZetaLisp) и Symbolics Common Lisp. Оба этих диалекта Lisp предоставляются Genera. Также некоторые части программного обеспечения использовали Flavors, New Flavors и Common Lisp Object System. Некоторые старые части операционной системы Genera были переписаны на Symbolics Common Lisp и Common Lisp Object System. Многие части операционной системы оставались написанными на ZetaLisp и Flavors (или New Flavors).

Пользовательский интерфейс

Ранние версии Symbolics Genera были созданы на основе оригинальной графической пользовательской системы (GUI) оконного интерфейса операционной системы Lisp-машины. Затем Symbolics разработала радикально новую оконную систему под названием Dynamic Windows с пользовательским интерфейсом, основанным на представлении. Эта оконная система была представлена вместе с Genera 7 в 1986 году. Многие приложения Genera впоследствии использовали Dynamic Windows для своего пользовательского интерфейса. В конечном итоге была предпринята попытка портировать части оконной системы для работы на других реализациях Common Lisp от других поставщиков в виде Common Lisp Interface Manager (CLIM). Версии CLIM были доступны (в частности) для Allegro Common Lisp, LispWorks и Macintosh Common Lisp. Существует версия с открытым исходным кодом (McCLIM). Dynamic Windows использует типизированные объекты для всего вывода на экран. Вся отображаемая информация сохраняет связь с отображаемыми объектами (регистрация вывода). Это работает как с текстовым, так и с графическим выводом. Во время выполнения применимые операции к этим объектам вычисляются на основе иерархии классов и доступных операций (команд). Команды организованы в иерархических таблицах команд с типизированными параметрами. Команды можно вводить с помощью мыши (с широким использованием аккордов мыши), нажатий клавиш и через интерфейс командной строки. Все приложения используют единую реализацию интерпретатора командной строки, которая адаптируется к различным типам использования. Графические возможности оконной системы основаны на графической модели PostScript. Пользовательский интерфейс в основном монохромный (черно-белый), поскольку именно это обычно предоставляла аппаратная консоль. Однако существует широкая поддержка цвета с использованием цветовых буферов кадров или серверов X Window System (X11) с поддержкой цвета. Приложения (действия) используют весь экран с несколькими панелями, хотя окна также могут быть меньше. Расположение этих окон действий адаптируется к различным размерам экрана. Действия также могут переключаться между различными раскладами панелей. Genera предоставляет системное меню для управления окнами, переключения между приложениями и управления оконной системой. Многие функции пользовательского интерфейса (переключение между действиями, создание действий, остановка и запуск процессов и многое другое) также могут управляться с помощью команд клавиатуры. Dynamic Lisp Listener является примером интерфейса командной строки с полными графическими возможностями и поддержкой взаимодействия с помощью мыши. Он принимает выражения и команды Lisp в качестве входных данных. Вывод чувствителен к действиям мыши. Слушатель Lisp может отображать формы для ввода данных для различных встроенных команд. Пользовательский интерфейс предоставляет обширную онлайн-справку и контекстную справку, а также автозаполнение вариантов в различных контекстах.

Документация

Genera поддерживает полностью гипертекстную онлайн-документацию. Документация просматривается с помощью Document Examiner – одного из первых гипертекстовых браузеров. Документация построена на небольших, повторно используемых документационных фрагментах, которые также могут отображаться в различных контекстах в редакторе и Lisp-интерпретаторе. Документация организована в книги и разделы. Книги также выпускались в печатном виде с тем же содержанием, что и онлайн-документация. Информация в базе данных документации поставляется вместе с Genera и может быть изменена с помощью инкрементных патчей. Документация была создана с помощью отдельного приложения, не включенного в поставку Genera: Symbolics Concordia. Concordia предоставляет расширение для редактора Zmacs для редактирования документационных фрагментов, графический редактор и средство предварительного просмотра страниц. Документация содержит руководства пользователя, инструкции по установке и справочную информацию по различным конструкциям и библиотекам Lisp. Язык разметки основан на языке Scribe и также доступен для разработчиков. Genera поддерживает печать на PostScript-принтерах, предоставляет очередь печати и интерпретатор PostScript (написанный на Lisp).

Особенности

Genera также поддерживает различные сетевые протоколы и приложения, использующие их. Она обладает широкой поддержкой TCP/IP. Genera поддерживает однопроцессорные машины с несколькими потоками (называемыми процессами). Genera поддерживает несколько различных типов сборки мусора (GC): полную GC, сборку мусора на месте, инкрементную GC и эфемерную GC. Эфемерный сборщик использует только физическую память и использует блок управления памятью для получения информации об измененных страницах в физической памяти. Сборщик использует поколения, а виртуальная память разделена на области. Области могут содержать объекты определенных типов (строки, растровые изображения, имена путей и т.д.), и каждая область может использовать различные механизмы управления памятью. Genera реализует две файловые системы: файловую систему FEP для больших файлов и файловую систему Lisp Machine (LMFS), оптимизированную для множества небольших файлов. Эти системы также поддерживают различные версии файлов. Если файл изменяется, Genera сохраняет предыдущие версии. Genera также обеспечивает доступ для чтения и записи к другим локальным и удаленным файловым системам, включая NFS, FTP, HFS, CD-ROM, магнитные ленты. Genera поддерживает сетевую загрузку. Genera предоставляет клиент для объектной базы данных Statice от Symbolics. Genera широко использует систему условий (обработку исключений) для обработки всех видов ошибок времени выполнения и способна восстанавливаться после многих из них. Например, она позволяет повторить сетевые операции в случае сбоя сетевого соединения, при этом код приложения продолжит выполняться. При возникновении ошибок пользователю предоставляется меню перезапуска (отмена, повтор, продолжение), специфичное для возникшей ошибки. Genera располагает обширными инструментами отладки. Genera может сохранять версии работающей системы в «мирах». Эти «миры» можно загрузить, и они будут содержать все сохраненные данные и код.