posted on 2026-05-11
На этой небольшой демке хочу показать, как я собираюсь использовать CLOS-объекты как состояние акторов в моем кодовом ассистенте Кодабрус. Для реализации акторов я использую библиотеку Sento, а CLOS-объекты в качестве состояния мне нужны для того, чтобы это состояние можно было сериализовать на диск и потом продолжить работу системы с того же места, на котором остановился пользователь.
posted on 2026-05-16
Итерация которую можно прервать. С акторами не всё так просто.
Вот вам небольшая демка того, как в системе акторов можно реализовать итерацию таким образом, чтобы её можно было безопасно прервать. Я собираюсь использовать этот подход для того, чтобы организовать работу с код-ассистентом и тулами, которые он запускает. Это нужно сделать так, чтобы код-ассистента можно было прервать в любой момент и сделать это безопасно.
В этом демо используется фреймворк Sento, реализующий актеры для Common Lisp.
Вот полный код примера:
(defun make-interruptable-actor-loop-example ()
(ac:actor-of *sys*
:destroy (lambda (&rest args)
;; По сообщению :stop актор будет полностью
;; остановлен и его нельзя будет запустить ещё раз
(log:info "Destroy called with ARGS = ~A" args))
:receive (let ((stopped nil))
(lambda (message)
(log:info "Processing" message)
(case message
;; Но с помощью :break итерацию можно приостановить,
;; а потом продолжить заново с помощью :run.
(:break
(log:info "Stopping")
(setf stopped t))
(:run
(log:info "Running")
(setf stopped nil)
(act:tell act:*self* :next-iteration))
(t
(unless stopped
(log:info "Sleeping")
(sleep 3)
(log:info "Going to next iteration")
(act:tell act:*self* :next-iteration))))))))
posted on 2026-05-16
Итерация которую можно прервать. С акторами не всё так просто.
Вот вам небольшая демка того, как в системе акторов можно реализовать итерацию таким образом, чтобы её можно было безопасно прервать. Я собираюсь использовать этот подход для того, чтобы организовать работу с код-ассистентом и тулами, которые он запускает. Это нужно сделать так, чтобы код-ассистента можно было прервать в любой момент и сделать это безопасно.
В этом демо используется фреймворк Sento, реализующий актеры для Common Lisp.
Вот полный код примера:
(defun make-interruptable-actor-loop-example ()
(ac:actor-of *sys*
:destroy (lambda (&rest args)
;; По сообщению :stop актор будет полностью
;; остановлен и его нельзя будет запустить ещё раз
(log:info "Destroy called with ARGS = ~A" args))
:receive (let ((stopped nil))
(lambda (message)
(log:info "Processing" message)
(case message
;; Но с помощью :break итерацию можно приостановить,
;; а потом продолжить заново с помощью :run.
(:break
(log:info "Stopping")
(setf stopped t))
(:run
(log:info "Running")
(setf stopped nil)
(act:tell act:*self* :next-iteration))
(t
(unless stopped
(log:info "Sleeping")
(sleep 3)
(log:info "Going to next iteration")
(act:tell act:*self* :next-iteration))))))))
This blog covers commonlisp, llm, codabrus, clos, actors, learning, news, ai, automation, voice, projects, holism, zerocoder, python, codeassistant, aider, cursor, project, i18n, poftheday, visualization, closed, tips, seo, telegram, bot, прототип, smarthome, yandexcloud, logging, ideas, experiment, software, thoughts, programming, hackathon, mtstruetech, robotics, salebot, bots, notes, emacs, macos, lisp, failures, infrastructure, lispworks, life, идеи, mcp, problems, sql, nix, ultralisp, tutorials, reblocks, yandex, cloud