Scala es un lenguaje maravilloso, pero me pregunto cómo se podría mejorar si tuviera su propio tiempo de ejecución.
I.e. ¿Qué opciones de diseño se hicieron debido a la elección de JVM?¿Qué compromisos tiene Scala para ejecutarse en JVM?
Respuesta
This article es una discusión con Martin Odersky (creador de Scala) e incluye los compromisos que se hicieron en Scala para la compatibilidad con Java. El artículo menciona:
- sobrecarga estática de métodos
- Tener ambos rasgos y clases
- inclusión de
null
punteros.
Los dos compromisos más importantes que conozco son:
- type erasure ("reflecting on Type"): Tiene que manage a Manifest para moverse por la compilación de Java (JVM independiente de la, por razones de compatibilidad con versiones anteriores).
- colección de tipo primitivo: por ejemplo .: arrays
nuevo esquema de manejo de arrays en Scala 2.8. En lugar de boxeo/unboxing y otra magia compilador del esquema se basa en las conversiones implícitas y manifiestos para integrar las matrices
Esas son las dos principales limitaciones de JVM, cuando se trata de administrar tipo genérico (con límites): El Java JVM no mantiene el tipo exacto de uso en un objeto genérico, y tiene tipos "primitivos".
Pero también se podría considerar:
- optimización de llamada se not yet full supported by the JVM, era hard to do anyway (y aún Scala 2.8 introduce the
@tailrec
annotation) - UAP (universal Access Principle) debe ser emulado (no es compatible con Java) , y será pronto completed for Value Holder (
@proxy
) - todo el mecanismo de mezcla también necesita ser emulado
- mor e Generalmente, el huge number of static types introducido por Scala necesidad (para la mayoría de ellos) para ser generada en Java:
Con el fin de cubrir tantas posibilidades como sea posible, Scala dispone:
- clase convencional tipos,
- tipos de clase de valor,
- tipos Nonnullable,
- tipos Monad,
- Tipos de características,
- Tipos de objetos singleton (módulos de procedimientos, clases de utilidad, etc.),
- tipos de compuestos,
- tipos funcionales,
- clases de casos,
- tipos en función del recorrido,
- Los tipos anónimos,
- tipos autónomos,
- alias Tipo,
- genéricos tipos,
- tipos genéricos covariantes,
- Cont tipos genéricos ravariant,
- tipos acotadas genéricos,
- tipos abstractos,
- tipos existenciales,
- tipos implícitos,
- tipos aumentada,
- Ver tipos delimitadas, y
- tipos estructurales, que permiten una forma de mecanografiar pato cuando todo lo demás falla
Nota para usted: esa lista de tipos está detallada (con enlaces) en http://stackoverflow.com/questions/3112725/advantages-of-scalas-type-system/3113741#3113741 – VonC
Menos un problema con el tiempo de ejecución que una resaca cultural: universal equality, hashing, toString.
Más profundamente ligada a la máquina virtual: por estricta evaluación por defecto, las funciones impuras, excepciones.
+1 para igualdad universal y hash. ¿Qué pasa con el 'toString' universal? – missingfaktor
1) Es fácil mostrar accidentalmente 'Object # toString' a un usuario. 2) 'Colección [A] # toString' es inflexible en la forma en que muestra los elementos del tipo' A'. Ver 'scalaz.Show' para una alternativa. – retronym
Bien. Gracias por la respuesta. – missingfaktor
- 1. ¿por qué jvm tiene muchos clasloaders? ¿por qué no uno?
- 2. ¿Scala funciona bien en las JVM propietarias?
- 3. erlang vs jvm (scala) rendimiento de recursión
- 4. ¿Qué requiere un programa C++ para ejecutarse?
- 5. ¿Qué ventajas tiene Scala sobre Java para la programación simultánea?
- 6. ¿Aumenta el tamaño del almacenamiento dinámico de JVM para Scala?
- 7. Trading de alta frecuencia en la JVM con Scala/Akka
- 8. Cómo aprobar compromisos en Github
- 9. ¿Cómo se ejecuta scala bytecode en el jvm?
- 10. Cómo alentar más compromisos frecuentes para SVN
- 11. ¿Qué aspecto tiene el futuro para los Applets de Java?
- 12. ¿Por qué fold tiene el siguiente tipo en Scala?
- 13. semántica recursivas sobrecarga en el Scala REPL - idiomas JVM
- 14. ¿Scala tiene guardias?
- 15. ¿Por qué no Rhino para aplicaciones JVM?
- 16. OCaml para JVM. ¿Hay alguna?
- 17. ¿Cuándo se activa realmente PreApplicationStartMethod para ejecutarse?
- 18. ¿Por qué Scala no tiene una Monad de IO?
- 19. ¿Por qué Scala tiene muy poco entusiasmo al respecto?
- 20. ¿Qué ventajas tiene Ceylon sobre Java o Scala?
- 21. ¿Por qué el BigDecimal de Scala no tiene un CERO?
- 22. Compromisos múltiples antes de presionar
- 23. Compromisos de referencias cruzadas en github
- 24. ¿Se puede compilar un programa Scala para ejecutar en cualquier JVM, sin tener Scala instalado en la máquina determinada?
- 25. ¿Qué viene para scala en 2.10?
- 26. ¿Qué ensambladores de JVM hay?
- 27. lsof contraparte para una JVM?
- 28. ¿Deberían ejecutarse todos estos subprocesos predeterminados? Y mantienen mi JVM con vida?
- 29. ¿En qué dirección comienza a ejecutarse el x86?
- 30. Haciendo sin compromisos parciales la "vía Mercurial"
Excelente referencia. +1 – VonC