Каковы сходства и различия между типографскими функциями в Typed Racket и типоподобными функциями в Clojure? - PullRequest
15 голосов
/ 04 марта 2012

Clojure имеет несколько интересных функций для представления типов, включая, но не ограничиваясь, deftype, defprotocol, reify и extend.

Каковы сходства и различия между функциями набора текста в наборе типа "ракетка" и типографскими функциями в Clojure?

1 Ответ

17 голосов
/ 05 марта 2012

deftype и defprotocol определяют динамическое поведение в Clojure. В Racket мы будем делать такие вещи с struct или struct-property, хотя в Racket нет ничего похожего на defprotocol.

Редактировать: Ракетка теперь имеет универсальных , которые похожи на протоколы Clojure.

reify и extend, я думаю, соответствуют использованию make-struct-type в Racket, который динамически создает новые типы структур.

Большая разница между Typed Racket и всеми этими функциями заключается в том, что Typed Racket проверяет вашу программу статически - перед попыткой ее запуска. Вы никогда не сможете применить неправильный метод доступа в программе Typed Racket или использовать число в качестве функции. Вы даже не можете запустить программу, которая может иметь такую ​​ошибку.

В настоящее время функциями Clojure, которые больше всего похожи на Typed Racket, являются аннотации, которые он использует для повышения производительности.

Редактировать: Теперь есть Typed Clojure от Ambrose Bonnaire-Sergeant, который вдохновлен и основан на Typed Racket.

...