Java después de la erupción volcánica

Algún empleador sarcástico me pidió que mejorara Java, y aunque no soy el presidente de Indonesia, simplemente me fui rápidamente para quedar perplejo accidentalmente durante medio día. Me gustaría así. El principio general es la máxima simplificación sin pérdida de control lógico. Para esto, obviamente, es necesario no solo agregar al idioma lo que no estaba allí, sino también eliminar del idioma mucho de lo que estaba allí, continuando con la buena tradición de C--.


  1. Posibilidad de devolver más de un resultado de una función.
  2. Los valores predeterminados de los campos primitivos deben declararse explícitamente. Elimine el modificador "estático" del lenguaje, como estático, la instancia predeterminada, accesible por referencia al nulo escrito. Llámelo todo "instancia predeterminada". La posibilidad del modificador "abstracto" para los campos, lo que significará tanto la incapacidad de crear una instancia de la clase como la necesidad de especificar el valor predeterminado de este campo en el descendiente de la clase.
  3. Para los campos "protegidos", "predeterminados" y "públicos", los compiladores y captadores se generan automáticamente por el compilador, sin generación automática de clases visibles, pero con la posibilidad de sobrecargarlos, "privado" se elimina del lenguaje, ya que los "campos" en sí serán "privados" sin capacidades de sobrecarga. Agregue "local" - sobre esto en el párrafo 8.
  4. Generación automática de interfaces públicas de todos los campos "públicos" de la clase, así como un nuevo tipo de protección, etc. interfaces de los campos correspondientes al modificador. Los tipos de clase se comparan por código hash, que se generará por nombres de campo, nombres de argumentos, tipos y valores de retorno, ya que la probabilidad de que todo esto coincida es insignificante y se puede detectar en tiempo de compilación con advertencias.

    Por lo tanto, "interfaz" como tal ya no es necesaria, solo "clase", "resumen" es solo una instrucción que prohíbe la creación de una instancia. Para herencia múltiple, vea el siguiente párrafo 5.
  5. Agregar reglas de combinación para "extendidos". Especifique explícitamente el ancestro para todos los campos en conflicto, que serán indistinguibles de los métodos, más sobre eso en la cláusula 8. Como resultado, el objeto heredará el código e implementará todos los tipos primarios. Los tipos que no se conservaron completamente como resultado de la fusión simplemente desaparecen de los antepasados ​​formales, dejando el código, pero creando un error de compilación cuando se trata de usar mal el objeto.
  6. Tipos dinámicos Las plantillas están en C, y no como plantillas basadas en Java. La tipificación no se verá afectada por esto, ya que los tipos dinámicos no se pueden usar directamente en las muestras, pero se pueden usar en todos los casos cuando se usan tipos básicos, reflexiones o plantillas, en los que tampoco es difícil organizar la re-planificación expandiendo el tipo de instancia directamente al tiempo de ejecución, la restricción está prohibida.
  7. Submétodos como en Pascal.
  8. Todos los métodos son instancias predeterminadas completas de las clases internas y no se pueden distinguir de los campos. Para esto, el constructor de la clase devolverá un valor. El constructor de la clase será el cuerpo del método predeterminado que se creará en tiempo de compilación, de acuerdo con la cláusula 2 "instancias predeterminadas". Ya no se necesitarán referencias de métodos especiales, como en Java 8. Una referencia de método significará una referencia de objeto.

    La llamada al método y la creación de un objeto temporal solo para llamar al método interno se vuelven idénticas, todo esto puede ser optimizado por el compilador como una simple llamada al método. Por otro lado, crear un "método" con el "nuevo" operador, para posteriores manipulaciones con una referencia al mismo, significa crear una nueva instancia de la "clase". Asignación de una referencia a una función a un campo directamente a través del nombre del método sin corchetes, valores de función con corchetes y argumentos en ellos. Los campos con el modificador "local" no se guardan entre llamadas a métodos.

    Todos los mismos métodos con diferentes conjuntos de argumentos deben agruparse en una subclase, por lo que sería bueno dejar en desorden a la clase externa. Los campos predeterminados de esta subclase se vuelven, respectivamente, no absolutamente estáticos, sino estáticos en relación con la clase externa. Excepto cuando la clase externa en sí es la instancia predeterminada.
  9. En lugar de "intentar" - "atrapar" también hay métodos, "arrojar" identifica el tipo permitido del método de llamada, "arrojar" hace pasar al método del manejador, cortando la pila de llamadas, y los métodos del manejador no son diferentes, regresar de ellos se lleva a cabo de la manera habitual, pero , sucede que en uno de los métodos de llamada anteriores. En consecuencia, se llama a un controlador en el nivel de jerarquía más cercano, como es el caso con try-catch. Por lo tanto, para saltar sobre cierto código siguiendo un cierto método en el caso de una excepción, debe colocar este código, con este cierto método al principio, en una clase de submétodo en la que sobrecargar los controladores necesarios. Este enfoque acortará significativamente los métodos largos de proyectos reales en Java, por decirlo suavemente.

    "Finalmente" para agregar un peso al método al final, de modo que sin corchetes adicionales.
  10. Un nuevo operador para el tiempo de ejecución que encripta todo tipo de primitivas y matrices de campos primitivos y String y los comprime en la memoria para su posterior recuperación con una clave de acceso, en masa para toda la instancia de la clase. Para querer desempaquetar-usar-empacar directamente en un método, en lugar de rascarme la cabeza "cómo hacerlo mejor".
  11. Las matrices necesitan control de borde solo durante la grabación, y yo le daría la oportunidad de leer directamente desde la memoria sin controlar los límites de la matriz. Por lo tanto, dada la existencia de System.arraycopy, los límites de la matriz se controlarán sin sacrificar el rendimiento. Dado que, la mayoría de los cálculos adicionales se realizan con mayor frecuencia durante la grabación y, en comparación con ellos, la grabación en sí no lleva mucho tiempo.
  12. Proporcionar una alternativa básica adicional a la sincronización por bloqueadores es el método más simple en la clase Thread que envía mensajes personalizados a otros Threads, y el método a través del cual puede recibir mensajes personalizados de otros Threads. Además, en el método de "ejecución" del objeto Runnable, que se pasa a Thread, es necesario llamar explícitamente al método que interrumpe el thread y sin un error de compilación. Además, agregue un método que active eventos Runnable personalizados de otros subprocesos, reciba y envíe mensajes cada vez después de esta interrupción. Todo esto fundamentalmente no cambia nada, pero simplificará el desarrollo orientado a hilos en el 90% de los casos. Especialmente en casos donde el desarrollo es apresurado, y esta es la mayoría de los casos reales.
  13. De hecho, el gráfico de todos los objetos en la memoria siempre tiene solo tipos primitivos, matrices o nulos, o un enlace a algo nativo en todos sus vértices. Una herramienta básica que puede guardar todo este gráfico en cualquier forma de texto será muy útil. Las matrices grandes de primitivas se pueden almacenar por separado, las matrices pequeñas pueden codificar en línea. Además de la versión de máquina virtual y, vamos, tal estructura se puede restaurar en la memoria.
  14. Una herramienta útil para buscar cualquier objeto en el gráfico de objetos de acuerdo con criterios específicos, teniendo en cuenta los modificadores de acceso, por tipo de SQL simple. Esta tarea se simplifica enormemente usando los párrafos 1 ... 9. Dicha herramienta no solo puede simplificar la jerarquía de los objetos, sino también organizar varias pruebas y controlar los valores permitidos e intentar ponerse al día con el Prolog.

Source: https://habr.com/ru/post/439210/


All Articles