Wygląda na to, że wszystkie nowe języki programowania lub przynajmniej te, które stały się popularne, korzystają z wnioskowania o typach. Nawet Javascript dostał typy i wnioskowanie o typach przez różne implementacje (Acscript, maszynopis itp.). Wygląda mi to świetnie, ale zastanawiam się, czy są jakieś kompromisy lub dlaczego powiedzmy, że Java lub stare dobre języki nie mają wnioskowania typu
- Deklarując zmienną w Go bez określania jej typu (używając var bez typu lub składni: =), typ zmiennej jest wywnioskowany z wartości po prawej stronie.
- D umożliwia pisanie dużych fragmentów kodu bez zbędnego określania typów, tak jak robią to języki dynamiczne. Z drugiej strony, wnioskowanie statyczne dedukuje typy i inne właściwości kodu, dając to, co najlepsze zarówno ze świata statycznego, jak i dynamicznego.
- Silnik wnioskowania typu w Rust jest dość inteligentny. Robi więcej niż patrzenie na typ wartości r podczas inicjalizacji. Wygląda również, jak zmienna jest później używana do wnioskowania o jej typie.
- Swift korzysta z wnioskowania o typie, aby opracować odpowiedni typ. Wnioskowanie typu umożliwia kompilatorowi automatyczne wydedukowanie typu określonego wyrażenia podczas kompilowania kodu, po prostu poprzez sprawdzenie podanych wartości.
var
i C ++ auto
) i wnioskowanie o typie (dwukierunkowe, jak Haskell let
). W pierwszym przypadku typ nazwy można wywnioskować tylko z jego inicjatora - jego użycie musi być zgodne z typem nazwy. W tym drugim przypadku typ nazwy można również wywnioskować z jego użycia - co jest użyteczne, ponieważ można pisać po prostu []
dla pustej sekwencji, niezależnie od typu elementu, lub newEmptyMVar
dla nowego, zmiennego odwołania, niezależnie od odnośnika rodzaj.
var
ponieważ może to czasem zaszkodzić czytelności.