Biorąc pod uwagę, że implementacja generycznych CLR obsługuje więcej funkcji niż maszyny JVM, takie jak reifikacja, a generyczne maszyny JVM to tylko Java "compiler trick", dlaczego typy wyższego typu nie są możliwe w języku F #, ale są możliwe w Scali? Czy implementacja generycznych CLR w jakiś sposób staje na drodze do rzeczy, podczas gdy brak maszyny JVM pozwala ci pójść dalej, niż zamierzali projektanci; podobnie jak języki dynamiczne pozwalają robić sztuczki, które uniemożliwiłyby mocno napisany kompilator?Rodzaje wyższych typów - dlaczego możliwe Scala, ale nie F #?
Odpowiedz
Zasadniczo nie jestem pewien, czy istnieje coś, co powstrzymuje F # przed dodaniem wyższych typów; CLR nie wspiera ich natywnie, więc potrzebna byłaby bardziej pośrednia strategia kompilacji, ale tak też jest w przypadku Scala w JVM. To może, ale nie musi, być bardziej skomplikowane, aby zrobić to na rekrystowanych generycznych CLR, ale podejrzewam, że powód, dla którego F # nie zawiera ich, jest bardziej filozoficzny. Chociaż typy o wyższym typie byłyby przyjemne, projekt F # zwykle faworyzuje proste funkcje, które dobrze współdziałają z innymi językami .NET; typy wyższego rodzaju prawdopodobnie wymagałyby znacznego wysiłku w celu dodania do języka, skomplikowałyby wnioskowanie typu i inne części języka i na pewno nie współdziałałyby dobrze z C# i innymi językami .NET, więc koszty (w tym koszty alternatywne) były prawdopodobnie postrzegane jako przewyższają korzyści.
Czy typy o wyższych typach zdefiniowane w Scali nie współdziałają z Javą? – lobsterism
@Lobsterism - Nie jestem ekspertem od Scala, ale ponieważ system typu Java nie obsługuje ich, nie jestem pewien, jak mogli. – kvb
Lepiej? Niewątpliwie.
Jedyną różnicą, o której wiem, jest funkcja generycznych nazwana "specjalizacja". Jest dostępny pod kontrolą programistów w Scali. Więc ... Muszę powiedzieć, że można udowodnić, że Scala jest "lepsza".
Scala * jest * lepsza, to właśnie mówię, ale zastanawiam się, dlaczego nie jest to możliwe w F #, gdy CLR ma mocniejszy system typów w porównaniu z JVM. – lobsterism
@Lobsterism Java i JVM to nie to samo ... W ten sposób scala może mieć "silniejszy" system pisania w porównaniu do java, ale obie używają tej samej maszyny JVM! – korefn
W rzeczywistości "specjalizacja" Scali ujawnia krótkie przyjście JVM: typy prymitywne są poza hierarchią obiektów, a typy ogólne nie są reifikowane. Z drugiej strony, .NET i F # mają 'ValueTypes', które są częścią hierarchii obiektów, mając jednocześnie wszystkie zalety wydajności prymitywów JVM. Co oznacza typ 'List
- 1. Wyświetl ograniczenia dotyczące typów wyższych typów
- 2. wyjaśnienie typów objaśnienia scala f
- 3. Jakie są ograniczenia wnioskowania typów wyższych typów w Scali?
- 4. Dlaczego B :: f nie rozwiązuje dwuznaczności, ale A :: f nie?
- 5. niejawny rozdzielczości parametr dla wyższych typów kinded
- 6. Jak wyrazić ograniczenia typu dla typów wyższych typu
- 7. Dlaczego nie mogę utworzyć F-ograniczony obiekt w Scala
- 8. szeregowania F # typów opcji
- 9. Czy to możliwe (Alternatywne f, Składane f) => Monad f?
- 10. Nulls in Scala ... dlaczego jest to możliwe?
- 11. f # ogólne porównanie typów
- 12. Dlaczego nie jest możliwe określenie domyślnej wartości parametru varaliS Scala?
- 13. Prywatna modyfikator dla F # typów
- 14. Dlaczego Scala nie ma decltype?
- 15. Wyrażanie typów egzystencjalnych w F #
- 16. Możliwe F # Interactive PInvoke bug
- 17. Deklarowanie typów wewnętrznych w F #
- 18. Dlaczego Scala Map jest automatycznie importowana, ale HashMap nie jest?
- 19. Zmiękczanie z „elastycznych typów” w F #
- 20. f #: kodowanie parzystych i nieparzystych typów (indukcyjnych)?
- 21. Czy możemy zdefiniować w systemie Scala funkcję tożsamości o wyższych poziomach na typie?
- 22. Kolekcje Java. Dlaczego nie ma typów pierwotnych?
- 23. Dlaczego Scala definiuje operator "+ =" dla typów krótkich i bajtowych?
- 24. więzów rodzaje: przekazać wiele ograniczeń
- 25. Dlaczego funkcja F # nie zapewnia niestandardowego przeciążenia dla operatora ==?
- 26. Dlaczego te dwa rodzaje danych są różne?
- 27. Scala: czy istnieje sposób tworzenia typów wbudowanych?
- 28. Dlaczego potrzebujemy "algebraicznych typów danych"?
- 29. Implementowanie typów fantomowych w języku F #
- 30. Typ kolekcji F dla typów mieszanych
Dlaczego to się zamknęło? Naprawdę nie rozumiem tego wyjaśnienia. Dostarczam fakty, zadaję pytanie, które ma merytoryczną odpowiedź. Ktoś zdawał się zaskoczyć na słowo "lepsze", jak pierwotnie zadeklarowano to pytanie, i stworzył odpowiedź argumentacyjną, ale nie o to chodziło. Czy ludzie szukają słów kluczowych typu "lepiej" i głosują, aby zamknąć a priori? – lobsterism