2015-05-07 7 views
1

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

С точки зрения программной инженерии существуют ли какие-либо практические преимущества для таких систем типа, помимо простого ограничения ограничений? Например, они могут облегчить рассуждения о проблемной области? Могут ли они сделать абстракции дизайна более гибкими/надежными перед лицом меняющихся требований? Могут ли они помочь справиться с сложностью в больших системах? и т.д ...

И если такие льготы существуют, мы можем как-то попытаться воспроизвести их в динамических языков, таких как Ruby, , Python или Clojure?

+0

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

+0

Пожалуйста, не голосуйте при закрытии этого вопроса, он не является широким, как может показаться на первый взгляд взгляд. Читатель может подумать о какой-либо одной выгоде (независимо от того, насколько она мала) и соответственно отдать свой ответ. –

+0

Я считаю, что большинство ваших примеров подпадают под категорию «просто принудительных ограничений» - с мощной системой типов вы можете (удобно) выражать гораздо более широкий диапазон ограничений, чем в меньших системах. – molbdnilo

ответ

2

«просто принуждение к ограничению» - ну, это точно точка. Вы хотите выразить спецификацию программы (и каждой подпрограммы) по ее типу. Тогда проверка типов фактически «обеспечивает правильность» (и это не просто). Haskell - это еще не конец, есть языки с более выразительными типами систем (Agda, Idris), где вы действительно можете достичь цели полностью выразить спецификацию.

Репликация на других языках - см., Например, Hack и TypeScript.

Примечание: прежде чем эксперты Haskell скажут меня о «более выразительном»: существует несколько (специфичных для компилятора) расширений системы типа Haskell (по отношению к зависимым типам), которые делают ее более выразительной. - «Полное» означает «как выразительное, как математическая логика», которое составляет универсальный язык спецификаций. Я оставлю это, если вам нужно больше, вы найдете его в документах и ​​книгах по теории и принципам языков программирования.