Подтвердить что ты не робот

Любой опыт реального мира отлаживает производственную функциональную программу?

Мне интересно, какие инструменты и методы используются для диагностики недостатков в крупномасштабных функциональных программах. Какие инструменты полезны? Мое настоящее понимание заключается в том, что отладка "printf" (например, добавление журнала и повторное развертывание) - это то, что обычно используется.

Если вы сделали отладку функциональной системы, что было по-другому, тогда отладка системы, построенной с помощью OO или процедурного языка?

4b9b3361

Ответ 1

К сожалению, отладка printf, по-видимому, является состоянием практики для стандартного ML, Objective Caml и Haskell. Там немного отладки в интерактивном режиме чтения-eval-print, но как только ваше приложение попадает на 25 000 или 50 000 строк, которые менее полезны.

Если вам посчастливилось использовать Haskell, , там исключение: QuickCheck является незаменимым для тестирования и дезинфекции. QuickCheck можно использовать даже в комбинациях кода Haskell и C, о чем свидетельствует опыт работы с диспетчером окон Xmonad.

Стоит отметить, что в 1990 году Андрей Толмах построил очень хороший отладчик времени для стандартного ML Нью-Джерси, но его не считали целесообразным. Стоит также отметить, что в какой-то момент отладчик OCaml (также отладчик во времени) работал только на байт-коде, который был неудобным и отказался нарушать барьеры абстракции, что сделало его бесполезным. Это было вокруг выпуска 3.07 или около того; возможно, вещи улучшились.

Также в начале 1990-х годов Хенрик Нильссон создал интересный отладчик для Haskell, но в основном это помогло отладчику случайно изменить оценочное поведение программы. Это было интересно, но только для lavzy-оценки weenies.

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

Ответ 2

Основными инструментами, которые мы используем на работе (магазин Haskell), являются:

  • QuickCheck
  • HPC: визуальный инструмент для охвата программ Haskell (мы разработали это в доме)
  • Logging/Printf/след
  • Иногда отладчик GHCi

Ответ 3

Моя текущая задача - реализовать новые функции и поддерживать большую систему, реализованную в ocaml и С#. Большая часть "логики" реализована в caml, а GUI и доступ к данным - в С#. Методы отладки в значительной степени связаны с тем, как вы описываете много протоколирования и утверждаете, чтобы понять, что пошло не так.

Кроме того, у нас есть большое количество модульных тестов, которые являются просто скриптами для проверки логики и помогают выявлять любые ошибки регрессии.

Мы также используем непрерывную интеграцию для проверки сценариев сборки и запуска ночных тестов, включая некоторые автоматизированные проверки графического интерфейса, но наш интерфейс сценариев стиля "автоматизации".

Я довольно часто использую отладчик С# для отладки части С# приложения, отладчик ocaml все еще работает под окнами, поэтому мы его не используем. Хотя мы надеемся, что однажды мы сможем это исправить, но это не верхний список приоритетов. Я иногда использовал windbg для исследования проблем с управляемой и неуправляемой памятью, хотя это оказалось вызвано сторонним компонентом, реализованным на С#.

В общем, ничего необычного, но, похоже, все в порядке, мы не видим слишком много производственных проблем.

Спасибо, Rob

Ответ 4

F # имеет интеграцию с Visual Studio, поэтому вы можете присоединить отладчик к своей программе и установить точки останова, часы и т.д., как и с любым другим языком .NET.

Однако я предпочитаю избегать отладки как можно больше, написав короткие функции, которые я могу индивидуально тестировать.

Ответ 5

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

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

Ответ 6

OCaml и F # имеют отличные отладчики. OCaml обратим время. F # имеет отличную поддержку IDE и многопоточности.