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

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

Каковы сходства и различия между типизирующими функциями в Typed Racket и типами функций в Clojure?

Ответы

Ответ 1

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

Изменить: У Racket теперь generics, которые похожи на протоколы Clojure.

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

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

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

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