Emacs/Slime and SBCL: stepping - Lisp

Узнай цену своей работы

Формулировка задачи:

Друзья, конкретно у меня никогда не было мысли пользоваться пошаговой отладкой в Common Lisp, и тут:
Также я привык к [...], к пошаговому отладчику [...].
Почему я должен быть наказан и лишён всего этого, если я хочу программировать на лиспе? В чём профит? Отвечу: а просто ни в чём. Нет никакого профита, мазохизм в чистом виде. Я программирую на лиспе _вопреки_ убожеству тех средств разработки, которые для лиспа предлагаются.
Известно, что Common Lisp спроектирован таким образом, что при возникновении ошибки стек не опустошается и в отладчике мы, как минимум, всегда можем посмотреть backtrace и информацию об окружении. Посему значимость пошаговой отладки драматически уменьшается и можно обойтись без неё. Но всё же я допускаю, что может быть удобно пошагать чутка вперёд и посмотреть что будет после исправления, например, корректируемой ошибки. Я разобрался. В SBCL есть степпер http://www.sbcl.org/manual/#Single-Stepping. Он работает иногда странно: вычислят формы без спросу. Но, на сколько я понял, такие формы, которые не очень интересны (некоторые функции из стандартной библиотеки). Но весь пользовательский код потенциально может быть пройден. То есть имеем вполне пригодный к использованию степпер. В Slime заявлена функциональность подобной отладки: https://www.common-lisp.net/project/....html#Stepping. И оно работает! Эта фича поддерживает SBCL-ый степпер. С Clozure CL всё плохо. Поэтому, если нужна такая функциональность, CCL выбирать нельзя. Товарищ

budden

, тебе нужна была такая функциональность, а ты не разобрался и зазря поругал Emacs и Lisp. Ц-ц-ц не хорошо

Решение задачи: «Emacs/Slime and SBCL: stepping»

textual
Листинг программы
(cl:defun ЛВГ::Ж1  (ЛВГ::А  cl:&key (ЛВГ::Б  1 ) )
 (cl:declare (cl:type COMMON-LISP:INTEGER  ЛВГ::А ))
 (perga-implementation:perga ЛВГ:|тело| 
 (ТРАНСЛЯТОР-ЯРА-В-ЛИСП::|Стоп-выр-1| "Вход в сост.оп")
  (ТРАНСЛЯТОР-ЯРА-В-ЛИСП::|Стоп-выр-1| (ЯР-СТ-БИБ::-°  NIL ЛВГ::А ЛВГ::Б )))
 )

Объяснение кода листинга программы

В коде определен функционал для реализации шагов в emacs/slime и SBCL. Список функций с номерами до 20:

  1. (cl:defun ЛВГ::Ж1 (ЛВГ::А cl:&key (ЛВГ::Б 1) )
  2. (cl:declare (cl:type COMMON-LISP:INTEGER ЛВГ::А ))
  3. (perga-implementation:perga ЛВГ:|тело|
  4. (ТРАНСЛЯТОР-ЯРА-В-ЛИСП::|Стоп-выр-1| Вход в сост.оп)
  5. (ТРАНСЛЯТОР-ЯРА-В-ЛИСП::|Стоп-выр-1| (ЯР-СТ-БИБ::-° NIL ЛВГ::А ЛВГ::Б ))) В первом определении функции (1) используется ключевое слово cl:&key для создания ключевого слова, которое может принимать одно значение, указанное в скобках. Ключевое слово имеет значение 1. Во втором определении (2) используется декларация типа для переменной ЛВГ::А, которая должна быть типа COMMON-LISP:INTEGER. В третьем определении (3) используется функциональный тип PERGA для реализации шагов в Emacs/Slime и SBCL. В четвертом определении (4) используется функциональный тип TРАНСЛЯТОР-ЯРА-В-ЛИСП::|Стоп-выр-1| для реализации шагов в Emacs/Slime и SBCL. В пятом определении (5) используется функциональный тип TРАНСЛЯТОР-ЯРА-В-ЛИСП::|Стоп-выр-1| для реализации шагов в Emacs/Slime и SBCL. Некоторые переменные, используемые в коде:
    • ЛВГ::А
    • ЛВГ::Б
    • NIL В коде также используются функциональные типы и ключевые слова, которые специфичны для реализации шагов в Emacs/Slime и SBCL.

Оцени полезность:

5   голосов , оценка 3.2 из 5
Похожие ответы