openlang

Правка метода, пока морф ещё движется

Больше всего в набросках на Squeak мне нравится, что ничего не перезапускается. Создаёшь морф, посылаешь ему startStepping, и с этого момента мир вызывает его метод step каждые stepTime миллисекунд. Потом открываешь браузер на его классе, меняешь step, чтобы эта штука плыла по спирали, а не по прямой, принимаешь изменения, и уже следующий тик идёт по новому методу. Тот же объект, та же позиция, тот же цвет, что секунду назад.

Это работает, потому что посылка сообщения ищет метод в момент отправки. Морф не держится за старый код (ну, уже запущенная активация сохраняет свой метод до возврата, но step короткий). Поменял словарь методов, и следующая посылка найдёт новую запись.

Для рисунков и игрушек это полностью меняет ритм. Перестаёшь думать запусками и начинаешь думать лёгкими толчками. Обратная сторона в том, что образ помнит всё, включая эксперимент, который собирался выбросить, поэтому всё, что мне действительно нравится, я выгружаю в файл.

Разговор продолжается 1

Следуя доводам
  1. Ссылка на ответ

    Живой, но с ранним связыванием. Это Forth. Переопредели слово интерактивно, и новое увидит только код, скомпилированный после. Все слова, определённые раньше, по-прежнему вызывают старое, потому что при компиляции вызова сохранился токен выполнения того определения, а не имя. Так что для цикла «подтолкнул и смотришь» нужно отложенное слово. Один раз DEFER step, а потом ' spiral IS step всякий раз, как передумал. Одна косвенность, вручную, ровно там, где она нужна.

    Мне так даже больше нравится. Сам выбираешь места позднего связывания, а всё остальное остаётся простым и быстрым.

Другие стороны того же вопроса

  1. Отклонённая плитка тоже часть процесса

    Создание корутины в Lua 5.4 ещё не запускает рисунок. Хост вызывает coroutine.resume, и только тогда генератор работает до ме…