Los "idiomas restringidos" de Fernando J. Corbató


13

Para su discurso de premio Turing de 1990 , Fernando J. Corbató enumeró las razones por las cuales los sistemas complejos inevitablemente fallarán. En su conclusión, da algunas sugerencias para disminuir la probabilidad de falla. Él enumera una idea de la siguiente manera:

[U] se de lenguajes restringidos para diseño o síntesis es una metodología poderosa. Al no permitir que un programador o diseñador exprese ideas irrelevantes, el dominio de posibles errores se vuelve mucho más limitado.

¿Qué quiere decir con "lenguaje restringido"?

Por un momento consideré la programación de restricciones . Sin embargo, la programación de restricciones se trata de restringir el espacio de solución del programa. Es una herramienta que faculta a un programador. La característica a la que se refiere Corbató parece ser algo que realmente restringe al programador, o al menos la hace más propensa a escribir código terser.

Mi segundo pensamiento es que se está refiriendo a lenguajes de programación conservadores . Corbató recibió su premio Turing por el trabajo realizado en las décadas de 1960 y 1970. Tengo entendido que se ocupó de muchas tarjetas perforadas. Nunca he visto una tarjeta perforada, así que ciertamente no sé cómo programarla, pero creo que esa programación es extremadamente liberal. Sospecho que las nociones de verificación de tipo, análisis estático, etc. simplemente no existían. Entonces, ¿se está refiriendo Corbató a la idea de lenguajes que restringen al desarrollador de cometer errores tontos? Este tampoco parece ser el caso. La verificación de seguridad y el modelado de datos no tienen nada que ver con la brevedad, de lo que parece estar hablando cuando menciona "no permitir ... ideas irrelevantes".


@jweyrich Gracias por enviarme a Programmers.SE. Sin embargo, cuando voy a la etiqueta de lenguajes de programación en StackOverflow, encuentro una gran cantidad de preguntas que son tan generales como las mías, como "¿Hay un lenguaje tipeado estáticamente débil?" donde el autor también hace referencia a materiales de lectura generales
Xander Dunn

55
@thoughtadvances Verifique las fechas de las preguntas que menciona, estoy dispuesto a apostar que la mayoría de ellas son bastante antiguas. SO tiene 4 años, las cosas cambian y, en general, nos volvemos más estrictos a medida que pasa el tiempo. Su pregunta está bien para los programadores (soy un mod allí), pero hubiera sido más fácil si hubiera marcado esto para llamar la atención de moderación y solicitar que se migre en lugar de volver a publicar. La migración le habría ahorrado la molestia de volver a publicar y le habría traído la respuesta a los Programadores junto con la pregunta. No te preocupes por eso ahora, yo me encargaré.
Yannis

3
Como ejemplo, si (nota: si ) la idea de malloc es "irrelevante" para una aplicación particular por alguna razón, entonces elegir Java ("restringido por no tener malloc) sobre C (malloc está ahí) limitaría" el dominio de posibles errores "eso podría estar asociado con malloc
mosquito

@YannisRizos Muchas gracias por migrarlo. No sabía que esta función existe. Quizás los usuarios más experimentados en StackOverflow podrían haber sugerido esta ruta en lugar de simplemente cerrarla.
Xander Dunn

3
" Codificar en tarjetas perforadas " era solo otra forma de escribir un programa. A fines de la década de 1960 y principios de la de 1970, teníamos idiomas que eran tan sofisticados como los que tenemos hoy. Muchos de los conceptos centrales de los lenguajes de programación ya estaban bien establecidos, y ALGOL 60 ya había establecido el estándar para las herramientas de programación en 1963.
Ross Patterson

Respuestas:


8

Un "lenguaje de programación restringido" es simplemente uno que no proporciona formas (fáciles) de hacer cosas que son irrelevantes para el propósito del lenguaje.

Tenga en cuenta que es "irrelevante", no "tonto", "estúpido" o "incorrecto".

Un buen ejemplo de esto podría ser ISO / ANSI SQL (antes de SQL-92), que no tenía forma en el lenguaje de consulta para expresar muchos artefactos de programación de tipo procesal, como la recursión o los bucles. (Sin embargo, los tiene ahora, y los proveedores agregaron extensiones personalizadas para ellos previamente de todos modos).


66
Este es exactamente el punto de Corbató. Entró en muchos detalles en un artículo de Datamation de 1969 llamado PL / I como herramienta para la programación del sistema (¡con el increíble subtítulo " cinco años con un compilador temporal "!).
Ross Patterson

Gracias, esta respuesta es muy útil. Esta idea tiene implicaciones interesantes. Esto parecería indicar que un programador querría tener acceso a una gran cantidad de lenguajes variados con diferentes capacidades en lugar de tener un solo lenguaje para gobernarlos a todos, que es lo que muchos programadores desearían suponer que C, C ++ o Java podrían ser.
Xander Dunn

@RossPatterson Excelente! ¡Gracias! Estaba buscando una elaboración sobre el tema de Corbató, pero no encontré mucho.
Xander Dunn

1
Una gran cita resumida de ese artículo de Datamation: " Nuestro objetivo al hacer el sistema ... ha sido explorar la frontera y ver cómo armar de manera efectiva un sistema que alcance y satisfaga los objetivos establecidos. Estamos tratando de encontrar exponga las ideas clave de diseño y comuníquelas a los demás, independientemente del sistema con el que estén familiarizados. Por lo tanto, un lenguaje que supere los detalles específicos del hardware es ciertamente deseable ... En otras palabras, obliga a uno a diseñar, no jugar con el código. Y este ha resultado ser uno de sus puntos fuertes . "
Ross Patterson

2
@thoughtadvances " Esto parecería indicar que un programador querría tener acceso a una gran cantidad de idiomas variados con diferentes habilidades en lugar de tener un idioma para gobernarlos a todos ", esa es una de las diferencias entre un programador junior y senior. Ningún carpintero tiene un solo martillo :-)
Ross Patterson


0

Primero, debe comprender la era de la informática cuando se dio su discurso (1990). Además, tenga en cuenta que está hablando con una audiencia académica y que MIT es su base de operaciones.

En esa época, los idiomas para escribir idiomas (metalenguajes) eran un tema candente. El protocolo Art of the Meta-Object acaba de salir y está inspirando el diseño de nuevos lenguajes. Sin embargo, todo este lujo tiene un precio: complejidad.

Para ayudar a reducir la complejidad de los sistemas y permitir la verificación de estos sistemas, los metalenguajes como Z salieron para hacer una especificación comprobable. Supongo que se refiere a este tipo de idiomas.


2
Corbató no es solo un académico del MIT de fines del siglo XX. Es uno de los pioneros de nuestro campo. Su trabajo en CTSS fue seminal, conduciendo directamente a Multics, Unix, CP / 67 y los sistemas Linux y z / VM actuales. Y la declaración en cuestión está relacionada con un principio que expuso abiertamente 20 años antes de El Arte del Protocolo Meta-Objeto y su conferencia de Turing.
Ross Patterson

0

Posiblemente se refiere a un lenguaje que tiene un número bastante menor de conceptos para comprender. Consulte los diagramas aquí que muestran las representaciones gráficas de los conceptos en Coffescript, Ruby y C ++. Puede ser Tuner significa que cuantos menos conceptos tenga en un idioma, menores serán las posibilidades de expresar ideas irrelevantes.


"... O un idioma" - ¿Es este un comentario sobre algo?
mosquito

Editó la publicación, para no parecer un comentario.
Manoj R
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.