Один опыт.
Полная запись.
Рисунок, программа, начальная лента и положение головки вместе определяют опыт. Файл проекта переносит их на другой компьютер. Все пять лабораторий используют одну четырёхоператорную машину.
Как начать
- Выберите лабораторию и задание 1–4. У каждого задания своё рабочее место, заметки и остановка. Переход между заданиями сохраняет их в текущем проекте.
- Сначала прочитайте вопрос и запишите прогноз в «Прогноз, наблюдение и вывод».
- «Загрузить заготовку» заменяет только текущее задание. Свой вариант перед заменой скачайте файлом.
- «Шаг команды» показывает отдельное действие. «Запуск» предлагает три темпа: «Разбор» — медленные фазы шага, «С анимацией» — непрерывный ход с видимыми движениями, «Быстро» — получение результата. По умолчанию выбран средний темп; «Шаг команды» всегда даёт подробный разбор. Пауза происходит между командами.
- После опыта запишите наблюдение, используйте проверку и отметьте выполненным. Автоматическая проверка измеряет результат; полноту объяснения проверяет преподаватель.
- «Сохранить этап и перейти дальше» скачивает полный проект. Это явная передача результата следующему этапу.
Рецепт и остановка
| Рецепт / recipe | Остановка / checkpoint |
|---|---|
| Программы и их редакции, начальная DATA, начальная головка, рисунок и жесты, таблица глифов, заметки, черновики. | Всё из рецепта, а также текущая DATA, адрес команды, головка, число действий и журнал Life. |
| Открывается на старте. Нажмите «Запуск». | Открывается на паузе. Следующий шаг продолжает опыт. |
Локальная автокопия хранится в браузере через IndexedDB. Она удобна при перезагрузке, но переносимым результатом является скачанный JSON. Перед импортом текущая работа помещается в отдельную локальную копию; кнопка «До импорта» её восстанавливает. Импорт проверяет остановки повторным исполнением. Длинный опыт может проверяться дольше короткого.
Редакция в текстовом поле и уже применённая программа различаются. Черновик сохраняется отдельно; кнопка «Применить редакцию» делает его исполняемым и восстанавливает начальную DATA. В режиме «Всю программу» можно добавлять и удалять строки. Редактор разворачивается на весь экран вместе с образцом и рабочим полем. Команды вставляются кнопками; RIGHT 4 означает четыре обычных шага вправо. Для больших графов доступно адресное окно по 512 команд: в этом режиме число строк и адреса сохраняются. Весь исполняемый текст можно скачать словами или в битах. Подсветка связывает текущий адрес PROGRAM со строкой редактора; несколько шагов RIGHT 4 подсвечивают одну и ту же строку. Кнопка «Открыть программу» загружает оба формата и сохраняет начальную DATA текущего опыта.
Файлы версии 2 открываются в прежней Chip Machine, которая включена в этот пакет без изменений. Формат 3 использует другие правила переходов и не переименовывает старые команды. Проверенные генераторы прежних распознавателя и калькулятора компилируются в новый язык.
Спецификация CHIP4 / 1
| Код | Оператор | Действие |
|---|---|---|
| 00 | FLIP / перевернуть | Текущий бит меняется: 0 ↔ 1. |
| 01 | RIGHT / вправо | DATA-головка сдвигается на одну клетку вправо. |
| 10 | LEFT / влево | DATA-головка сдвигается на одну клетку влево. |
| 11 | HALT / остановить | Программа завершена. Адреса не используются. |
У каждой команды два адреса: для прочитанного 0 и для прочитанной 1. Головка читает текущий бит до действия. Она выбирает соответствующий адрес, выполняет действие, затем переходит туда. Оба адреса могут совпадать. Никакого отдельного READ, WRITE, ADD, SUB, IF, LOOP или JUMP в этом языке нет.
a: FLIP done left left: LEFT a a done: HALT
На ленте 0111 поставьте головку на правый бит (адрес 3). FLIP превращает прежнюю 1 в 0 и выбирает LEFT. LEFT возвращает к FLIP на соседней клетке. Когда FLIP встречает прежний 0, он превращает его в 1 и выбирает HALT. Итог 1000, восемь действий вместе с HALT. При 1111 перенос выйдет за левую границу конечного учебного поля: модель остановится без выполнения недопустимого движения.
Короткая запись допускает одну команду в строке. Следующая строка становится обоими адресами; если последняя команда не HALT, компилятор добавляет HALT. В полной записи каждый адрес должен ссылаться на существующую команду. Отдельная метка может стоять перед командой; комментарий начинается с #.
N — число команд, w — число бит адреса, L — длина полной записи. Например, у трёх команд w=2, запись занимает 6 бит. Заголовок CHIP4 2 сообщает ширину адреса. Затем каждая строка содержит код операции и два адреса. Позиция строки задаёт собственный адрес команды.
Пределы этого исполнения: 8192 DATA-бита, 2 500 000 команд, 90 МБ на файл проекта; автоматический запуск делает паузу после 10 миллионов действий. Это ограничения учебного браузерного исполнения. Сохранённую остановку можно продолжить. Импорт проверяет до миллиарда исполненных действий на опыт.
Сначала действие, затем его запись
PROGRAM показывает карточки FLIP / перевернуть, RIGHT / вправо, LEFT / влево, HALT / остановить. Окно «Из PROGRAM» передаёт действие, окно «Под DATA-головкой» показывает фишку. При разборе чтение фиксируется до действия: переворот не меняет уже выбранное продолжение.
В первых двух лабораториях двоичное устройство карточек закрыто. В линейном опыте оба пути ведут к следующей команде и показаны одной стрелкой. Это та же машина: скрыта подробность изображения, а правила исполнения сохранены. Если вы напишете условный переход, интерфейс сразу покажет оба пути даже при закрытых битах.
Повтор сокращает запись
Сначала получите запись ручного рисунка и найдите несколько RIGHT подряд. «Свернуть одинаковые строки» превращает их в RIGHT 4. Примените редакцию. Карточка RIGHT ×4 показывает четыре отметки; каждое движение отмечает один шаг. Нажмите карточку или «Развернуть повторы», чтобы увидеть отдельные команды. Переключение вида не запускает и не изменяет машину.
Повтор раскрывается до исполнения. Количество машинных команд и действий сохраняется. Это сокращение записи известного числа действий, а не условный цикл и не дополнительная операция. Автоматически объединяются карточки линейных программ; граф с ветвлением остаётся показан отдельными командами. Текстовое сокращение сохраняет комментарии и прежние числовые адреса, потому что развёрнутая программа остаётся той же.
Как это записано внутри
Переключатель раскрывает двухбитный код операции на самих карточках и полную запись текущей команды под ними. 00 означает FLIP, 01 — RIGHT, 10 — LEFT, 11 — HALT. Два следующих поля содержат адреса продолжения для прочитанного 0 и 1. Зелёным отмечается выбранное поле. При HALT адресные поля не используются.
Ширина адреса зависит от числа отдельных машинных команд, а не от числа свёрнутых карточек. В программе A 53 команды, поэтому каждый адрес занимает 6 бит. Свёртывание RIGHT ×4 не уменьшает этот диапазон. Полный экспорт «Машинные биты» совпадает с показанной записью.
В лаборатории распознавания появляются разные продолжения по белой и чёрной фишке. Тогда адреса отвечают на конкретный вопрос: куда пойдёт исполнение? У отдельной машины Тьюринга состояние и символ выбирают строку таблицы, а затем исполняется её последовательность операций. В нашей Chip Machine текущая команда задаёт действие и два продолжения. Это две явно различаемые модели с общей идеей механического исполнения записи.
Рука уходит. Запись остаётся.
Порядок первой лаборатории: нарисовать → получить программу → увидеть исполнение → изменить и предсказать. Не требуется повторно смотреть весь длинный проход. «До следующего FLIP» исполняет движения и останавливается перед ближайшим следующим переворотом или HALT; текущая команда при этом выполняется. «Шаг команды» разбирает выбранный участок, быстрый «Запуск» проверяет итог. Ни один из этих режимов не пропускает команды самой машины.
В схеме исполнения синяя линия передаёт команду из PROGRAM, зелёная — считанный бит от DATA-головки, янтарная — действие над лентой, фиолетовая — следующий адрес PROGRAM. В темпе «Разбор» один шаг разделён на чтение, выбор продолжения, действие и переход. В среднем темпе эти фазы проходят без длинных пауз; движения и перевороты остаются видимыми. Быстрый режим исполняет те же команды. При FLIP решение использует сторону фишки до переворота. Линии — объяснение связей машины, а не схема реальной электрической платы.
Лаборатории 1–2: от рисунка к коду
В первом задании поле 20×20 записывает жесты в порядке щелчков. Повторные перевороты не исчезают. «Получить программу жестов» вставляет движения между адресами фишек. Образец остаётся рядом, а исполняемая DATA начинается с белого поля. Новый рисунок создаётся кнопкой «Новое белое поле»; для варианта уже существующей программы используйте редактор.
В заданиях 1.2–1.4 поле уменьшено до 5×7: всего 35 фишек. В 1.2 рядом всегда видна A и уже подготовлена её короткая программа; студент наблюдает связь строки с действием. В 1.3 нужно предсказать и исправить пропуск в перекладине. В 1.4 — продолжить начатую H или выбрать образец A либо стрелки. Мышь не меняет DATA: здесь результат создаётся программой. Эти маленькие образцы — наши учебные начертания; Unicode не устанавливает единственный рисунок буквы. Во второй лаборатории используется полноценная таблица 8×16.
Во второй лаборатории программа сначала записывает UTF-16 в DATA. Подготовленная строка может содержать суррогатную пару, например 😀 = D83D DE00. Предпросмотр SCREEN объединяет пару и ищет запись таблицы. Неизвестный код показывает рамку, одиночный суррогат не считается Unicode scalar value. В нашей поставке не каждый знак Unicode имеет глиф: его можно добавить.
Таблица хранит начертание 8×16. Из неё компилятор строит отдельную программу FLIP/движений. «Собрать и начать», «Шаг», «Исполнить» выполняют именно эту программу на белой ленте. Верхний SCREEN показывает её итоговый рисунок как быстрый предпросмотр. 16-битный код не содержит 128-битный рисунок: таблица является отдельным общим ресурсом.
Чтобы перенести работу, сохраните проект; чтобы перенести только алфавит — таблицу. В редакторе «Сохранить рисунок в таблицу» применяет изменение. «Копировать 128 бит» и текстовое поле позволяют обмениваться рисунками. Поле U+E000 относится к частной области и подходит для собственного знака.
Лаборатории 3–4: ветвление и арифметика
Распознаватель помечает латинские A–Z/a–z, русские А–я с Ё/ё, цифры 0–9, знаки +/− (ASCII -) и =. Четыре флага записываются в DATA. Это учебные классы, а не полная Unicode-классификация. Числа промежуточных флагов до HALT не являются окончательным ответом.
Калькулятор принимает ровно четыре кодовые единицы: цифра, знак + или -, цифра, =. Результаты от −9 до 18. Программа проверяет коды, переводит цифры в числа, переносит или заимствует единицы, затем записывает коды результата. Неверные знаки в четырёхсимвольном выражении дают ??. ADD, SUB и вычисления выражения средствами JavaScript отсутствуют в исполняющей машине.
Программа использует A: DATA 96–103; B: 104–107; valid:108; plus:109; minus:110; neg:111; nz:112; error:113; result:114–121; tmp:122, далее временные биты. Коды результата занимают DATA 64–95. Карта в интерфейсе связывает адреса PROGRAM с этими этапами.
Лаборатория 5: жизнь на торе
Текущий слой A занимает DATA 0–399; следующий B — 400–799. Сначала программа вычисляет все B по неизменному A. Затем копирует B в A. На фазе копирования A временно содержит части двух поколений, поэтому решения уже не принимаются. Полное поколение фиксируется только при возвращении PROGRAM к адресу 0.
Тор означает: после правого края идёт левый, после нижнего — верхний; это действует и по диагонали. Восемь соседей клетки выделены зелёным, сама обрабатываемая клетка — янтарным, головка DATA — синим. Кнопка «К решению клетки» доводит настоящее исполнение до ветвления по числу соседей выбранной клетки. Счёт 0,1,2,3,≥4 хранится в положении PROGRAM. Числа ≥4 объединены, потому что для правила Life их результат одинаков.
«Шаг команды» выполняет одну примитивную команду. «Одна клетка» останавливается на следующей границе обработки. «Одно поколение» завершает текущий проход. Готовая развёрнутая программа содержит 1 657 720 команд; это цена наглядного раскрытия правила в движениях и переворотах. В ней нет скрытого действия «сделать поколение».
Журнал различает численность, исчезновение, переходный участок до первого повторения полного поля и период. После 10 000 различных сохранённых полей поиск новых повторов имеет ограниченную историю; предыдущий найденный период остаётся. «Не найден» всегда относится к наблюдённому горизонту. Рецепт сохраняет начальную конфигурацию, остановка — также промежуточный B и PROGRAM. Ручной переворот во время наблюдения начинает новый опыт и новый журнал.
Редакция программы Life разрешена. После её изменения исходные пояснения правил не доказывают поведение вашей версии; сравнивайте полученные поля с эталоном. Полный перенос Life состоит из версии генератора CHIP4-Life/1 и ваших адресных правок; самодостаточная версия генератора входит в этот веб-пакет. Развёрнутую программу можно скачать отдельно.
Отдельная машина Тьюринга
Изначально лента пуста. В ней возможны пустота, фишка 0, фишка 1, а также вспомогательные знаки. Пустота отличается от белой фишки. PUT:0 и PUT:1 реализуют исходные P0 и P1 физически: положить, оставить или перевернуть. REMOVE соответствует E. Наш явный FLIP допустим только над двусторонней фишкой; это расширение редактора, помеченное отдельно от исторических таблиц.
Таблица содержит начальное состояние, условие чтения, последовательность операций и новое состояние. Внутри строки операции идут последовательно без повторного выбора правила. «Одна операция» позволяет увидеть каждое размещение и движение. «Одно правило» завершает строку. Файл остановки хранит даже позицию внутри строки.
Включены обе формы первого примера и второй пример из §3 статьи, а также отдельный наш опыт с размещением, переворотом и снятием. Исторические примеры строят бесконечные последовательности: останавливайте их кнопкой паузы. Нет подходящего правила — остановка; больше одного подходящего правила — ошибка неоднозначности. Circular / circle-free у Тьюринга относятся к конечному или бесконечному числу выведенных цифр, а не просто к наличию цикла исполнения.
Редактор позволяет создавать собственные таблицы. Разреженная лента растёт по мере использования; окно показывает только часть клеток. Нумерация клеток, анимация, JSON и интерфейс — наши средства представления, не детали статьи 1936 года. Предусмотрены просмотр всех страниц первоисточника и собственный математический компаньон с чтением формул по-английски.
Локальная работа и публикация
Этот пакет — статический сайт. Перенесите всё содержимое site_package в отдельный каталог сервера, сохранив вложенные папки. Откройте index.html. Для локальной проверки запустите поставляемый launch.py или любой локальный статический сервер. Для буфера обмена нужен localhost или HTTPS. Сами опыты не требуют внешних библиотек, сервера вычислений или подключения к сети. Внешнее подключение нужно только при открытии первоисточников.
Публикующий агент получает WEB.zip и DEPLOY_RU.md. Папка teacher и решения публикуются отдельно только по решению преподавателя. Старые адреса сайта сохраняются; новый выпуск размещается в собственной папке.
Life: наблюдать 100 поколений
Поле, кнопки и счётчик находятся вместе. «100 поколений» добавляет ровно сто к текущему номеру: от 0 до 100, затем от 100 до 200. Фигура может повториться или исчезнуть раньше, но серия продолжится до цели. «+1 поколение» завершает ближайшее поколение.
«Наглядно» показывает каждое готовое поле с короткой паузой. «Максимально быстро» уменьшает ожидание. Оба режима исполняют ту же программу CHIP4; правила игры не подменяются отдельным вычислителем. Пока идёт расчёт следующего поколения, на поле остаётся последний готовый кадр.
Нажмите «Пауза», затем «Продолжить серию». Сохранение остановки переносит и незавершённую серию: после загрузки исполнение остаётся на паузе, а продолжение идёт до прежней цели. Для нового опыта используйте «Сначала», другую конфигурацию или переверните фишку на поле. Рецепт начинает воспроизведение с исходного поколения 0.
«Разобрать работу программы» открывает шаг команды, одну клетку и её решение. В таком разборе поле показывает рабочую DATA, поэтому можно увидеть промежуточное копирование B → A. Карточки, головка и редактор находятся ниже.