stringtranslate.com

simulación

Simula es el nombre de dos lenguajes de programación de simulación , Simula I y Simula 67, desarrollados en los años 1960 en el Centro Noruego de Computación de 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  Se introdujeron otras formas de subtipificación (además de heredar subclases) en los derivados de Simula. [ cita necesaria ]

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 [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), 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 reimplementan 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. [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 que él. Ole-Johan Dahl se unió a él en su trabajo en enero de 1962. Poco después se tomó la decisión de vincular el idioma 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.

Kristen Nygaard fue invitada a visitar Eckert-Mauchly Computer Corporation a finales 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 admirador de ALGOL y encontró convincente el proyecto Simula. Bemer también presidió una sesión en la segunda conferencia internacional sobre procesamiento de información organizada por la Federación Internacional para el 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 Noruego adquirió en agosto de 1963 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 estaba en pleno funcionamiento 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 del mundo y SIMULA I se implementó posteriormente en otras computadoras, incluidas la 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 prefijo y otras características para cumplir con 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 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 concepto de tipo y 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 idiomas SIMULA de DECsystem-10, publicado por el Instituto Sueco de Investigación de Defensa Nacional

Simula fue influyente en el desarrollo de Smalltalk y posteriores 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 una verdadera concurrencia . [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. El TOPS-10 implementó el concepto de variables y procedimientos de miembros públicos, protegidos y privados, que luego se integró en Simula Standard en 1986.

Simula Standard 1986 es el último estándar y está adaptado a una amplia gama de plataformas. Hay principalmente cuatro implementaciones:

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 y la implementación de SIMULA 67". En abril de 2002, recibieron el Premio AM 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, [10] antes de la conferencia del Premio ACM Turing [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 apertura 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 minimo

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 carece de valor de retorno del programa.

Hola mundo clásico

Un ejemplo de un programa Hola mundo en Simula:

Begin  OutText ("¡Hola, mundo!"); Imagen superada ;Fin ;

Simula no distingue entre mayúsculas y minúsculas .

Clases, subclases y trámites virtuales

Un ejemplo más realista con uso de clases, [1] : 1.3.3, 2  subclases [1] : 2.2.1  y procedimientos virtuales: [1] : 2.2.3 

Glifo de inicio de  clase ; Virtual : Impresión de procedimiento Es impresión de procedimiento ;; comienzo  fin ; Carácter de clase de glifo (c); Carácter c; Iniciar  procedimiento de impresión; OutChar(c); Fin ; Línea de clase de glifo (elementos); Ref (Glifo) Elementos de matriz ; Iniciar  procedimiento de impresión; Comienza  el entero i; Para i:= 1 Paso 1 Hasta UpperBound (elementos, 1) Hacer elementos (i).impresión; Imagen exterior; 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.imprimir;Fin ;

El ejemplo anterior tiene una superclase (Glifo) 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 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 de tiempo de ejecución .

Llamar por nombre

Simula admite llamadas por nombre [1] : 8.2.3  para que el dispositivo de Jensen pueda implementarse fácilmente. Sin embargo, el modo de transmisión predeterminado para parámetros simples es llamar por valor , a diferencia de ALGOL que usaba llamar por nombre . Por lo tanto, el código fuente del dispositivo de Jensen debe especificar la llamada por nombre para los parámetros cuando lo compila un compilador Simula.

Otro ejemplo mucho más sencillo 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; Tú real ;Comienzan los  reales ; k:= metro; Mientras k <= n comience  s := s + u; k:= k + 1; Fin ; Sigma:= s;Fin ;

El código anterior utiliza una 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 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 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 exclusivamente el probador durante unos tres minutos, siguiendo cada uno una distribución normal. Una simulación de su experiencia en el probador es la siguiente:

Simulación Inicio  Clase Probador; Comenzar puerta  Ref (Cabeza); booleano en uso; Solicitud de trámite ; Comience  si está en uso, luego  comience Espere (puerta); puerta.Primera.Salida; Fin ; en uso:= Verdadero ; Fin ; Licencia de trámite ; Comenzar en uso: = False ; Activar puerta.Primero; Fin ; puerta:- Nuevo Jefe; Fin ;  Informe de procedimiento (mensaje); Mensaje de texto ; Comenzar OutFix (Tiempo, 2, 0); OutText (": " & mensaje); Imagen exterior; Fin ; Persona de clase de proceso (pname); Nombre de texto ; Comience  mientras  es verdadero  , comience  Mantener (Normal (12, 4, u)); informe (pname & "está solicitando el probador"); probador1.request; informe (pname & "ha entrado en el probador"); Mantener (Normal (3, 1, u)); probador1.dejar; informe (pname & " ha abandonado el 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 tiene el prefijo Simulationpara permitir 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 que realiza simulaciones.

El objeto 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) es liberado de la cola ( Activate door.first) y, en consecuencia, eliminado de la cola de la puerta ( door.First.Out).

Persona es una subclase de Processy su actividad se describe mediante espera (tiempo de navegación en la tienda y tiempo pasado en el probador) y llamadas a procedimientos en el objeto del 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 dura 100 minutos de tiempo simulado antes de que finalice.

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}}: Mantenimiento CS1: 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é usaste?". Diseño Electrónico . Consultado el 22 de mayo de 2017 .
  5. ^ Holmevik, Jan Rune (1994). "Compilación de Simula: un estudio histórico de la génesis tecnológica" (PDF) . Anales IEEE de la historia de la informática . 16 (4): 25–37. doi : 10.1109/85.329756. S2CID  18148999 . Consultado el 12 de mayo de 2010 .
  6. ^ Holmevik, Jan Rune. "Compilando simulación". 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 .
  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. S2CID  1000741.
  8. ^ "GNU Cim".
  9. ^ "Simula portátil revisada". 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 ACM Turing". Informatik.uni-trier.de . Consultado el 14 de enero de 2012 .

Fuentes

Otras lecturas

enlaces externos