User Tag List

Показано с 1 по 8 из 8

Тема: "Утерянный" язык BLISS: идеальная кодогенерация для PDP-11

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,765
    Спасибо Благодарностей отдано 
    2,737
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    133 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию "Утерянный" язык BLISS: идеальная кодогенерация для PDP-11

    Просто оставлю это здесь
    Цитата Сообщение от GROK
    BLISS-11 как кодогенератор для PDP-11

    BLISS-11 — это диалект языка BLISS, специально адаптированный для PDP-11, разработанный в начале 1970-х в сотрудничестве между Carnegie Mellon University (CMU) и Digital Equipment Corporation (DEC). Он был создан как кросс-компилятор: хостился на PDP-10 (где хватало памяти для компилятора), но генерировал машинный код исключительно для PDP-11. Это ключевой момент — BLISS-11 не предназначен для нативного выполнения на PDP-11 из-за ограничений 16-битной архитектуры (малый объём памяти, адресное пространство). Вместо этого он фокусировался на генерации высококачественного, оптимизированного кода для PDP-11, делая его мощным инструментом для системного программирования (например, для ОС, диагностики и компиляторов вроде PDP-11 FORTRAN IV-PLUS).

    Оригинальные исходники компилятора BLISS-11 (как и бинарники для PDP-10) действительно считаются утерянными в публичном цифровом доступе. Мои поиски по веб (включая GitHub, bitsavers.org, trailing-edge.com, архивы DECUS и форумы вроде retrocomputing) не выявили полных исходников. Есть только tape images для PDP-10 (с бинарниками BLISS-36/10, но не BLISS-11), manuals и исторические описания. Однако, на основе детальных документов (в частности, статьи Ronald F. Brender из 2002, которая основана на внутренних DEC/CMU материалах), можно реконструировать, как BLISS-11 устроен как кодогенератор. Я опираюсь на это, чтобы описать архитектуру — это closest к вашему интересу.

    Общая архитектура BLISS-11 как компилятора/кодогенератора

    BLISS-11 был полностью переписан по сравнению с BLISS-10 (для PDP-10), с акцентом на оптимизацию кода для ограниченной PDP-11. Он следовал "генеративному" подходу: переводил высокоуровневый код BLISS в эффективный машинный код PDP-11 "на лету", с пост-проходами для уточнения. Компилятор был однопроходным в основном, но с элементами multi-pass для оптимизаций. Ключевые принципы:

    • Типлессность и низкоуровневый доступ: BLISS — типлессный язык (все данные — машинные слова), что позволяло прямой доступ к hardware PDP-11 (регистри, память). Это делало его "ассемблером высокого уровня" с фокусом на качество кода, а не на абстракциях.
    • Оптимизация под PDP-11: PDP-11 имел 16-битные слова, 8-битные байты, отсутствие byte-pointers и ограниченную память (64KB). Компилятор минимизировал overhead: генерировал компактный код, оптимизировал под sign/unsigned (инструкции вроде MOVB с sign-extend), и полагался на программиста для глобальных оптимизаций (локальные — на компиляторе).
    • Bootstrapping и кросс-компиляция: BLISS-11 сам был написан на BLISS-10. Для генерации кода: исходники на BLISS-11 компилировались на PDP-10 в объектный код PDP-11, затем переносились (на лентах или перфокартах) на PDP-11 для выполнения. Нет нативного self-hosting на PDP-11.

    Структура компилятора (на основе описаний Brender):

    Фронтенд (парсер и препроцессор):

    • Парсит BLISS-код: выражения (expression-oriented, без statement/expression различия), структуры (алгоритмические, как векторы/матрицы с вычисляемыми offset).
    • Новый макро-система: lexeme-based (простые, условные, итеративные макросы). Например, итеративный макрос для повторений (INIT_LOCAL_VEC для векторов).
    • Лексические функции (%count, %length) для compile-time вычислений, улучшающие кодогенерацию.

    Средний уровень (анализ и оптимизации):

    • Нет сложных IR вроде CFG+SSA или Sea of Nodes — простая генерация "на лету".
    • Локальные оптимизации: константное сворачивание, удаление мёртвого кода, оптимизация под PDP-11 регистры (8 регистров, включая PC/SP).
    • Адаптации для hardware: переформулировка byte-операций (Y<1,1> = .X<0,1> для байтов), unsigned операторы (EQLU, LEQU), атрибуты BYTE/WORD для аллокации.
    • Контроль потока: Добавлены labels для escape (leave label [with expr]), упрощающий циклы/ветвления по сравнению с BLISS-10.

    Бэкенд (кодогенератор):

    • Генерирует PDP-11 машинный код напрямую: использует machop для декларации PDP-11 инструкций (например, прямой маппинг на ADD, SUB, BIS).
    • Фокус на качестве: Минимизация инструкций для 16-бит адресации (zero-extend для subword, чтобы избежать overhead sign-extend). Нет floating-point (PDP-11 не имел hardware в ранних моделях).
    • Пост-проходы: После базовой генерации — уточнение (peephole optimizations) для PDP-11 специфики, как оптимизация под режимы адресации (регистр, deferred, auto-increment).
    • Вывод: Relocatable object modules (.OBJ) для линковки с PDP-11 ассемблером/linker.

    Плюсы как кодогенератора для PDP-11

    • Эффективность: Генерировал код, близкий к ручному ассемблеру, но с читаемостью (структуры, циклы без goto). Использовался в реальных продуктах: PDP-11 FORTRAN IV-PLUS (компилятор на BLISS-11), диагностика DEC, Hydra OS в CMU.
    • Гибкость: Typeless + machop позволяли fine-tune под PDP-11 (например, прямой доступ к регистрам как переменным).
    • Компактность: Оптимизации под малую память — ключ для PDP-11 (например, в RT-11 или RSX-11).

    Минусы

    • Сложность bootstrapping: Зависимость от PDP-10 для компиляции.
    • Ограничения: Нет глобальных оптимизаций (phase ordering problem); floating-point опущен; не self-hosted.
    • Устарелость: Для современных эмуляторов (SIMH PDP-11) можно использовать later диалекты вроде Common BLISS, но не оригинал.

    Где искать дальше (если не утеряно полностью)

    • Tape images: На trailing-edge.com есть PDP-10 tapes с BLISS-36 (BB-J941F-BB), где могут быть .BLI файлы (BLISS sources) для BLISS-11 cross-compiler. Скачайте, монтируйте в SIMH эмулятор PDP-10, и проверьте директории /bliss/ на SIX12.BLI (упомянут как ~1779 строк для BLISS-10, но возможно части для -11). Это не чистые PDP-11 sources, но bootstrap-части.
    • Архивы CMU/DEC: Kilthub.cmu.edu имеет manual BLISS-11 (1970s), но не код. Контакт с CMU archives или DECUS (если сохранились microfiche).
    • Современные альтернативы: GitHub sergev/bliss-compiler (BLISS-M) — portable cross-compiler с LLVM backend, может генерировать PDP-11-like код (хотя не оригинал). Для эмуляции: используйте с SIMH PDP-11.
    Насчёт бэк-энда LLVM для PDP-11 Грок походу приврал, но жаль, что всё утеряно. А то был бы у нас "фирменный" "идеальный" язык для PDP-11.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Похожие темы

  1. Техническая литература: Язык программирования "Бейсик"
    от Viktor2312 в разделе Техническая литература
    Ответов: 18
    Последнее: 22.09.2025, 14:21
  2. "MS-DOS" (ну.. не совсем конечно) на PDP-11 :)
    от Hunta в разделе ДВК, УКНЦ
    Ответов: 7
    Последнее: 10.02.2024, 17:26
  3. Ответов: 87
    Последнее: 13.07.2022, 21:19
  4. Ответов: 206
    Последнее: 19.08.2020, 10:36

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •