stringtranslate.com

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 Centro de Computación Noruego en Oslo , por Ole-Johan Dahl y Kristen Nygaard . Sintácticamente , es un superconjunto aproximado de ALGOL 60 , [1] : 1.3.1  y también fue influenciado por el diseño de Simscript . [2]

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 recolección de basura destacada . [1] : 9.1  Otras formas de subtipificación (además de heredar subclases) se introdujeron en las derivadas 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, se diseñó para realizar simulaciones ; Simula 67, en cambio, se diseñó 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 actuales.

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 ordenador y la educación . La influencia de Simula suele subestimarse, y los objetos de tipo Simula se reimplementan en C++ , Object Pascal , Java , C# y muchos otros lenguajes. Los científicos informáticos como Bjarne Stroustrup , creador de C++, y James Gosling , creador de Java, han reconocido a Simula como una influencia importante. [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 ordenador en 1957. Nygaard vio la necesidad de encontrar 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 su trabajo en enero de 1962. Poco después se tomó la decisión de vincular el lenguaje a ALGOL 60. 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.

A finales de mayo de 1962, se invitó a Kristen Nygaard a visitar la Eckert–Mauchly Computer Corporation 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 , el director de programación de sistemas en Univac . Bemer era un gran admirador de ALGOL y encontró el proyecto Simula interesante. 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 para el Procesamiento de la Información (IFIP). Invitó a Nygaard, quien presentó el artículo "SIMULA: una extensión de ALGOL para la descripción de redes de eventos discretos".

En agosto de 1963, el Centro Noruego de Computación obtuvo un UNIVAC 1107 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 estuvo completamente operativo en el 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 alrededor del mundo y SIMULA I se implementó más tarde en otros ordenadores, incluidos el Burroughs B5500 y el Ural-16 ruso .

En 1966, CAR 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 satisfacer sus requisitos de un concepto de proceso generalizado. Dahl y Nygaard presentaron su artículo sobre declaraciones de clases y subclases en la Conferencia de trabajo de la IFIP sobre lenguajes de simulación en Oslo , en 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.

Páginas del Manual de lenguaje SIMULA del DECsystem-10, publicado por el Instituto de Investigación de Defensa Nacional de Suecia

Simula influyó en el desarrollo de Smalltalk y, posteriormente, de 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 verdadera . [7]

A finales de los años sesenta y principios de los setenta, hubo cuatro implementaciones principales de Simula:

Estas implementaciones se trasladaron a una amplia gama de plataformas. TOPS-10 implementó el concepto de variables miembro y procedimientos públicos, protegidos y privados, que luego se integraron en Simula Standard en 1986.

Simula Standard 1986 es el estándar más reciente y se ha adaptado a una amplia gama de plataformas. Existen principalmente cuatro implementaciones:

En noviembre de 2001, Dahl y Nygaard recibieron la Medalla John von Neumann del IEEE del Instituto de Ingenieros Eléctricos y Electrónicos "por la introducción de los conceptos que subyacen 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 de la Asociación para Maquinaria Computacional (ACM), con la mención: "Por las 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, [10] antes de la Conferencia del Premio Turing de la ACM [11] que estaba programada para ser pronunciada en la conferencia OOPSLA de noviembre de 2002 en Seattle.

El Laboratorio de Investigación Simula es un instituto de investigación que lleva el nombre del lenguaje Simula, y Nygaard ocupó allí un puesto a tiempo parcial desde su inauguración en 2001. El nuevo edificio de Ciencias de la Computación en 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:

Comienzo Fin ;

Comienza a ejecutarse y finaliza inmediatamente. El lenguaje no tiene ningún valor de retorno del programa.

Clásico Hola mundo

Un ejemplo de un programa Hola mundo en Simula:

Inicio  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 

Inicio  Clase Glifo; Virtual : Procedimiento imprimir Es  Procedimiento imprimir;; Inicio  Fin ; Clase de glifo Char (c); Carácter c; Procedimiento de inicio print; OutChar(c); Fin ; Clase Glifo Línea (elementos); Ref (Glifo) Matriz elementos; Inicio  Procedimiento imprimir; Inicio  Entero i; Para i:= 1 Paso 1 Hasta Límite superior (elementos, 1) Hacer elementos (i).print; Imagen exterior; Fin ; Fin ;  Ref (Glifo) rg; Ref (Glifo) Matriz rgs (1 : 4);  ! Programa principal; rgs (1):- New Char ('A'); rgs (2):- Nuevo Char ('b'); rgs (3):- Nuevo Char ('b'); rgs (4):- Nuevo Char ('a'); rg:- Nueva línea (rgs); rg.imprimir;Fin ;

El ejemplo anterior tiene una superclase (Glyph) con dos subclases ( Chary 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 las clases con procedimientos virtuales puros pueden instanciarse . Esto significa que en el ejemplo anterior, todas las clases pueden instanciarse. Sin embargo, llamar a un procedimiento virtual puro producirá un error en tiempo de ejecución .

Llamar por nombre

Simula admite la llamada por nombre [1] : 8.2.3,  por lo que el dispositivo de Jensen se puede implementar fácilmente. Sin embargo, el modo de transmisión predeterminado para parámetros simples es la llamada por valor , al contrario 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 se compila con 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; Comienzo  Real s; k:= m; Mientras k <= n Hacer  Comienza s:= s + u; k:= k + 1; Fin ; Sigma:= s;Fin ;

El código anterior utiliza la llamada por nombre para la variable de control (k) y la expresión (u). Esto permite que la variable de control se utilice 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 utiliza un bucle while para lograr la máxima portabilidad.

La siguiente:

Se puede implementar entonces 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 corrutina [1] : 9.2  .

Sam, Sally y Andy están comprando ropa. Deben compartir un probador. Cada uno de ellos recorre la tienda durante unos 12 minutos y luego utiliza el probador de forma exclusiva durante unos tres minutos, siguiendo cada uno una distribución normal. A continuación se muestra una simulación de su experiencia en el probador:

Simulación Inicio  Clase FittingRoom; Inicio  Ref (Head) puerta; Booleano inUse; Solicitud de procedimiento ; Inicio  Si inUse Entonces  Inicio Espera (puerta); puerta.Primero.Salir; Fin ; inUse:= True ; Fin ; Procedimiento salir; Comienzo inUse:= False ; Activar puerta.Primera; Fin ; puerta:- Nueva Cabeza; Fin ;  Informe de procedimiento (mensaje); Mensaje de texto ; Comenzar OutFix (Tiempo, 2, 0); OutText (": " & mensaje); OutImage; Fin ;  Proceso Clase Persona (pname); Texto pname; Comenzar  Mientras sea  Verdadero  Hacer  Comenzar Mantener (Normal (12, 4, u)); reportar (pname & "está solicitando el probador"); probador1.solicitud; reportar (pname & "ha entrado al probador"); Mantener (Normal(3,1,u)); probador1.salir; reportar (pname & "ha salido del probador"); Fin ; Fin ;  Entero u; Ref (Probador) Probador1;  FittingRoom1:- Nuevo FittingRoom; Activar  nueva persona ("Sam"); ​​Activar  nueva persona ("Sally"); Activar  nueva persona ("Andy"); Mantener (100);Fin ;

El bloque principal tiene como prefijo " Simulationpara permitir la simulación". El paquete de simulación se puede utilizar en cualquier bloque y las simulaciones se pueden anidar incluso cuando se simula a alguien que realiza simulaciones.

El objeto de probador utiliza una cola ( door) para acceder al probador. Cuando alguien solicita el uso del probador y este está en uso, debe esperar en esta cola ( Wait (door)). Cuando alguien abandona el probador, el primero (si lo hay) se libera de la cola ( Activate door.first) y, en consecuencia, se lo elimina de la cola de entrada ( door.First.Out).

Persona es una subclase de Processy su actividad se describe mediante retención (tiempo para navegar por la tienda y tiempo empleado en el probador) y llama a procedimientos en el objeto de probador para solicitar y salir del 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 mantiene la simulación durante 100 minutos antes de que finalice el programa.

Notas

  1. ^ abcdefghijklmn Dahl, Ole-Johan ; Myhrhaug, Bjørn; Nygaard, Kristen (1970). Lenguaje base común (PDF) (Reporte). Centro de Computación de Noruega. Archivado desde el original el 25 de diciembre de 2013 . Consultado el 17 de noviembre de 2020 .{{cite report}}: CS1 maint: URL no apta ( enlace )
  2. ^ Nygaard, Kristen (1978). "El desarrollo de los lenguajes Simula" (PDF) . El desarrollo de .. SIMULA I y SIMULA 67... estuvo influenciado por el diseño de SIMSCRIPT...
  3. ^ 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
  4. ^ Wong, William. "Antes de C, ¿qué se utilizaba?". Diseño electrónico . Consultado el 22 de mayo de 2017 .
  5. ^ Holmevik, Jan Rune (1994). "Compiling Simula: A historical study of technical genesis" (PDF) . IEEE Annals of the History of Computing . 16 (4): 25–37. doi :10.1109/85.329756. S2CID  18148999 . Consultado el 12 de mayo de 2010 .
  6. ^ Holmevik, Jan Rune. "Compiling Simula". Oslo, Noruega: Instituto de Estudios en Investigación y Educación Superior. Archivado desde el original el 20 de abril de 2009. Consultado el 19 de abril de 2017 .
  7. ^ Lehrmann Madsen, Ole (2014). "Construcción de abstracciones de concurrencia seguras". En Agha, Gul; Igarashi, Atsushi; Kobayashi, Naoki; Masuhara, Hidehiko; Matsuoka, Satoshi; Shibayama, Etsuya; Taura, Kenjiro (eds.). Objetos concurrentes y más . Apuntes de conferencias sobre informática. vol. 8665. Berlín: Springer. pag. 68.doi : 10.1007 /978-3-662-44471-9. ISBN 978-3-662-44471-9.S2CID1000741  .​
  8. ^ "GNU Cim".
  9. ^ "Simula portátil revisitada". GitHub . Consultado el 17 de junio de 2019 .
  10. ^ "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 .
  11. ^ "Conferencias del premio Turing de la ACM". Informatik.uni-trier.de . Consultado el 14 de enero de 2012 .

Fuentes

Lectura adicional

Enlaces externos