система типов не рассказывает всю историю из-за «исключения» - PullRequest
1 голос
/ 24 июля 2011

Мой вопрос должен быть несколько расплывчатым и очень поверхностным.Сожалею.Но мне интересно, является ли это плохим стилем использования «исключения».Например, в Ocaml исключение не отображается как файл .mli.Поэтому мне кажется, что «исключение» - это то, что не может быть отслежено системой типов.

Итак, мой вопрос в общем заключается в том, использует ли исключение плохой стиль, потому что оно скрывает информацию о системе типов?

Конкретно, я пытаюсь реализовать средство проверки типов для обязательного языка, скажемПаскальОсновное суждение должно было иметь такую ​​подпись,

well-typed_1: environment -> statement -> unit

Но этого, по-видимому, недостаточно, поскольку среда будет изменена из-за объявления локальной переменной, поэтому более разумным интерфейсом для typechecker будет

well-typed_2: environment -> statement -> environment

Альтернативой может быть использование первого, хорошо типизированного_1, имеющего дело с объявлением локальных переменных через исключение Var_declaration (e: environment), которое возвращает обновленную среду в средство проверки типов для другой рекурсии.

Итак, мой вопрос для этого конкретного примера: должен ли я использовать исключение well-typed_1 + для объявления переменных или well-typed_2?

Недостаток well-typed_2, по-видимому, заключается в том, что для большинства операторов нет побочного эффекта в отношении среды типов, поэтому сигнатура well-typed_2 представляется немного избыточной.Недостаток исключения well_typed_2 +, по-видимому, выявляет общую проблему: подпись well-typed_1 in не рассказывает всей истории.(это не говорит о потенциальном исключении)

...