Perché i generici in Scala hanno tipi cancellati e non sono modificabili?
È dovuto alla mancanza di supporto da parte della JVM o alla compatibilità con le librerie Java? Quali sono i vantaggi in generale di avere generici come reifiable?
Questi due sono solo indirettamente correlati.
Scala ha scelto di girare sulla JVM per sfruttare la portabilità e la enorme quantità di librerie e framework che questo ti compra. Ciò gli diede un vantaggio su molti altri nuovi linguaggi alla moda, e potrebbe anche essere stata una mossa intelligente culturalmente: sebbene molte nuove forme di espressione siano possibili nella lingua, molti programmatori Java esistenti apprezzavano il fatto che il linguaggio fosse più potente, ma non del tutto a differenza di Java, e ha iniziato ad usare il linguaggio in anticipo.
Il prezzo da pagare per questo è che devi rispettare i limiti della VM sottostante, e sì, tra gli altri, significa che non ci sono tipi generici reificati. Il tempo dirà se il trade-off è valso la pena o se rompere con la tradizione più radicalmente sarebbe stato migliore nel lungo periodo. (Si noti che l'obiettivo di Java era "trascinare circa metà dei programmatori C ++ a metà strada rispetto a Common Lisp" ( Guy Steele ), il che significava che era necessario riutilizzare la vecchia sintassi di tipo C. La storia si sta ripetendo.)
Leggi altre domande sui tag programming-languages type-systems scala generics