Google & Techguy
Google Google
Привет, я тут покопалась в информации о PDP‑8 1972 года, и это заставило меня подумать: не мог бы ты попробовать запустить на нём какую-нибудь маленькую программу-тезаурус? Звучит как интересная задачка для нас.
Techguy Techguy
Да, конечно, давай попробуем. Только учти: у PDP-8 слова и адресное пространство всего по 12 бит, так что весь твой тезаурус нужно уместить в 4096 слов. Потребуется написать собственную рутину сборщика, чтобы загрузить компактный словарь – возможно, просто список корней и небольшой набор синонимов для каждого, хранящихся в виде упакованных битами смещений. Потом нужно будет создать крошечную подпрограмму поиска, которая перебирает список, делает двоичный поиск по 12-битному ключу и возвращает следующее слово. Если хочешь заморочиться, можно реализовать схему хеширования, которая сопоставляет первую букву с корзиной и использует связанный список пар слов, но придётся эмулировать указатели с помощью 12-битных адресов. Придётся вручную писать крошечную рутину обработки прерываний для ввода-вывода, скорее всего, просто последовательный порт, чтобы ты могла ввести запрос и получить ответ. Потребуется несколько ночей, много отладки и, вероятно, несколько макетных плат, чтобы запустить тактовый генератор на частоте 1.7 МГц, но это отличный повод снова оживить эту старушку. Удачи в хакинге!
Google Google
Звучит как захватывающее приключение! Давай начнем с составления словаря. Я вытащу из своего оффлайн-тезауруса несколько основных слов, сложу их синонимы в таблицу на 12 бит, и будем двигаться дальше. Можно представить это как небольшой эксперимент по сжатию данных на базе старого железа. Готова нырять?
Techguy Techguy
Конечно, без проблем. Только имей в виду: у PDP-8 всего 4096 слов по 12 бит, так что каждый синоним должен помещаться в 12 бит. Значит, тебе придётся выбрать очень небольшой набор корней и упаковать синонимы в плотные битовые поля, используя процедуру поиска, которая сможет сдвигать и маскировать, чтобы извлечь каждый синоним. Может, начни с чего-то простого, например, "большой" → {большой, огромный, необъятный}, и закодируй каждый синоним как 4-битный индекс в небольшую таблицу, а потом упакуй три 4-битных индекса в одно 12-битное слово. Когда придумаешь схему упаковки, сможешь написать крошечный ассемблерный код, который загрузит таблицу и простую функцию поиска, которая будет делать двоичный поиск по индексу корня, сдвигать для получения нужного поля синонима и возвращать его. Если возникнут какие-то трудности, просто скажи, и мы подкорректируем упаковку или добавим крошечную хеш-таблицу. Давай заставим этот тезаурус заработать.
Google Google
Отлично, я начинаю писать логику упаковки и заглушку для сборщика — посмотрим, сколько корней мы сможем впихнуть в 4096 слов. Сообщу тебе, как только возникнут проблемы или появится новая идея для более эффективного хэш-трика. Буду подстраивать схему по ходу дела!
Techguy Techguy
Ладно, держи меня в курсе с расчётами по упаковке — только помни, лимит в 12 бит – это железное ограничение. Если таблица получится слишком большой, единственный выход – урезать список синонимов или написать простенькую рутину сжатия, где в одной записи будет несколько слов. Кстати, подумай о простом линейном зондировании для хеширования, чтобы избежать накладных расходов от двоичного поиска; так проще кодить на чистом PDP-8 ассемблере, и всё равно уложишься в лимит слов. Обращайся, если понадобится быстрая проверка битовых масок. Удачи!
Google Google
Поняла, буду следить за объёмом и ещё раз проверю маски. Если начнёт расти как на дрожжах, подрежу синонимы или добавлю простой сжатие по длине последовательности. Скоро пришлю первый вариант раскладки таблицы. Спасибо, что предупредил!
Techguy Techguy
Отлично, только помни: каждый 12-битный фрагмент на вес золота, поэтому держи маски в порядке. Сообщи, когда будешь готова к короткой проверке. Удачи в взломе!
Google Google
Спасибо, буду следить за масками и сообщу, когда черновик будет готов к беглому просмотру. Удачи в работе!