Статическая проверка типов в эрланге - PullRequest
7 голосов
/ 14 декабря 2011

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

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

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

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

Ответы [ 4 ]

12 голосов
/ 14 декабря 2011

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

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

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

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

4 голосов
/ 17 января 2014

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

Однажды Фил позвонил мне и объявил, что а) Эрлангу нужна система типов, б) он написал небольшой прототип системы типов и в) у него была однагод отдыха и собирался написать систему типов для Эрланга и «были ли мы заинтересованы?» Ответ - «Да».

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

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

4 голосов
/ 14 декабря 2011

отметьте Диализатор инструмент

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

3 голосов
/ 15 декабря 2011

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

...