Jakiego rodzaju wnioskowania typu robi Typed Racket? Znalazłem następujący fragment na liście Rakieta do korespondencji:Jak działa typingowa kombinacja typów rakietowych?
The Typed Racket type system contains a number of features that go beyond what's supported in Hindley/Milner style type systems, and so we can't use that inference system. Currently, Typed Racket uses local type inference to infer many of the types in your program, but we'd like to infer more of them -- this is an ongoing area of research.
krótką informację powyżej stosuje się termin „miejscowy typ wnioskowania”, a ja również słyszałem „występowanie wpisując” używany dużo, ale nie wiem dokładnie jasne, co oznaczają te terminy.
Wydaje mi się, że system wnioskowania typu, który jest obecnie używany, jest niepotrzebnie słaby. Oto przykład tego, co mam na myśli. Następujące nie typ kontroli:
(struct: pt ([x : Real] [y : Real]))
(define (midpoint p1 p2)
(pt (/ (+ (pt-x p1) (pt-x p2)) 2)
(/ (+ (pt-y p1) (pt-y p2)) 2)))
Trzeba wyraźnie opisywanie midpoint
z (: midpoint (pt pt -> pt))
, w przeciwnym razie pojawia się błąd: Type Checker: Expected pt, but got Any in: p1
. Dlaczego weryfikator nie może z tego wywnioskować, że typy p1
i p2
muszą być pt
? Czy jest to podstawowe ograniczenie sposobu, w jaki Racket implementuje typy (tj. Czy ta linia rozumowania jest czasami błędna, z powodu niektórych bardziej zaawansowanych funkcji Racket'a), czy jest to coś, co mogłoby zostać wdrożone w przyszłości?
Sam Tobin-Höchstadt Doktorat Rozprawa powinna mieć drastyczne szczegóły: http://www.ccs.neu.edu/racket/pubs/dissertation-tobin-hochstadt.pdf – dyoo