Articulo de referencia

Simula

[[SIMSCRIPT]] (some parts)"},"dialects":{"wt":""},"influenced by":{"wt":"[[ALGOL 60]], [[SIMSCRIPT]]"},"influenced":{"wt":"[[BETA (programming language)|BETA]], [[CLU (programmi...

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 Noruego de Computación 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 ] [ 3 ]

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 presentó recolección de basura . [ 1 ] : 9.1 Otras formas de subtipado (además de heredar subclases) se introdujeron en derivados de Simula.

Simula es considerado el primer lenguaje de programación orientado a objetos . Como su nombre indica, 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 [ 4 ] 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 , protocolos de comunicación , algoritmos y otras aplicaciones como la composición tipográfica , los gráficos por ordenador y la educación .

Científicos informáticos como Bjarne Stroustrup , creador de C++, y James Gosling , creador de Java, han reconocido a Simula como una influencia importante. [ 5 ] Los objetos de tipo Simula se han reimplementado en C++ , Object Pascal , Java , C# y muchos otros lenguajes.

Historia

El siguiente relato se basa en el ensayo histórico de Jan Rune Holmevik. [ 6 ] [ 7 ] [ 8 ] [ 9 ]

Kristen Nygaard comenzó a escribir programas de simulación por computadora en 1957. Nygaard percibió la necesidad de una mejor manera de describir la heterogeneidad y el funcionamiento de un sistema. Para desarrollar aún más sus ideas para un lenguaje de programación que describiera un sistema, Nygaard se dio cuenta de que necesitaba a alguien con más experiencia en programación que él. Ole-Johan Dahl se unió a su trabajo en enero de 1962. Poco después, se decidió vincular el lenguaje con ALGOL 60. En mayo de 1962, se establecieron los conceptos principales para un lenguaje de simulación ; así nació SIMULA I , un lenguaje de programación especializado diseñado para simular sistemas de eventos discretos.

Kristen Nygaard fue invitada a visitar la Eckert–Mauchly Computer Corporation a finales de mayo de 1962 con motivo de la comercialización de su nuevo ordenador UNIVAC 1107. Durante esa visita, Nygaard presentó las ideas de Simula a Robert Bemer , director de programación de sistemas de Univac . Bemer era un gran admirador de ALGOL y el proyecto Simula le pareció fascinante. 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 artículo «SIMULA: una extensión de ALGOL para la descripción de redes de eventos discretos».

El Centro de Computación Noruego adquirió un UNIVAC 1107 en agosto de 1963 con un considerable descuento, en el cual Dahl implementó 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 la enseñanza de Simula. Simula se extendió a varios países alrededor del mundo y SIMULA I se implementó posteriormente en otras computadoras, incluidas la Burroughs B5500 y la Ural-16 rusa .

En 1966, CAR Hoare introdujo el concepto de construcción de clase de registro, que Dahl y Nygaard extendieron 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 varias implementaciones. Dahl propuso unificar el concepto de tipo y el de clase. Esto dio lugar a serios debates, y la propuesta fue rechazada por la junta. Simula 67 se estandarizó formalmente en la primera reunión del Grupo de Estándares de Simula (SSG) en febrero de 1968.

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

Simula influyó en el desarrollo de Smalltalk y, posteriormente, de lenguajes de programación orientados a objetos . También contribuyó a inspirar el modelo de actores para la computación concurrente, aunque Simula solo admite corrutinas y no concurrencia real . [ 10 ]

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

Estas implementaciones se adaptaron a una amplia gama de plataformas. TOPS-10 implementó el concepto de variables y procedimientos públicos, protegidos y privados, que posteriormente se integró 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:

  • Simula AS
  • Lund Simula
  • GNU Cim [ 11 ]
  • Simula portátil revisitada [ 12 ]

En noviembre de 2001, Dahl y Nygaard recibieron la Medalla John von Neumann del IEEE, otorgada por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE), "Por la introducción de los conceptos subyacentes a la programación orientada a objetos mediante el diseño e implementación de SIMULA 67". En abril de 2002, recibieron el Premio Turing 2001 de la Asociación para la Maquinaria de Computación (ACM), con la siguiente 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". Dahl y Nygaard fallecieron en junio y agosto de ese año, respectivamente, [ 13 ] antes de la Conferencia del Premio Turing de la ACM [ 14 ] que estaba programada para ser impartida 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 idioma Simula, y Nygaard ocupó un puesto a 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 Casa de Ole Johan Dahl, en honor a Dahl, y el auditorio principal se llama Simula.

Código de ejemplo

Programa mínimo

El archivo informático vacío es el programa mínimo en Simula, medido por el tamaño del código fuente . Consiste en una sola cosa: una instrucción ficticia .

Sin embargo, el programa mínimo se representa de forma más conveniente como un bloque vacío:

Comienzo Fin ;

Comienza a ejecutarse e inmediatamente finaliza. El lenguaje no devuelve ningún valor .

Clásico Hola mundo

Un ejemplo de programa "Hola mundo" en Simula:

Begin OutText ("¡Hola, mundo!"); Outimage ; End ;

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

Iniciar clase Glifo; Virtual : Procedimiento imprimir Es Procedimiento imprimir;; Inicio Fin ; Clase de glifo Char (c); Carácter c; Iniciar procedimiento print; OutChar(c); Fin ; Línea de clase de glifo (elementos); Ref (Glifo) Elementos de la matriz ; Imprimir procedimiento de inicio ; Iniciar entero i; Para i:= 1 Paso 1 Hasta UpperBound (elementos, 1) Hacer elementos (i).imprimir; OutImage; Fin ; Fin ; Ref (Glifo) rg; Ref (Glifo) Matriz rgs (1 : 4); ! Programa principal; rgs (1):- Nuevo carácter ('A'); rgs (2):- Nuevo carácter ('b'); rgs (3):- Nuevo carácter ('b'); rgs (4):- Nuevo carácter ('a'); rg:- Nueva línea (rgs); rg.print; 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 , a diferencia de ALGOL , que utiliza 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 compile con un compilador de Simula.

Otro ejemplo mucho más sencillo es la función de sumatoria.{\displaystyle \sum }que se puede implementar de la siguiente manera:

Procedimiento real Sigma (k, m, n, u); Nombre k, u; Entero k, m, n; Real u; Inicio Real s; k:= m; Mientras k <= n Hacer Comenzar 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 dentro de un bucle for . Por lo tanto, el código anterior utiliza un bucle while para una máxima portabilidad.

La siguiente:

Z=i=11001(i+a)2{\displaystyle Z=\sum _{i=1}^{100}{1 \over (i+a)^{2}}}

A continuación, 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 corrutina [ 1 ] : 9.2 . Simula proporciona funciones para generar números pseudoaleatorios [ 1 ] : 12.1 .

Sam, Sally y Andy están de compras. Deben compartir un probador. Cada uno recorre la tienda durante unos 12 minutos y luego usa el probador exclusivamente durante unos tres minutos, siguiendo una distribución normal. A continuación se presenta una simulación de su experiencia en el probador:

Simulación Iniciar Clase Probador; Iniciar Ref (Cabecera) puerta; Booleano enUso; Solicitud de procedimiento ; Iniciar Si enUso Entonces Iniciar Espera (puerta); puerta.Primero.Salir; Fin ; inUse:= Verdadero ; Fin ; Procedimiento salir; Inicio inUse:= Falso ; Activar puerta.Primero; Fin ; puerta:- Nueva cabeza; Fin ; Informe de procedimiento (mensaje); Mensaje de texto ; Iniciar OutFix (Tiempo, 2, 0); OutText (": " & mensaje); OutImage; Fin ; Procesar Clase Persona (pname); Texto pname; Iniciar Mientras sea verdadero Hacer Iniciar Mantener (Normal (12, 4, u)); informe (pname & " está solicitando el probador"); probador1.solicitud; informe (pname & " ha entrado en el probador"); Mantener (Normal (3, 1, u)); probador1.salir; informe (pname & " ha salido del probador"); Fin ; Fin ; Entero u; Ref (Probador) probador1; probador1: Nuevo probador; Activar nueva persona ("Sam"); ​​Activar nueva persona ("Sally"); Activar nueva persona ("Andy"); Mantener (100); Fin ;

El bloque principal lleva un prefijo Simulationpara habilitar la simulación. El paquete de simulación se puede usar en cualquier bloque, e incluso se pueden anidar simulaciones al simular a alguien realizando simulaciones.

El objeto probador utiliza una cola ( door) para obtener acceso al probador. Cuando alguien solicita el probador y está ocupado, 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, por consiguiente, se elimina de la cola de la puerta ( door.First.Out).

Persona es una subclase de Processy su actividad se describe usando hold (tiempo para recorrer la tienda y tiempo que se pasa en el probador) y llama a procedimientos en el objeto 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 espera 100 minutos de tiempo simulado antes de finalizar.

Notas

  1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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 19 de septiembre de 2024 . Consultado el 20 de agosto de 2025 .
  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. Dahl, Ole-Johan ; Myhrhaug, Bjørn; Nygaard, Kristen (1970). Simula: Un lenguaje para la programación y descripción de sistemas de eventos discretos: introducción y manual del usuario (PDF) (Informe). Centro Noruego de Computación. Archivado del original el 23 de agosto de 2025. Recuperado el 29 de octubre de 2025 .
  4. 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
  5. Wong, William. "¿Antes de C, qué usabas?" . Diseño electrónico . Consultado el 22 de mayo de 2017 .
  6. Holmevik, Jan Rune (1994). "Compiling Simula: A historical study of technology 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 . 
  7. Holmevik, Jan Rune. "Compiling Simula" . Oslo, Noruega: Instituto de Estudios en Investigación y Educación Superior. Archivado del original el 20 de abril de 2009. Recuperado el 19 de abril de 2017 .
  8. Holmevik, Jan Rune. "La historia de Simula" . Oslo, Noruega: Instituto de Estudios en Investigación y Educación Superior. Archivado del original el 27 de octubre de 2025. Recuperado el 27 de octubre de 2025 .
  9. Holmevik, Jan Rune. "El lenguaje de programación Simula" . Oslo, Noruega: Universidad de Oslo. Archivado del original el 27 de octubre de 2025. Recuperado el 27 de octubre de 2025 .
  10. ^ 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. S2CID 1000741 . 
  11. "GNU Cim" .
  12. "Portable Simula Revisited" . GitHub . Consultado el 17 de junio de 2019 .
  13. "ACM Ole-Johan Dahl y Kristen Nygaard - Obituario" . Acm.org. Archivado del original el 19 de julio de 2011. Consultado el 14 de enero de 2012 .
  14. "Conferencias del Premio Turing de la ACM" . Informatik.uni-trier.de . Consultado el 14 de enero de 2012 .

Fuentes

  • Sylvester, Peter. "Compilador IBM System 360/370 y documentación histórica" ​​(El estándar Simula y otra documentación histórica).

Lecturas adicionales

  • Pooley, Rob (1987), Introducción a la programación en Simula , Alfred Waller Ltd, ISBN 0632016116Archivado del original el 19 de septiembre de 2004.
  • Sitio web oficial (última versión operativa en archive.org, consultada el 26 de febrero de 2022).
  • Simula portátil revisitada en GitHub