Ventajas y desventajas de estructurar todo el código a través de clases y compilar en clases (como Java)

13

Editar: mi idioma permite la herencia múltiple, a diferencia de Java.

Comencé a diseñar y desarrollar mi propio lenguaje de programación para fines educativos, recreativos y potencialmente útiles.

Al principio, decidí basarlo en Java.

Esto implicaba que todo el código se escribiría en forma de clases, y ese código se compila en clases, que son cargadas por la máquina virtual.

Sin embargo, he excluido características como interfaces y clases abstractas, porque no encontré ninguna necesidad de ellas. Parecían estar imponiendo un paradigma, y me gustaría que mi lenguaje no lo hiciera. Sin embargo, quería mantener las clases como la unidad de compilación, porque me pareció conveniente de implementar, familiar y me gustó la idea.

Luego me di cuenta de que básicamente me quedaba con un sistema de módulos, donde las clases podían usarse como "espacios de nombres", proporcionando constantes y funciones usando la directiva static , o como plantillas para objetos que necesitan ser instanciados ( propósito "real" de las clases en otros idiomas).

Ahora me pregunto: ¿cuáles son las ventajas y las desventajas de tener clases como unidades de compilación?

También, cualquier comentario general sobre mi diseño sería muy apreciado. Puede encontrar una publicación informativa en mi idioma aquí: enlace .

    
pregunta jcora 19.12.2012 - 00:26

2 respuestas

6
  

¿Cuáles son los beneficios de tener clases como unidades de compilación?

Puede reducir la complejidad del lenguaje. No hay necesidad de construcciones diferentes, todo se trata igual. En ciertos diseños (aunque no parece el tuyo), se beneficia de no tener elementos estáticos y los problemas de diseño con los que tienden a encontrarse (problemas de orden de inicialización, limitaciones de concurrencia, incomodidad con las clases de genéricos / tipo). También permite algunas ventajas del concepto de módulo como instancias de módulo aisladas para sandboxing o paralelización; y la tipificación de módulos donde las dependencias se ajustan a alguna interfaz y todo el módulo que vale la pena de implementación se puede instanciar y soltar.

Dicho esto, el concepto tiende a tener más problemas que no. De manera realista, no puede tratar a todo de la misma manera, ya que las clases de "nivel superior" necesitan reglas especiales, como tener un constructor predeterminado (o, de lo contrario, se enfrentan a problemas extraños). La modularidad de las unidades de compilación tiende a volverse realmente incómoda también. ¿Cómo hace una clase para hacer referencia a otros cuando son solo clases? ¿Cómo se manejan esas dependencias y cómo determina el orden correcto para aumentar las clases? ¿Cómo se asegura de que las diferentes partes de la aplicación reutilicen las referencias de clase duplicadas (o cómo lidiar con las instancias duplicadas si esa es la semántica que desea)?

Después de examinarlo, tuve muchos problemas con las dependencias, la definición del alcance de los aspectos y los problemas de inicialización. Terminas encontrando problemas que hacen que las "clases de nivel superior" sean especiales, y muchas limitaciones para hacer que funcionen y terminen convirtiéndolas en espacios de nombres simples.

    
respondido por el Telastyn 19.12.2012 - 05:17
4

En lugar de responder a esta pregunta, subiré un nivel y sugeriré estudiar MIT OpenCourseWare , en particular 6.035 (Ingeniería de lenguajes informáticos). Esto explicará toda la problemática, para que no tengas la tentación de volver a hacer preguntas como esta.

Ingeniería del lenguaje informático

El único requisito previo es Java.

enlace

Descripción del curso

Este curso analiza los problemas asociados con la implementación de lenguajes de programación de nivel superior. Los temas cubiertos incluyen: conceptos fundamentales, funciones y estructuras de compiladores, la interacción de la teoría y la práctica, y el uso de herramientas en la creación de software. El curso incluye un proyecto de varias personas sobre diseño e implementación del compilador.

    
respondido por el user42242 21.12.2012 - 16:23

Lea otras preguntas en las etiquetas