Статическая проверка типов в erlang

Я медленно влюбляюсь в Эрланга, и у меня только одна большая, большая проблема.

Я большой поклонник языков, таких как Standart ML и ocaml с их сильной статической проверкой типов.

есть ли хороший и чистый способ ввести somesort статической проверки типов в erlang. Я смотрю на -type и -spec Примечание.

у кого-нибудь есть хорошее решение?

4 ответов


Я был там! Я люблю и OCaml и Erlang и использую их регулярно.

к тому времени, когда я начал использовать Erlang, у меня был многолетний опыт работы с OCaml. Мне потребовалось несколько недель, чтобы приспособиться к тому, что в компиляторе нет статического typechecker. Но после этого боль полностью прошла.

в определенной степени, идти без typechecker является полезным упражнением. Для меня это был поучительный опыт, и действительно сделал меня лучше программист.

существует, однако, внешний статический typechecker для Erlang под названием Dializer. Я нахожу это очень полезным. Проблема с ним заключается в том, что вам нужно вызвать его отдельно, и это медленно. Запуск его время от времени (например, перед фиксацией кода или как части автоматизированных сборок) отлично работает. Я никогда не пробовал запускать его после каждой компиляции, так как это было бы слишком отвлекающим, чтобы ждать, пока он завершится.


Регистрация Диализатора инструмент

Диализатор-это инструмент статического анализа, который идентифицирует несоответствия программного обеспечения, такие как определенные ошибки типа, код, который стал мертвым или недостижимым из-за некоторой ошибки программирования, ненужных тестов и т. д. в одиночных модулях Erlang или всех (наборах) применениях.


на протяжении многих лет, были некоторые попытки построения систем типа верхней части Эрланг. Одна такая попытка была предпринята еще в 1997 году Саймон Марлоу, один из ведущих разработчиков Glasgow Haskell Компилятор, и Филипп Wadler, который работал на конструкции Haskell и имеет внес вклад в теорию монад (читайте статью об этом типе система.) Джо Армстронг позже прокомментировал статью:

Фил Уодлер и Саймон Марлоу работали над системой типов более года, и результаты были опубликовано в [20]. Результаты проекта были несколько разочаровывающий. Для начала, только подмножество языка было тип-проверяемый, основным упущением является отсутствие типов процессов и типа проверки межпроцессных сообщений.

http://learnyousomeerlang.com/types-or-lack-thereof


Я в основном использовать -spec и -type для целей документации: вы пишете спецификацию с -spec, затем проверьте его с помощью TypEr, а затем (после добавления дополнительной информации в формате edoc) создайте документацию