отладчики для функц. языков
Slime тут не причем. Лисп сам по себе такой, при любой ошибке вываливается в repl, откуда ты можешь сделать что угодно.
Да, перепутал.
Я немного работал с SBCL и CLISP, и оба предоставляют некоторые, весьма юзабельные средства для отладки программ. IMHO такая вещь как REPL - это очень правильно, сильно упрощает и ускоряет разработку и отладку программ. Хотелось бы что-то аналогичное для других языков.
Честно говоря, ситуация c ocamldebug немного непонятная. На таких языках как SML, OCaml написана куча софта, причем весьма сложного софта. Неужели все авторы обходятся без нормальных отладчиков и используют костыли типа printf? IMHO должно же быть какое-то средство.
Я немного работал с SBCL и CLISP, и оба предоставляют некоторые, весьма юзабельные средства для отладки программ. IMHO такая вещь как REPL - это очень правильно, сильно упрощает и ускоряет разработку и отладку программ. Хотелось бы что-то аналогичное для других языков.
Честно говоря, ситуация c ocamldebug немного непонятная. На таких языках как SML, OCaml написана куча софта, причем весьма сложного софта. Неужели все авторы обходятся без нормальных отладчиков и используют костыли типа printf? IMHO должно же быть какое-то средство.
> Неужели все авторы обходятся без нормальных отладчиков
Вообще говоря, можно обойтись тестированием. То есть, REPL.
По распечатке стека должно быть видно, что надо тестировать:
либо более глубокие уровни, либо вызывающие функции.
---
...Я работаю антинаучным аферистом...
Вообще говоря, можно обойтись тестированием. То есть, REPL.
По распечатке стека должно быть видно, что надо тестировать:
либо более глубокие уровни, либо вызывающие функции.
---
...Я работаю антинаучным аферистом...
> По распечатке стека должно быть видно, что надо тестировать:
> либо более глубокие уровни, либо вызывающие функции.
Что делать, если отладчик не показывает стек в момент возникновения ошибки, как например ocamldebug?
> либо более глубокие уровни, либо вызывающие функции.
Что делать, если отладчик не показывает стек в момент возникновения ошибки, как например ocamldebug?
> Что делать, если отладчик не показывает стек в момент возникновения ошибки, как например ocamldebug?
Не использовать его?
А что он умеет, этот отладчик?
Хоть что-нибудь он печатает?
Вообще говоря, достаточно знать стек возвратов.
---
...Я работаю антинаучным аферистом...
Не использовать его?
А что он умеет, этот отладчик?
Хоть что-нибудь он печатает?
Вообще говоря, достаточно знать стек возвратов.
---
...Я работаю антинаучным аферистом...
> Не использовать его?
Поиск в Google не нашел для OCaml каких-либо других отладчиков
> А что он умеет, этот отладчик?
Сложно сказать. Легче сказать, чего он не умеет. (См. первый пост, пункты 2,3,4,5).
Поиск в Google не нашел для OCaml каких-либо других отладчиков

> А что он умеет, этот отладчик?
Сложно сказать. Легче сказать, чего он не умеет. (См. первый пост, пункты 2,3,4,5).
Я и говорю, что из приведённого нужно только часть "3,"
именно --- умение показывать стек вызовов и выбрасывать в REPL.
Может быть, это не отладчик?
То есть, это могут быть средства отладки ядра интерпретатора.
---
...Я работаю антинаучным аферистом...
именно --- умение показывать стек вызовов и выбрасывать в REPL.
Может быть, это не отладчик?
То есть, это могут быть средства отладки ядра интерпретатора.
---
...Я работаю антинаучным аферистом...
UP! Вопрос очень актуален!
Неужели из всего форума никто не прогал на OCaml или Haskell? Почему все молчат?
Неужели из всего форума никто не прогал на OCaml или Haskell? Почему все молчат?
// Неужели из всего форума никто не прогал на OCaml или Haskell? Почему все молчат?


Наутро, еще до открытия давилонской баржи, в газете "Давилонские юморески" появилась статья, в которой объяснялись причины молчания Спрутса. В статье писалось, что Спрутс молчал, так как было смешно отвечать на какие-то нелепые, сумасбродные обвинения. Как мог господин Спрутс подрывать доверие к Обществу гигантских растений, в то время как никакого такого общества и на свете-то нет? -- спрашивалось в статье.
Я писал кое-чего. На Хаскелле отладчик - это существенная проблема, ввиду его ленивости. Что-то пытаются сделать, но пока без особого успеха. На ОКамл отладчик в смысле С/С++ был не так уж и нужен. Переменных нет, многие ошибки ловятся системой типов, так что printf было достаточно. Большинство ошибок и было типа, что функция, которая должна была что-то обрабатывать вернула тривиальное значение или возник exception, отсюда можно было сделать вывод, что функция неправильная и путем логических умозаключений найти ошибку. В отличии от С отлаживать можно сразу после написания функции, а поскольку сторонних эффектов нет, то функция после отладки уже работала на 95%.
Для Scheme есть отладчик, в комплекте с DrScheme идёт, вроде.
Есть даже т.н. "Portable Scheme Debugger", но вопрос ставится про семейство ML.
Для семейства LISP отладчик --- дело обычное.
---
...Я работаю антинаучным аферистом...
Для семейства LISP отладчик --- дело обычное.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Landstreicher
Какие существуют отладчики для функциональных языков? Под отладчиком понимается программа, способная:1) ставить точки останова, в том числе условные, на функции или строки кода
2) наблюдать содержимое сложных структур данных, в том числе векторов, деревьев, хэштаблиц
3) при возникновении ошибки или исключения типа деления на 0, выхода за границы массива и падения в assert, показывать полный дамп стека, включая функцию, которая вызвала исключение
4) вычислять значение выражений, в том числе включая вызовы функций из программы
5) при наличии в языке переменных (по типу ref или mutable в OCaml):
ставить watchpoint на переменные и менять их значение
6*) (при работе с несколькими потоками) управлять потоками, ставить точки останова так, чтобы при попасть в них можно было из любого потока
Один такой знаю - Slime для Lisp (м.б. не все 100%, но основная функциональность есть --- работать в целом можно).
Пробовал ocamldebug - не умеет 2,3,4,5.
Еще кто-нибудь с чем-нибудь работал?
PS. Если знаете про хороший отладчик, но не для функциональных языков --- тоже напишите, может быть интересно.