Система Эрланга - PullRequest
       40

Система Эрланга

10 голосов
/ 10 февраля 2009

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

1. -specs - этот выглядит довольно привлекательно. в некоторых местах упоминается, что функции, с которыми связана директива -specs, проверяются во время компиляции (для правильного использования типов) ... Кажется, я не могу найти больше информации о том, как его использовать (какой инструмент использовать - Dialyzer, TypeR?). Я действительно хочу создать небольшой синтаксический анализатор / генератор кода, который бы генерировал эти "спецификации" из объявлений функций вида

functionName(param1 :List, param2 :Tuple) -> ...

Я не видел, поддерживает ли -spec абстрактные типы (объявленные пользователем типы - тип "Car" -

{car,{weight,_},{height,_},{maxSpeed,_}}

2. -deftype директива , упомянутая здесь

Эрланг стал бы для меня намного более мощным, если бы я мог начать набирать вещи и проверять их во время компиляции. Во время выполнения парсер / code-gen, о котором я упоминал выше, генерирует проверки типа защиты в выходном исходном коде.

Ответы [ 3 ]

14 голосов
/ 10 февраля 2009

Больше информации о типе и спецификационных атрибутах здесь:

http://www.erlang.org/eeps/eep-0008.html

Диализатор можно использовать для их проверки (см. dialyzer --help).

Для их генерации можно использовать Typer (см. typer --help).

3 голосов
/ 07 июня 2011

Посмотрите на http://learnyousomeerlang.com/types-or-lack-thereof (очень чистое объяснение) и ссылка здесь: http://erlang.org/doc/reference_manual/typespec.html

1 голос
/ 11 февраля 2009

Проверка типов во время компиляции с Erlang не закончена. Вместо этого используйте Dialyzer, который выполняет проверку типов после компиляции.

Способ, которым вы создаете «пользовательские типы», заключается в использовании тегированных кортежей, как вы предлагаете. Dialyzer проверит пути кода, чтобы определить те, которые МОГУТ в конечном итоге создать возвращаемые функции, которые не срабатывают.

Чтобы диализатор работал лучше всего, вы должны принять 'let if fail' и писать только те предложения, которые соответствуют ожидаемым результатам - избегайте конструкций 'else', которые всегда совпадают, и нескольких других лучших практик.

Вы должны документировать свои функции с помощью edoc. Диализатор использует спецификацию типа системы документов, чтобы определить типы для вас. Руководство по edoc можно найти здесь .

...