LINUX.ORG.RU

Как вы дебажите код написанный на этих ваших чистых ФП языках?

 , ,


0

4

Есть какие нибудь гайдлайны? Как писать реальный код (не расчет факториала и числа Фибоначчи), который потом будет легко отлаживать?

В лиспах например могу куда угодно воткнуть PRINT, перекомпилировать проблемную функцию, запустить и посмотреть, что там происходит в репле + есть хороший дебаггер.

ну для хаскеля есть волшебный Debug.Trace ссылка (гуглится кстати на раз-два по haskell debug print).

Вот эта страничка содержит кое какое описание https://wiki.haskell.org/Debugging

Плюс есть пошаговый отладчик https://downloads.haskell.org/~ghc/7.4.1/docs/html/users_guide/ghci-debugger....

Я много не пользовал, но и трейс и отладчик пробовал на простых задачах. Работают как обычно совершенно. Выручают оба.

В идрис - не знаю.

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 2)
Ответ на: комментарий от mimimimi

ну, гипотетически, не вижу проблем чтобы нельзя было сделать debug.trace в идрис. ну и собственно гуглёж дал моментально https://github.com/idris-lang/Idris-dev/blob/master/libs/base/Debug/Trace.idr

судя по типу, пользоваться так же как хаскелевским. т.е. по идее можно почитать доку по хаскелевсокму и попробовать его. а затем идрис по аналогии.

но я не пробовал.

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от vlad9486

Нужен. Debug.Trace много раз меня выручал

dave ★★★★★
()
Ответ на: комментарий от aedeph_

Ага, в ФП никогда не бывает ошибок.

Нет кода - нет ошибок.

anonymous
()

для эрланга есть ряд отличных инструментов - только освоить emacs

anonymous
()

Конечно, удивительно, но в haskell еще и прекрасные профилировщики, как по памяти, так и по трассировке функций! Бывает, время от времени использую.

Зачем в языке ФП такое, не скажите?

dave ★★★★★
()

сначала пишешь и отлаживаешь на питоне, потом транслируешь в хаскель

MyTrooName ★★★★★
()
Ответ на: комментарий от vlad9486

Мне кажется что это не нужно в ФП, особенно если типизация статическая

Да. «Дебаггер» вывода типов нужен больше. А лучше не «дебаггер», а «фиксер» кода, чтобы он проходил тайпчек.

utf8nowhere ★★★
()
Ответ на: комментарий от vlad9486

Нужно. Порой даже полноценный дебаггер нужен. Не раз пользовался встроенным в ghci дебаггером.

nezamudich ★★
()

Никак ФП языки для тролинга в интернете, а не для работы

anonymous
()

Зачем дебаг? Просто построй математическую модель!

itn ★★★
()

Не знаю, как там в чистых функциональных, но использую #trace

olibjerd ★★★★★
()
Ответ на: комментарий от AndreyKl

Пжл. Если попробуешь идрисовский - отпишись, пжл, всё ли гладко. Любопытно.

Debug.Trace.trace работает, но не так удобно, как в лиспах, но для отладки пойдет.

mimimimi
() автор топика
Ответ на: комментарий от AndreyKl

Вообще Идрисовцы правильным путем пошли, когда сделали расшираемый кодогенератор: паразитировать на модных и молодежных технологиях с кучей библиотек и вылизанными рантаймами — JavaScript и JVM 😂 а для олдскульщиков есть референсный сишный рантайм 😎

mimimimi
() автор топика
Ответ на: комментарий от mimimimi

Вообще Идрисовцы правильным путем пошли, когда сделали расшираемый кодогенератор: паразитировать на модных и молодежных технологиях с кучей библиотек и вылизанными рантаймами — JavaScript и JVM 😂 а для олдскульщиков есть референсный сишный рантайм 😎

Это точно, идея выглядит крайне привлекательной, и, судя по idris-jvm - она ещё и работает! :)

Правда, конечно нужно писать обёртки. Мне не совсем понятно в общем случае как это делать красиво для объектов (я сильно не вникал). Но что как то можно, это явно, а значит нам доступен весь «богатый внутренний мир» java, а это - хорошие библиотеки на все случаи жизни, если уж не опенсорсные то коммерческие, кажется, можно найти всегда.

Что до яваскрипта, то там конечно не так всё радужно - много то оно много, но качество не всегда блещет. Но на первое время всё равно большое дело.

Так или иначе, идея хорошая, но поглядим, что выйдет.

AndreyKl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.