Один опыт.
Полная запись.
Рисунок, программа, начальная лента и положение головки вместе определяют опыт. Файл проекта переносит их на другой компьютер. Все пять лабораторий используют одну четырёхоператорную машину.
Как начать
- Выберите лабораторию и задание 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 миллионов действий. Это ограничения учебного браузерного исполнения. Сохранённую остановку можно продолжить. Импорт проверяет до миллиарда исполненных действий на опыт.
Рука уходит. Запись остаётся.
Порядок первой лаборатории: нарисовать → получить программу → увидеть исполнение → изменить и предсказать. Не требуется повторно смотреть весь длинный проход. «До следующего 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 и решения публикуются отдельно только по решению преподавателя. Старые адреса сайта сохраняются; новый выпуск размещается в собственной папке.