Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
nullxdth
2275 / 1034 / 76
Регистрация: 12.03.2013
Сообщений: 4,707
1

Emacs/Slime and SBCL: stepping

29.07.2017, 06:26. Просмотров 532. Ответов 7

Друзья, конкретно у меня никогда не было мысли пользоваться пошаговой отладкой в Common Lisp, и тут:

Цитата Сообщение от budden Посмотреть сообщение
Также я привык к [...], к пошаговому отладчику [...].
Цитата Сообщение от budden Посмотреть сообщение
Почему я должен быть наказан и лишён всего этого, если я хочу программировать на лиспе? В чём профит? Отвечу: а просто ни в чём. Нет никакого профита, мазохизм в чистом виде. Я программирую на лиспе _вопреки_ убожеству тех средств разработки, которые для лиспа предлагаются.
Известно, что 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. Ц-ц-ц не хорошо
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2017, 06:26
Ответы с готовыми решениями:

Как загрузить quicklisp в sbcl через slime в emacs?
Здравствуйте, дорогие! Я новичок в Emacs и не могу установить quicklisp и нормально все настроить....

ECL+SLIME+EMACS
Решил установить ECL из тарболла, сконфигурировал, скомпилировал: ./configure make В нашем...

Lisp in Box ide:slime+emacs выполнить сохраненный фаил
Здравствуйте!Собираюсь освоить lisp.В основном занимался java.Начал заниматься по книге practical...

SBCL под Windows. Не создаётся .exe из-под Slime
Когда настраивал SBCL + Emacs + Slime под Винду, сделал простой пример для проверки, который...

7
budden
198 / 99 / 4
Регистрация: 16.08.2015
Сообщений: 193
29.07.2017, 10:22 2
Я прекрасно знаю, что он есть, и пользуюсь им. Работает более-менее, на троечку. В лиспворкс на три с плюсом.
Проблема именно в том, что он много пропускает. Во многих практических случаях после пары пропусков нить полностью теряется. Например, ЕМНИП, он может вернуться из функции, не остановившись на выходе, и ты не узнаешь, что она вернула.

Оптимизация let при высоком уровне отладки не отключается. Например, если сделано (let ((а 1)) ...), то это в каких-то случаях приводит к тому, что переменной а вовсе не образуется. Кроме того, нельзя щёлкнуть и поставить точку останова, хотя в CMU такая возможность была и в SBCL вроде бы она тоже работает (точки останова есть, но нет интерфейса в редакторе, чтобы их поставить).

Конечно, мы все знаем, что в лиспе можно вписать (break) в любое место и перекомпилировать одну функцию. Но это выглядит недоработкой.

Ключевое здесь то, что ты допускаешь, что отладчик может быть удобен. Это говорит о том, что ты мыслишь сам, за это тебе респект. Официальная религия учит, что пошаговая отладка вообще не нужна. Например, есть такой лозунг: "если тебе нужен отладчик, то ты не понимаешь свою программу". При таком подходе, опять же, не стоит удивляться падению популярности языка. На самом же деле сообщество просто не осилило сделать хороший отладчик, и его отсутствие пытаются компенсировать зомбированием прихожан. Стандартный ход разработчиков, не осиливших какой-то функционал. Зазомбировать можно школьников, накрайняк студентов, а бизнес так просто не зомбируется - он уходит на другие технологии.

Добавлено через 8 минут
Я сейчас делаю отладчик для Яра, опираясь как раз на этот пошаговый отладчик. При этом мне приходится в очень многих местах вставлять специальный вызов, чтобы степпер удосужился там остановиться. Вот как выглядит код для простейшего вычисления:

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

Оптимизация let при высоком уровне отладки не отключается. Например, если сделано (let ((а 1)) ...), то это в каких-то случаях приводит к тому, что переменной а вовсе не образуется. Кроме того, нельзя щёлкнуть и поставить точку останова, хотя в CMU такая возможность была и в SBCL вроде бы она тоже работает (точки останова есть, но нет интерфейса в редакторе, чтобы их поставить).
0
nullxdth
2275 / 1034 / 76
Регистрация: 12.03.2013
Сообщений: 4,707
29.07.2017, 12:20  [ТС] 3
Ну что тут можно сказать - тогда LW используй, если тебе степпер критичен. По моему опыту, конкретно в Common Lisp от него мало толку. Я думаю, что я не одинок в таком мнении, ибо и разработчикам компиляторов на него пофиг. Видимо спрос такой
Интересно было бы посмотреть, как будет вести себя LW-шный степпер в Slime.
0
budden
198 / 99 / 4
Регистрация: 16.08.2015
Сообщений: 193
29.07.2017, 12:24 4
Нет, LW с закрытыми исходниками, не пойдёт для моих целей. Я свой выход уже давно нашёл и создаю свой ЯП с трансляцией в лисп - так я могу освободиться от правил, навязываемых этой сектой, и использовать плюсы лиспа, из которых последний ещё не превзойдённый конкурентами - это горячая замена кода. Всё остальное в других языках уже сделано.
0
nullxdth
2275 / 1034 / 76
Регистрация: 12.03.2013
Сообщений: 4,707
29.07.2017, 12:50  [ТС] 5
Эх, ну ладно Но есть подозрения, что ты впал в безумие.
0
Catstail
Модератор
25766 / 13283 / 2513
Регистрация: 12.02.2012
Сообщений: 21,781
30.07.2017, 04:48 6
Мысль по поводу. Лет 15-20 назад я мог написать такое: "Как глупа система B! В ней трудно сделать это и вот это! А в родной системе А я все это легко делаю..." Прошли годы. И до меня дошла простая мысль:

а) личное представление об удобстве-неудобстве далеко не всегда объективны;
б) любая достаточно тщательно разработанная и обкатанная система в действительности достаточно удобна (нужно только привыкнуть к ней).
2
vlisp
600 / 640 / 122
Регистрация: 10.08.2015
Сообщений: 2,785
Завершенные тесты: 1
30.07.2017, 10:26 7
Цитата Сообщение от Catstail Посмотреть сообщение
Как глупа система B! В ней трудно сделать это и вот это! А в родной системе А я все это легко делаю...
Любая система оценивается по трем основным параметрам:
- функциональность;
- удобство;
- расширяемость.
Они определяют порог входимости и распространенность. Причем в удобство в ходит и настраиваемость системы под конкретного пользователя.
0
budden
198 / 99 / 4
Регистрация: 16.08.2015
Сообщений: 193
30.07.2017, 15:24 8
Цитата Сообщение от Catstail Посмотреть сообщение
а) личное представление об удобстве-неудобстве далеко не всегда объективны;
б) любая достаточно тщательно разработанная и обкатанная система в действительности достаточно удобна (нужно только привыкнуть к ней).
Это верно, но системы всё равно бывают разные и пропаганда тоже существует.
0
30.07.2017, 15:24
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2017, 15:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проблемы в SLIME
Здравствуйте. Только начал изучать язык Lisp, установил Emacs, SLIME; разобрался с простейшими...

CLISP vs SBCL
Озадачили написать доклад на пару листов. Кто-нибудь из профи может помочь привести пару примеров с...

Sbcl windows
Здравствуйте. sbcl windows - как в этой среде создать файл и сохранить его? Скиньте пожалуйста...

Clojure Объясните как в emacs установить slime?
Или ссылку киньте хорошую посмотреть. А то изучил emacs. Но у меня clojure-box. Такой emacs у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.