2010-04-21 9 views

Respuesta

20

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:

  1. sobrecarga estática de métodos
  2. Tener ambos rasgos y clases
  3. inclusión de null punteros.
+0

Excelente referencia. +1 – VonC

26

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:

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
+0

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

3

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.

+0

+1 para igualdad universal y hash. ¿Qué pasa con el 'toString' universal? – missingfaktor

+0

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

+0

Bien. Gracias por la respuesta. – missingfaktor

Cuestiones relacionadas