Pregunta

Sé que esto es muy abstracta, sin embargo, creo que es muy centrado.

Hay un montón de lenguajes de alto nivel de hoy: C # , Java , VB , Python , etc. ., todos creados a distancia abstracta complejidad de bajo nivel y proporcionar una experiencia de programación más fácil de usar. Los lenguajes de alto nivel pueden reducir, y la mayoría de las veces eliminar por completo, la necesidad de realizar de bajo nivel, las operaciones de proceso específicas (como la manipulación de punteros y de gestión de memoria). Muchos detalles de la plataforma también eliminan (como la manipulación de archivos, la generación de interfaz de usuario, etc.)

Mis dos preguntas son:

  1. ¿Qué más puede / debe ser abstraído? ¿Hay una semántica más bajo nivel actual en lenguajes de alto nivel de hoy que serán / debería ser una abstracción más allá?
  2. ¿En qué momento una de propósito general, lenguaje de alto nivel se convierten en muy alto -level , también conocido como objetivo orientado ?
¿Fue útil?

Solución

Uno de los problemas con, incluidas las extracciones de muy alto nivel en un idioma es que a veces no son adecuados para todo lo que desea hacer, por lo que terminan necesitando las abstracciones de nivel inferior, también. El problema de tener abstracciones de alto y bajo nivel en el mismo idioma es que las abstracciones de alto nivel pueden presentar fugas muy fácilmente si se puede sondear ellos a través de abstracciones de bajo nivel.

Java, por ejemplo, no es aún tan alto nivel de un idioma, pero está diseñado para ser seguro (en el sentido de que las abstracciones no se escapan) en primer lugar. Por lo tanto, algunas cosas son imposibles de hacer en Java. Por ejemplo, no se puede escribir recolector de basura de Java dentro de Java, o rodar su propio sistema de objetos utilizando el polimorfismo puntero del molde, o escribir un sistema operativo (por lo menos no la vez tradicional).

En contraste, D ofertas tanto de alto nivel e instalaciones de bajo nivel. recolector de basura D's, por ejemplo, está escrito en D. Esto suena bien y en su mayor parte se trata. Sin embargo, cuando se inicia mezclando niveles de abstracción en un solo código base de las abstracciones pueden tener fugas, especialmente si se utiliza moldes o uniones para derrotar al sistema de tipos. Por lo tanto, el programa con éxito en D es posible que de vez en cuando hay que estar al tanto de algunos detalles de bajo nivel para hacer frente a las abstracciones con fugas, incluso si no los necesita para la tarea en cuestión.

Otros consejos

  1. ¿Qué más puede / debe ser abstraído? Siempre depende de su objetivo. No hay una línea clara aquí, pero creo que todo se reduce a la cantidad de control se puede pedir? Generalmente hay una bastante pesada equilibrio entre la abstracción y posibilidades.
  2. ¿Cuándo un objetivo de uso general, se convierten en lenguaje de alto nivel orientado? Tan pronto como se puede ver el entorno de idioma / programación de lo que quiere en lugar de lo que debe hacer.

En realidad, sin embargo ... la línea es completamente arbitraria, por supuesto.

Tcl tiene una propuesta oficial ( Tcl Mejora Propuesta (TIP) 131 que más o menos se soluciona el problema para siempre. Todo lo que necesita es un voluntario para hacer el trabajo. incluso hay una aplicación esquelética con sólo algunos de los detalles quedan fuera.

Algunos dominio específico idiomas pueden ser muy "alto nivel". Un buen ejemplo de esto es Informar a (utilizado para escribir las aventuras de texto), donde el lenguaje de programación no es muy diferente de la llanura Inglés. He aquí un extracto de un ejemplo de proyecto :

The fireplace is scenery in the Entrance Hall. The description is "Unlit, vacant
[if Search is happening]. It is almost as though you are not expected[end if]."
The sound of the fireplace is "whistling wind". Understand "fire" or "whistling" 
or "wind" as the fireplace. Instead of burning the fireplace: say "There is no 
fuel prepared for a fire."

Este es el código fuente real. :)

creo un lenguaje hipotético futuro le permitirá escribir un verificador en lugar de una implementación. El compilador analiza después de que verificador y los intentos (a) Escribir una aplicación que coincidan con su especificación. (Obviamente, el compilador debe fallar o caer de nuevo a la fuerza bruta a veces, porque no es un solucionador de detención.)

En esencia, un lenguaje lógico con optimizaciones ridículos en comparación con bruta forzar la respuesta.

A pesar de que el código de verificación puede ser más largo que el código de implementación, que actúa como mucha documentación mejor y está más cerca de lo que es un aspecto de especificaciones similares. Que el comercio más tiempo a escribir en código por menos desyncing documentación / spec / código.

Por ejemplo:

int32 Remainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures Math.Abs(result) < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures result >= 0
    ensures result < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}

resultados en:

//warning: suggested precondition: denominator != int32.MinValue due to Math.Abs
int32 Remainder(int32 numerator, int32 denominator) {
    return numerator % denominator;
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    return ((numerator % denominator) + denominator) % denominator;
}

Gestión de recursos humanos, creo que unos pocos idiomas están tratando de encabezar algunas abstracciones adicionales:. Clojure con su STM y Erlang con el modelo Actor

  1. Acerca de la única cosa que puedo ver que no puedo ver la forma en que se llevaría a cabo es una lengua con los controles de concurrencia similar a la comprobación de tipos estáticos. Digo esto porque existe el problema de la parada.
  2. Cuando se siega el césped, me hace el café por la mañana, cheques mi correo electrónico y me dice lo que sucedió en las noticias.

Creo que los marcos son el siguiente paso.

  • En la actualidad algunos "lenguas" son para UAT (que está cerca de lo que se podría llamar un gol y con un meta requiere pruebas , ya que es la única manera en que podría se explica, por ejemplo, Fit para la pieza de ensayo); los podían fusionarse con los lenguajes de programación.
  • Casi todos los idiomas es cada vez el acceso a más y más interfaces alto nivel (es decir, abstracción ) que requiere cada vez menos código de usted y abstraído del sistema operativo (ver lo fácil que es para hacer la aplicación GUI ahora en C #, C ++ en comparación con MFC, comparado con el API Win32 de C ++).
  • En cuanto a los lenguajes de programación que podrían obtener más de las mejores características de otros métodos de desarrollo: Estoy pensando en programación orientada a aspectos , que podría ayudar a resolver muchos problema OO y ya está implementado en parte en alguna forma en C # y Java (como las cuestiones relativas a las operaciones de registro, ...).
  • UML objetivo final ( fue ?) Para permitir la viesw UML junto con los detalles de los diagramas sea suficiente para el sistema de código; UML es también una lengua (en el sentido más amplio).
  • IDE también debe incluirse: Ahora puede configurar cómo un diálogo debe cambiar el tamaño de la IDE, mientras que con frecuencia era necesario código antes. Más tarde, usted puede ser capaz de estilo toda su aplicación o sitio web de una lista desplegable de temas al igual que cualquier aplicación en la piel poder. Y mucho más podría venir.

Imagínese la unión de las de un entorno unificado, ya que el entorno de desarrollo es una parte importante del desarrollo al igual que las bibliotecas se tiene acceso a, y su nivel de acceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top