Simula es el nombre de dos lenguajes de programación de simulación , Simula I y Simula 67, desarrollados en la década de 1960 en el Norwegian Computing Center en Oslo , por Ole-Johan Dahl y Kristen Nygaard . Sintácticamente , es un superconjunto bastante fiel de ALGOL 60 , [1] : 1.3.1 también influenciado por el diseño de Simscript . [2]
Paradigmas | Multi-paradigma : procedimental , imperativo , estructurado , orientado a objetos |
---|---|
Familia | ALGOL |
Diseñada por | Ole-Johan Dahl |
Desarrollador | Kristen Nygaard |
Apareció por primera vez | 1962 |
Lanzamiento estable | Simula 67, Simula I |
Disciplina de mecanografía | Estático , nominativo |
Alcance | Léxico |
Lenguaje de implementación | ALGOL 60 (principalmente; algunos componentes Simscript ) |
SO | Tipo Unix , Windows , z / OS , TOPS-10 , MVS |
Sitio web | www |
Influenciado por | |
ALGOL 60 , Simscript | |
Influenciado | |
Lenguajes de programación orientados a objetos |
Simula 67 introdujo objetos , [1] : 2, 5.3 clases , [1] : 1.3.3, 2 herencia y subclases , [1] : 2.2.1 procedimientos virtuales , [1] : 2.2.3 corrutinas , [1] : 9.2 y simulación de eventos discretos , [1] : 14.2 y presenta recolección de basura . [1] : 9.1 También se introdujeron otras formas de subtipificación (además de heredar subclases) en los derivados de Simula. [ cita requerida ]
Simula se considera el primer lenguaje de programación orientado a objetos . Como sugiere su nombre, la primera versión de Simula de 1962 fue diseñada para realizar simulaciones ; Sin embargo, Simula 67 fue diseñado para ser un lenguaje de programación de propósito general [3] y proporcionó el marco para muchas de las características de los lenguajes orientados a objetos en la actualidad.
Simula se ha utilizado en una amplia gama de aplicaciones, como la simulación de diseños de integración a muy gran escala (VLSI), modelado de procesos , protocolos de comunicación , algoritmos y otras aplicaciones como composición tipográfica , gráficos por computadora y educación . La influencia de Simula a menudo se subestima y los objetos de tipo Simula se vuelven a implementar en C ++ , Object Pascal , Java , C # y muchos otros lenguajes. Los informáticos como Bjarne Stroustrup , creador de C ++, y James Gosling , creador de Java, han reconocido a Simula como una gran influencia. [4]
Historia
El siguiente relato se basa en el ensayo histórico de Jan Rune Holmevik. [5] [6]
Kristen Nygaard comenzó a escribir programas de simulación por computadora en 1957. Nygaard vio la necesidad de una mejor manera de describir la heterogeneidad y el funcionamiento de un sistema. Para ir más allá con sus ideas sobre un lenguaje informático formal para describir un sistema, Nygaard se dio cuenta de que necesitaba a alguien con más habilidades de programación informática que él. Ole-Johan Dahl se unió a él en su trabajo de enero de 1962. La decisión de vincular el idioma a ALGOL 60 se tomó poco después. En mayo de 1962, se establecieron los conceptos principales para un lenguaje de simulación . Nací SIMULA I , un lenguaje de programación de propósito especial para la simulación de sistemas de eventos discretos.
Kristen Nygaard fue invitada a visitar la Corporación de Computadoras Eckert-Mauchly a fines de mayo de 1962 en relación con la comercialización de su nueva computadora UNIVAC 1107 . En esa visita, Nygaard presentó las ideas de Simula a Robert Bemer , director de programación de sistemas de Univac . Bemer era un gran fan de ALGOL y encontró atractivo el proyecto Simula. Bemer también fue presidente de una sesión en la segunda conferencia internacional sobre procesamiento de información organizada por la Federación Internacional de Procesamiento de Información (IFIP). Invitó a Nygaard, quien presentó el documento "SIMULA - Una extensión de ALGOL a la descripción de redes de eventos discretos".
El Centro de Computación de Noruega obtuvo un UNIVAC 1107 en agosto de 1963 con un descuento considerable, en el que Dahl implementó el SIMULA I bajo contrato con UNIVAC. La implementación se basó en el compilador UNIVAC ALGOL 60 . SIMULA Estaba en pleno funcionamiento en UNIVAC 1107 en enero de 1965. En los años siguientes, Dahl y Nygaard dedicaron mucho tiempo a enseñar Simula. Simula se extendió a varios países de todo el mundo y SIMULA I se implementó más tarde en otras computadoras, incluidas Burroughs B5500 y la rusa Ural-16 .
En 1966 CAR Hoare introdujo el concepto de construcción de clase de registro, que Dahl y Nygaard ampliaron con el concepto de prefijos y otras características para satisfacer sus requisitos para un concepto de proceso generalizado. Dahl y Nygaard presentaron su artículo sobre declaraciones de clase y subclase en la Conferencia de trabajo de IFIP sobre lenguajes de simulación en Oslo , mayo de 1967. Este artículo se convirtió en la primera definición formal de Simula 67. En junio de 1967, se celebró una conferencia para estandarizar el lenguaje e iniciar una serie de implementaciones. Dahl propuso unificar el tipo y el concepto de clase. Esto dio lugar a serias discusiones y la propuesta fue rechazada por la junta. Simula 67 se estandarizó formalmente en la primera reunión del Simula Standards Group (SSG) en febrero de 1968.
Simula influyó en el desarrollo de Smalltalk y, posteriormente, en los lenguajes de programación orientados a objetos. También ayudó a inspirar el modelo de actor de computación concurrente, aunque Simula solo admite corrutinas y no concurrencia real . [7]
A finales de los sesenta y principios de los setenta, hubo cuatro implementaciones principales de Simula:
- UNIVAC 1100 por Norwegian Computing Center (NCC)
- System / 360 y System / 370 de NCC
- CDC 3000 por la instalación conjunta de computadoras de la Universidad de Oslo en Kjeller
- TOPS-10 por el Instituto de Investigación de Defensa Nacional Sueco (FOA)
Estas implementaciones se trasladaron a una amplia gama de plataformas. El TOPS-10 implementó el concepto de variables y procedimientos de miembros públicos, protegidos y privados, que luego se integró en Simula 87. Simula 87 es el estándar más reciente y está adaptado a una amplia gama de plataformas. Hay principalmente cuatro implementaciones:
- Simula AS
- Lund Simula
- GNU Cim [8]
- Simula portátil revisada [9]
En noviembre de 2001, Dahl y Nygaard recibieron la medalla IEEE John von Neumann del Instituto de Ingenieros Eléctricos y Electrónicos "Por la introducción de los conceptos subyacentes a la programación orientada a objetos a través del diseño e implementación de SIMULA 67". En abril de 2002, recibieron el premio AM Turing 2001 otorgado por la Association for Computing Machinery (ACM), con la mención: "Por ideas fundamentales para el surgimiento de la programación orientada a objetos, a través del diseño de los lenguajes de programación Simula I y Simula 67. " Desafortunadamente, ni Dahl ni Nygaard pudieron asistir a la Conferencia del Premio ACM Turing, [10] programada para ser pronunciada en la conferencia OOPSLA de noviembre de 2002 en Seattle, ya que murieron en junio y agosto de ese año, respectivamente. [11]
El Laboratorio de Investigación Simula es un instituto de investigación que lleva el nombre del idioma Simula, y Nygaard ocupó un puesto a tiempo parcial allí desde la inauguración en 2001. El nuevo edificio de Ciencias de la Computación de la Universidad de Oslo se llama Casa de Ole Johan Dahl, en honor a Dahl, y el auditorio principal se llama Simula.
Código de muestra
Programa mínimo
El archivo de computadora vacío es el programa mínimo en Simula, medido por el tamaño del código fuente . Consiste en una sola cosa; una declaración ficticia .
Sin embargo, el programa mínimo se representa más convenientemente como un bloque vacío:
Comenzar Fin ;
Comienza a ejecutarse y termina inmediatamente. El lenguaje carece de valor de retorno del programa.
Hola mundo clásico
Un ejemplo de un programa Hola mundo en Simula:
Begin OutText ("¡Hola, mundo!"); Outimage ;Fin ;
Simula no distingue entre mayúsculas y minúsculas .
Clases, subclases y procedimientos virtuales
Un ejemplo más realista con el uso de clases, [1] : 1.3.3, 2 subclases [1] : 2.2.1 y procedimientos virtuales: [1] : 2.2.3
Comenzar glifo de clase ; Virtual : Procedimiento de impresión Is Procedimiento de impresión ;; Comenzar Fin ; Carácter de clase de glifo (c); Carácter c; Iniciar la impresión del procedimiento ; OutChar (c); Fin ; Línea de clase de glifo (elementos); Elementos de matriz de Ref (Glyph) ; Iniciar la impresión del procedimiento ; Begin Integer i; Para i: = 1 Paso 1 Hasta UpperBound (elementos, 1) Hacer elementos (i) .print; OutImage; Fin ; Fin ; Ref (Glifo) rg; Ref (Glifo) Array rgs (1: 4); ! Programa principal; rgs (1): - Carácter nuevo ('A'); rgs (2): - Carácter nuevo ('b'); rgs (3): - Carácter nuevo ('b'); rgs (4): - Carácter nuevo ('a'); rg: - Nueva línea (rgs); rg.print;Fin ;
El ejemplo anterior tiene una superclase (Glyph) con dos subclases ( Char
y Line
). Hay un procedimiento virtual con dos implementaciones . La ejecución comienza con la ejecución del programa principal. Simula carece del concepto de clases abstractas , ya que se pueden crear instancias de clases con procedimientos virtuales puros . Esto significa que en el ejemplo anterior, se pueden crear instancias de todas las clases. Sin embargo, llamar a un procedimiento virtual puro producirá un error en tiempo de ejecución .
Llamar por nombre
Simula admite llamadas por nombre [1] : 8.2.3 para que el dispositivo de Jensen se pueda implementar fácilmente. Sin embargo, el modo de transmisión predeterminado para un parámetro simple es llamada por valor , al contrario de ALGOL que usaba llamada por nombre . Por lo tanto, el código fuente del dispositivo de Jensen debe especificar la llamada por nombre de los parámetros cuando los compila un compilador de Simula.
Otro ejemplo mucho más simple es la función de suma que se puede implementar de la siguiente manera:
Procedimiento real Sigma (k, m, n, u); Nombre k, u; Entero k, m, n; Real u;Comience Real s; k: = m; Mientras que k <= n Do Begin s: = s + u; k: = k + 1; Fin ; Sigma: = s;Fin ;
El código anterior usa llamada por nombre para la variable de control (k) y la expresión (u). Esto permite utilizar la variable de control en la expresión.
Tenga en cuenta que el estándar de Simula permite ciertas restricciones sobre la variable de control en un bucle for . Por lo tanto, el código anterior utiliza un bucle while para una máxima portabilidad.
La siguiente:
luego se puede implementar de la siguiente manera:
Z: = Sigma (i, 1, 100, 1 / (i + a) ** 2);
Simulación
Simula incluye un paquete de simulación [1] : 14.2 para realizar simulaciones de eventos discretos . Este paquete de simulación se basa en las características orientadas a objetos de Simula y su concepto de co - rutina [1] : 9.2 .
Sam, Sally y Andy están comprando ropa. Deben compartir un probador. Cada uno de ellos está navegando por la tienda durante unos 12 minutos y luego utiliza el probador exclusivamente durante unos tres minutos, cada uno siguiendo una distribución normal. Una simulación de su experiencia en el probador es la siguiente:
Simulación Comienzo de la clase FittingRoom; Comience la puerta Ref (Head); Boolean inUse; Solicitud de procedimiento ; Comenzar si está en uso, luego comenzar Espere (puerta); puerta.Primero.salida; Fin ; inUse: = True ; Fin ; Licencia de procedimiento ; Begin inUse: = False ; Activar puerta Primero; Fin ; puerta: - New Head; Fin ; Informe de procedimiento (mensaje); Mensaje de texto ; Empezar OutFix (tiempo, 2, 0); OutText (":" & mensaje); OutImage; Fin ; Persona de clase de proceso (pname); Text pname; Comience Mientras verdadera Do Begin Mantener (Normal (12, 4, u)); report (pname & "está solicitando el probador"); probador1.request; informe (pname & "ha entrado en el probador"); Mantener (Normal (3, 1, u)); fitroom1.leave; report (pname & "ha salido del probador"); Fin ; Fin ; Integer u; Ref (FittingRoom) fittingRoom1; fittingRoom1: - Nuevo FittingRoom; Activar nueva persona ("Sam"); Activar nueva persona ("Sally"); Activar nueva persona ("Andy"); Mantener (100);Fin ;
El bloque principal tiene el prefijo Simulation
para habilitar la simulación. El paquete de simulación se puede utilizar en cualquier bloque y las simulaciones incluso se pueden anidar cuando se simula a alguien haciendo simulaciones.
El objeto del probador utiliza una cola ( door
) para acceder al probador. Cuando alguien solicita el probador y está en uso, debe esperar en esta cola ( Wait (door)
). Cuando alguien sale del probador, el primero (si lo hay) se libera de la cola ( Activate door.first
) y, en consecuencia, se elimina de la cola de la puerta ( door.First.Out
).
Persona es una subclase de Process
y su actividad se describe mediante los procedimientos de espera (tiempo para navegar por la tienda y tiempo pasado en el probador) y llamadas en el objeto del probador para solicitar y salir del probador.
El programa principal crea todos los objetos y activa todos los objetos persona para ponerlos en la cola de eventos. El programa principal se mantiene durante 100 minutos de tiempo simulado antes de que finalice el programa.
Ver también
- BETA (lenguaje de programación) , un sucesor moderno de Simula
Notas
- ^ a b c d e f g h i j k l m n Dahl, Ole-Johan ; Myhrhaug, Bjørn; Nygaard, Kristen (1970). Lenguaje base común (PDF) (Informe). Centro de Computación de Noruega. Archivado desde el original el 25 de diciembre de 2013 . Consultado el 17 de noviembre de 2020 .CS1 maint: URL no apta ( enlace )
- ^ Nygaard, Kristen (1978). "El desarrollo de los lenguajes Simula" (PDF) .
El desarrollo de .. SIMULA I y SIMULA 67 ... fue influenciado por el diseño de SIMSCRIPT ...
- ^ Kristen Nygaard y Ole-Johan Dahl. 1978. El desarrollo de los lenguajes SIMULA. Historia de los lenguajes de programación. Association for Computing Machinery, Nueva York, NY, EE. UU., 439–480. DOI: https://doi.org/10.1145/800025.1198392
- ^ Wong, William. "Antes de C, ¿qué usabas?" . Diseño Electrónico . Consultado el 22 de mayo de 2017 .
- ^ Holmevik, Jan Rune (1994). "Compilación de Simula: un estudio histórico de la génesis tecnológica" (PDF) . IEEE Annals of the History of Computing . 16 (4): 25–37. doi : 10.1109 / 85.329756 . Consultado el 12 de mayo de 2010 .
- ^ Holmevik, Jan Rune. "Compilación de Simula" . Oslo, Noruega: Instituto de Estudios de Investigación y Educación Superior. Archivado desde el original el 20 de abril de 2009 . Consultado el 19 de abril de 2017 .
- ^ Lehrmann Madsen, Ole (2014). "Construyendo abstracciones de simultaneidad seguras". En Agha, Gul; Igarashi, Atsushi; Kobayashi, Naoki; Masuhara, Hidehiko; Matsuoka, Satoshi; Shibayama, Etsuya; Taura, Kenjiro (eds.). Objetos concurrentes y más . Berlín: Springer. pag. 68. doi : 10.1007 / 978-3-662-44471-9 . ISBN 978-3-662-44471-9.
- ^ "GNU Cim" .
- ^ "Portable Simula Revisited" . GitHub . Consultado el 17 de junio de 2019 .
- ^ "Conferencias del premio ACM Turing" . Informatik.uni-trier.de . Consultado el 14 de enero de 2012 .
- ^ "ACM Ole-Johan Dahl y Kristen Nygaard - Obituario" . Acm.org. Archivado desde el original el 19 de julio de 2011 . Consultado el 14 de enero de 2012 .
Fuentes
- Sylvester, Peter. "IBM System 360/370 Compiler and Historical Documentation" (The Simula Standard y otra documentación histórica).
Otras lecturas
- Pooley, Rob (1987), Introducción a la programación en Simula , Alfred Waller Ltd, ISBN 0632016116, archivado desde el original el 19 de septiembre de 2004
enlaces externos
- Página web oficial
- Simula portátil revisitada en GitHub