play framework application scala jvm language-design scala-2.8 jvm-languages

framework - ¿Qué compromisos tiene Scala para ejecutarse en JVM?



play framework web server (3)

Scala es un lenguaje maravilloso, pero me pregunto cómo se podría mejorar si tuviera su propio tiempo de ejecución.
Es decir, ¿qué opciones de diseño se hicieron debido a la elección de JVM?


Este artículo es una discusión con Martin Odersky (el creador de Scala) e incluye los compromisos que se hicieron en Scala para la compatibilidad con Java. El artículo menciona:

  1. Sobrecarga estática de métodos
  2. Tener ambos rasgos y clases
  3. Inclusión de punteros null .

Menos un problema con el tiempo de ejecución que una resaca cultural: igualdad universal, hashing, toString.

Más profundamente vinculado a la máquina virtual: estricta evaluación por defecto, funciones impuras, excepciones.


Los dos compromisos más importantes que conozco son:

  • tipo borrado (" reflejo en Tipo "): Tiene que gestionar un Manifiesto para evitar la compilación de Java (independientemente de la JVM, por razones de compatibilidad con versiones anteriores).
  • colección de tipo primitivo: p. ej .: matrices

    nuevo esquema de manejo de matrices en Scala 2.8. En lugar de boxeo / unboxing y otra magia de compilación, el esquema se basa en conversiones implícitas y manifiestos para integrar matrices

Esas son las dos limitaciones principales de JVM, cuando se trata de administrar el tipo genérico (con límites): Java JVM no mantiene el tipo exacto de uso en un objeto genérico, y tiene tipos "primitivos".

Pero también podrías considerar:

Para cubrir tantas posibilidades como sea posible, Scala proporciona:

  • Tipos de clases convencionales,
  • Tipos de clase de valor,
  • Tipos no anulables,
  • Tipos de mónadas,
  • Tipos de rasgos
  • Tipos de objeto Singleton (módulos de procedimiento, clases de utilidad, etc.),
  • Tipos compuestos,
  • Tipos funcionales
  • Clases de casos
  • Tipos dependientes de ruta,
  • Tipos anónimos
  • Tipos propios,
  • Escriba alias,
  • Tipos genéricos
  • Tipos genéricos covariantes,
  • Tipos genéricos contravariantes,
  • Tipos genéricos limitados,
  • Tipos abstractos
  • Tipos existenciales
  • Tipos implícitos
  • Tipos aumentados
  • Ver tipos acotados, y
  • Tipos estructurales que permiten una forma de tipaje de pato cuando falla todo lo demás