Simula
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 aproximado de ALGOL 60 y también fue influenciado por el diseño de Simscript.
Simula 67 introdujo objetos, clases, herencia y subclases, procedimientos virtuales, corrutinas y simulación de eventos discretos, y presentó recolección de elementos no utilizados. Se introdujeron otras formas de subtipado (además de heredar subclases) en los derivados de Simula.
Simula se considera el primer lenguaje de programación orientado a objetos. Como su nombre lo indica, la primera versión de Simula de 1962 fue diseñada para hacer simulaciones; Sin embargo, Simula 67 fue diseñado para ser un lenguaje de programación de propósito general 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), el modelado de procesos, los protocolos de comunicación, los algoritmos y otras aplicaciones, como la composición tipográfica, los gráficos por computadora y la 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. Científicos informáticos como Bjarne Stroustrup, creador de C++, y James Gosling, creador de Java, han reconocido a Simula como una gran influencia.
Historia
El siguiente relato se basa en el ensayo histórico de Jan Rune Holmevik.
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 conocimientos de programación informática que él. Ole-Johan Dahl se unió a él en su trabajo en enero de 1962. La decisión de vincular el lenguaje con ALGOL 60 se tomó poco después. En mayo de 1962 se establecieron los conceptos principales para un lenguaje de simulación. Nació SIMULA I, un lenguaje de programación de propósito especial para simular sistemas de eventos discretos.
Kristen Nygaard fue invitada a visitar Eckert-Mauchly Computer Corporation 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ó convincente el proyecto Simula. Bemer también presidió una sesión en la segunda conferencia internacional sobre procesamiento de la información organizada por la Federación Internacional para el Procesamiento de la 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 Norwegian Computing Center 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 I estaba completamente operativo en el UNIVAC 1107 en enero de 1965. En los años siguientes, Dahl y Nygaard pasaron mucho tiempo enseñando Simula. Simula se extendió a varios países del mundo y SIMULA I se implementó más tarde en otras computadoras, incluidas la Burroughs B5500 y la Ural-16 rusa.
En 1966, C. A. R. Hoare introdujo el concepto de construcción de clase de registro, que Dahl y Nygaard ampliaron con el concepto de prefijo y otras características para cumplir con sus requisitos para un concepto de proceso generalizado. Dahl y Nygaard presentaron su documento sobre declaraciones de clase y subclase en la Conferencia de trabajo de IFIP sobre lenguajes de simulación en Oslo, mayo de 1967. Este documento se convirtió en la primera definición formal de Simula 67. En junio de 1967, se llevó a cabo una conferencia para estandarizar el lenguaje e iniciar una serie de implementaciones. Dahl propuso unificar el tipo y el concepto de clase. Esto condujo 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 de los lenguajes de programación orientados a objetos posteriores. También ayudó a inspirar el modelo actor de computación concurrente, aunque Simula solo admite corrutinas y no verdadera concurrencia.
A finales de los sesenta y principios de los setenta, hubo cuatro implementaciones principales de Simula:
- UNIVAC 1100 by Norwegian Computing Center (NCC)
- System/360 and System/370 by NCC
- CDC 3000 by University of Oslo's Joint Computer installation at Kjeller
- TOPS-10 por Swedish National Defence Research Institute (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 último estándar y está adaptado a una amplia variedad de plataformas. Existen principalmente cuatro implementaciones:
- Simula AS
- Lund Simula
- GNU Cim
- Simula Revisitado
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&# 34;. En abril de 2002, recibieron el Premio A. M. Turing 2001 de 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 de su diseño de los lenguajes de programación Simula I y Simula 67." Dahl y Nygaard murieron en junio y agosto de ese año, respectivamente, antes de la Conferencia del Premio ACM Turing que estaba programada para ser pronunciada en la conferencia OOPSLA de noviembre de 2002 en Seattle.
Simula Research Laboratory es un instituto de investigación que lleva el nombre del lenguaje Simula, y Nygaard ocupó un puesto de tiempo parcial allí desde su inauguración en 2001. El nuevo edificio de Ciencias de la Computación de la Universidad de Oslo se llama Ole Johan Dahl's House, 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:
ComienzoFinal;
Comienza a ejecutarse e inmediatamente finaliza. El lenguaje carece de cualquier valor de retorno del programa.
Hola mundo clásico
Un ejemplo de un programa Hola mundo en Simula:
Comienzo OutText ("Hola, Mundo!"); Outimage; Final;
Simula no distingue entre mayúsculas y minúsculas.
Clases, subclases y procedimientos virtuales
Un ejemplo más realista con el uso de clases, subclases y procedimientos virtuales:
Comienzo Clase Glyph; Virtual: Procedimiento impresión I Procedimiento imprimir; Comienzo Final; Glyph Clase Gráfico c); Cara c) Comienzo Procedimiento imprimir; OutChar(c); Final; Glyph Clase Línea (elementos); Ref. (Glyph) Array elementos; Comienzo Procedimiento imprimir; Comienzo Integer i) Para i:= 1 Paso 1 Hasta luego UpperBound (elementos, 1) Doi) elementos impresos; OutImage; Final; Final; Ref. (Glyph) rg; Ref. (Glyph) Array rgs (1: 4); ! Programa principal;rgs (1):- Nuevo Char ('A'); rgs (2):- Nuevo Char ('b'); rgs (3):- Nuevo Char ('b'); rgs (4):- Nuevo Char ('a'); rg:- Nuevo Línea (rgs); rg.print; Final;
El ejemplo anterior tiene una superclase (Glyph) con dos subclases (Char
y Line
). Hay un procedimiento virtual con dos implementaciones. La ejecución comienza ejecutando el programa principal. Simula carece del concepto de clases abstractas, ya que se pueden instanciar clases con procedimientos virtuales puros. Esto significa que en el ejemplo anterior, se pueden instanciar todas las clases. Sin embargo, llamar a un procedimiento virtual puro producirá un error de tiempo de ejecución.
Llamar por nombre
Simula admite llamadas por nombre para que el dispositivo de Jensen se pueda implementar fácilmente. Sin embargo, el modo de transmisión predeterminado para parámetros simples es la llamada por valor, a diferencia de ALGOL, que utilizaba la llamada por nombre. Por lo tanto, el código fuente del dispositivo de Jensen debe especificar la llamada por nombre para los parámetros cuando los compila un compilador de Simula.
Otro ejemplo mucho más simple es la función de summation .. {displaystyle sum } que se puede aplicar de la siguiente manera:
Real Procedimiento Sigma (k, m, n, u); Nombre k, u; Integer k, m, n; Real u; Comienzo Real s; k:= m; Mientras tanto k Do Comienzo s:= s + u; k:= k + 1; Final; Sigma:= s; Final;
El código anterior usa la llamada por nombre para la variable de control (k) y la expresión (u). Esto permite que la variable de control se use en la expresión.
Tenga en cuenta que el estándar Simula permite ciertas restricciones en la variable de control en un bucle for. Por lo tanto, el código anterior usa un bucle while para una máxima portabilidad.
Lo siguiente:
Z=.. i=11001()i+a)2{displaystyle Z=sum ¿Por qué?
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 para realizar simulaciones de eventos discretos. Este paquete de simulación se basa en las funciones orientadas a objetos de Simula y su concepto de rutina.
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 en exclusiva 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 Clase FittingRoom; Comienzo Ref. (Head) puerta; Boolean inUse; Procedimiento solicitud; Comienzo Si inUse Entonces... ComienzoEspera (puerta); puerta. Primero. Final; inUse:= Cierto.; Final; Procedimiento licencia; ComienzoinUse:= Falso; Activar puerta. Primero; Final; puerta: Nuevo Head; Final; Procedimiento Informe (mensaje); Texto Mensaje; ComienzoOutFix (Time, 2, 0); OutText (": " & message); OutImage; Final; Proceso Clase Person (pname); Texto pname; Comienzo Mientras tanto Cierto. Do ComienzoHold (Normal (12, 4, u)); informe (nombre " está solicitando la sala de montaje "); sala de acondicionamiento1. informe (nombre " ha entrado en la sala de montaje "); Hold (Normal (3, 1, u)); fitroom1.leave; reporte (nombre " ha dejado la sala de fijación ") Final; Final; Integer u; Ref. (Habitación de pago) apropiadoHabitación1; ajuste Habitación1: Nuevo FittingRoom; Activar Nuevo Persona ("Sam"); Activar Nuevo Persona ("Sally"); Activar Nuevo Persona ("Andy"); Hold (100); Final;
El bloque principal tiene el prefijo Simulación
para habilitar la simulación. El paquete de simulación se puede usar en cualquier bloque y las simulaciones incluso se pueden anidar al simular a alguien que está haciendo simulaciones.
El objeto probador utiliza una cola (puerta
) 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 (Activar puerta.primero
) y, en consecuencia, se elimina de la cola de la puerta (puerta.primero.en.salir).
Persona es una subclase de Proceso
y su actividad se describe mediante retención (tiempo de navegación por la tienda y tiempo de permanencia en el probador) y llama a procedimientos en el objeto probador para solicitar y dejar el probador.
El programa principal crea todos los objetos y activa todos los objetos de persona para colocarlos en la cola de eventos. El programa principal se mantiene durante 100 minutos de tiempo simulado antes de que finalice el programa.
Contenido relacionado
CDC 6600
PalabraEstrella
IBM 704