stringtranslate.com

Speakeasy (entorno computacional)

Speakeasy era un entorno interactivo de computación numérica que también incluía un lenguaje de programación interpretado . Fue desarrollado inicialmente para uso interno en la División de Física del Laboratorio Nacional de Argonne por el físico teórico Stanley Cohen . [4] Finalmente, fundó Speakeasy Computing Corporation para que el programa estuviera disponible comercialmente. [5]

Speakeasy es un paquete numérico de larga duración. De hecho, la versión original del entorno se construyó en torno a un repositorio de datos dinámicos central llamado "Almacenamiento con nombre" desarrollado a principios de los años 60, [6] [7] mientras que la versión más reciente se publicó en 2006.

Speakeasy tenía como objetivo facilitar el trabajo computacional de los físicos del Laboratorio Nacional Argonne. [8]

Historia

Speakeasy fue inicialmente concebido para funcionar en mainframes (el único tipo de ordenadores en ese momento), y posteriormente fue portado a nuevas plataformas ( miniordenadores , ordenadores personales ) a medida que estaban disponibles. La portabilidad del mismo código en diferentes plataformas se hizo más fácil mediante el uso de macros del metalenguaje Mortran para hacer frente a las dependencias de los sistemas y las deficiencias y diferencias de los compiladores. [9] Speakeasy está actualmente disponible en varias plataformas: PC con Windows , macOS , Linux , ordenadores departamentales y estaciones de trabajo con varias versiones de Linux, AIX o Solaris .

Speakeasy también fue uno de los primeros [ cita requerida ] entornos informáticos numéricos interactivos, habiéndose implementado de esa manera en un sistema CDC 3600 y, más tarde, en máquinas IBM TSO, ya que una de ellas se encontraba en fase de prueba beta en el Laboratorio Nacional Argonne en ese momento. En 1984, estaba disponible en los sistemas VAX de Digital Equipment Corporation . [10] [11]

Casi desde el principio (cuando la funcionalidad de enlace dinámico se hizo disponible en los sistemas operativos) Speakeasy cuenta con la capacidad de expandir su vocabulario operacional utilizando módulos separados, enlazados dinámicamente al procesador principal a medida que se necesitan. Por esa razón, dichos módulos fueron llamados "linkules" (LINKable-modules). [12] Son funciones con una interfaz generalizada, que pueden ser escritas en FORTRAN [13] o en C. [ cita requerida ] La independencia de cada uno de los nuevos módulos de los demás y del procesador principal es de gran ayuda para mejorar el sistema, especialmente lo fue en los viejos tiempos.

Esta sencilla forma de ampliar las funcionalidades del procesador principal fue aprovechada a menudo por los usuarios para desarrollar sus propios paquetes especializados. Además de los programas, funciones y subrutinas que el usuario puede escribir en el lenguaje interpretado propio de Speakeasy, los linkules añaden funcionalidades que se ejecutan con las prestaciones típicas de los programas compilados.

Entre los paquetes desarrollados por los usuarios, uno de los más importantes es "Modeleasy", desarrollado originalmente como "FEDeasy" [14] a principios de los años 1970 en el departamento de investigación de la Junta de Gobernadores de la Reserva Federal en Washington DC. [15] Modeleasy implementa objetos y funciones especiales para la estimación y simulación de grandes modelos econométricos. [16] Su evolución condujo eventualmente a su distribución como un producto independiente.

Sintaxis

El símbolo :_ (dos puntos + guión bajo) es a la vez el logotipo de Speakeasy y el mensaje de la sesión interactiva.

El signo de dólar se utiliza para delimitar comentarios; el ampersand se utiliza para continuar una declaración en la siguiente línea física, en cuyo caso el mensaje se convierte en :& (dos puntos + ampersand); un punto y coma puede separar declaraciones escritas en la misma línea física.

$ supongamos que tiene  una declaración muy larga, $ puede escribirla en múltiples líneas físicas usando " & " $ al final de la línea que continuará : : _ the_return_value = this_is_a_function_with_many_arguments(argument_1, argument_2, & : & argument_3, argument_4, argument_5, argument_6) $ por otro lado , puede recopilar varias declaraciones cortas $ en una sola línea física usando ";" :_ a=1; b=2; c=3; d= 4                                          

Como su propio nombre indica, Speakeasy tenía como objetivo presentar una sintaxis lo más amigable posible para el usuario y lo más cercana posible al lenguaje hablado. El mejor ejemplo de ello lo da el conjunto de comandos para leer/escribir datos desde/hacia el almacenamiento permanente. Por ejemplo (las palabras clave de los idiomas están en mayúsculas para aclarar el punto):

:_ OBTENER mis_datos DE LA BIBLIOTECA mi_proyecto:_ MANTENER mis_datos COMO un_nuevo_nombre_para_mis_datos EN LA BIBLIOTECA otro_proyecto

A las variables (es decir, los objetos de Speakeasy) se les asigna un nombre de hasta 255 caracteres cuando la opción LONGNAME está activada, y de hasta 8 caracteres en caso contrario (para compatibilidad con versiones anteriores). Se tipifican dinámicamente, según el valor que se les asigne.

:_ a=1:_ ¿qué es un?A es un ESCALAR REAL.:_ a="ahora una matriz de caracteres":_ ¿qué es un?A es una MATRIZ DE CARACTERES de 21 elementos.

Normalmente no es necesario que los argumentos de las funciones estén entre paréntesis o separados por comas, siempre que el contexto sea claro e inequívoco. Por ejemplo:

:_ sin(grid(-pi,pi,pi/32)) $ sintaxis completamente especificada

se puede escribir:

:_ sin grid(-pi,pi,pi/32) $ el argumento de la función sin no está rodeado por paréntesis

o incluso

:_ sin grid(-pi pi pi/32) $ los argumentos de la función grid pueden separarse por espacios

Son posibles muchas otras simplificaciones de sintaxis; por ejemplo, para definir un objeto llamado 'a' cuyo valor es una matriz de diez elementos de ceros, se puede escribir cualquiera de las siguientes declaraciones:

:_ a=matriz(10:0,0,0,0,0,0,0,0,0,0):_ a=0,0,0,0,0,0,0,0,0,0:_ a=0 0 0 0 0 0 0 0 0 0:_ a=int(10)*0:_ a=10:

Speakeasy es un lenguaje orientado a vectores : al dar un argumento estructurado a una función de un escalar, el resultado suele ser un objeto con la misma estructura del argumento, en el que cada elemento es el resultado de la función aplicada al elemento correspondiente del argumento. En el ejemplo dado anteriormente, el resultado de la función sin aplicada a la matriz (llamémosla x ) generada por la función grid es la matriz answer cuyo elemento answer (i) es igual a sin ( x (i)) para cada i desde 1 hasta noels (x) (el número de elementos de x ). En otras palabras, la declaración

:_ a=sin(cuadrícula(-pi pi pi/32))

es equivalente al siguiente fragmento de programa:

x=grid(-pi pi pi/32) $ genera una matriz de números reales desde -pi hasta pi, avanzando paso a paso por pi/32para i = 1,noels(x) $ bucles en los elementos de x a(i) = sin(x(i)) $ evalúa el i-ésimo elemento de aA continuación, i $ incrementa el índice del bucle.

Las declaraciones orientadas a vectores evitan escribir programas para dichos bucles y son mucho más rápidas que ellos.

Área de trabajo y objetos

En la primera declaración de la sesión, el usuario puede definir el tamaño del "almacenamiento designado" (o "área de trabajo" o "asignador"), que se asigna de una vez por todas al comienzo de la sesión. Dentro de esta área de trabajo de tamaño fijo, el procesador Speakeasy crea y destruye dinámicamente los objetos de trabajo según sea necesario. Se proporciona un mecanismo de recolección de basura ajustable por el usuario [17] para maximizar el tamaño del bloque libre en el área de trabajo, empacando los objetos definidos en el extremo inferior o superior del asignador. En cualquier momento, el usuario puede preguntar sobre el espacio utilizado o restante en el área de trabajo.

:_ TAMAÑO 100M $ primera declaración: el área de trabajo será de 100 MB:_ SIZE $ devuelve el tamaño del área de trabajo en la sesión actual:_ SPACELEFT $ devuelve la cantidad de espacio de almacenamiento de datos actualmente no utilizado:_ SPACENOW $ devuelve la cantidad de espacio de almacenamiento de datos utilizado actualmente:_ SPACEPEAK $ devuelve la cantidad máxima de espacio de almacenamiento de datos utilizado en la sesión actual

Orientación de objetos sin procesar

Dentro de límites razonables de conformidad y compatibilidad, los objetos Speakeasy pueden operarse utilizando la misma sintaxis algebraica.

Desde este punto de vista, y considerando la naturaleza dinámica y estructurada de los datos almacenados en el "almacenamiento nombrado", es posible decir que Speakeasy desde el principio implementó una forma muy cruda de sobrecarga de operadores , y un enfoque pragmático de algunas características de lo que más tarde se llamó " Programación Orientada a Objetos ", aunque no evolucionó más en esa dirección.

Las familias de objetos

Speakeasy proporciona un conjunto de "familias" predefinidas de objetos de datos: escalares, matrices (hasta 15 dimensiones), conjuntos, series de tiempo.

Los datos elementales pueden ser de tipo real (8 bytes), complejo (2x8 bytes), literal de carácter o literal de nombre (los elementos de las matrices pueden ser reales o complejos, los valores de las series de tiempo solo pueden ser reales).

Valores faltantes

Para el procesamiento de series temporales , se proporcionan cinco tipos de valores faltantes . Se denotan por NA (no disponible), NC (no computable), ND (no definido), junto con NB y NE, cuyo significado no está predeterminado y se deja disponible para el desarrollador de linkules. Se representan internamente por valores numéricos específicos (y muy pequeños), que actúan como códigos.

Todas las operaciones de series de tiempo se encargan de la presencia de valores faltantes y los propagan adecuadamente en los resultados.

Según la configuración específica, los valores faltantes se pueden representar con la notación anterior, con un signo de interrogación o con un espacio en blanco (útil en tablas). Cuando se utiliza en la entrada, el signo de interrogación se interpreta como un valor faltante NA.

:_ b=serie temporal(1,2,3,4 : 2010 1 4):_ b B (Una serie temporal con 4 componentes) 1 2 3 4:_ b(2010 3) = ?:_ marca q de showmval:_ b B (Una serie temporal con 4 componentes) 1 2 ? 4:_ 1/b 1/B (Una serie temporal con 4 componentes) 1,5 ? ,25:_ showmval explica:_ b B (Una serie temporal con 4 componentes) 1 2 N/A 4:_ 1/b 1/B (Una serie temporal con 4 componentes) 1,5 NC 0,25

En objetos numéricos distintos de series de tiempo, el concepto de "valores faltantes" no tiene sentido y las operaciones numéricas sobre ellos utilizan los valores numéricos reales independientemente de que correspondan o no a "códigos de valores faltantes" (aunque los "códigos de valores faltantes" se pueden ingresar y mostrar como tales).

:_ 1+? 1+? = 1,00 :_ 1/? 1/? = 5.3033E36 :_ 1*? 1*?= ?

Tenga en cuenta que, en otros contextos, un signo de interrogación puede tener un significado diferente: por ejemplo, cuando se usa como el primer (y posiblemente único) carácter de una línea de comando, significa la solicitud para mostrar más fragmentos de un mensaje de error largo (que termina con un símbolo "+").

:_ a=matriz(10000,10000:)ARRAY(10000,10000:) En la línea "A=ARRAY(10000,10000:)" Demasiados datos.+:_ ?El tamaño del asignador debe ser al menos 859387 kilobytes.:_ ?Utilice FREE para eliminar datos que ya no necesitaoUtilice CHECKPOINT para guardar el asignador para reiniciar más tarde.:_ ?Utilice NOMBRES para ver los nombres definidos actualmente.Utilice TAMAÑO Y RESTAURAR para reiniciar con un asignador más grande.:_ ?NO HAY MÁS INFORMACIÓN DISPONIBLE.

Valores lógicos

Se proporciona cierto soporte para valores lógicos, operadores relacionales ( se puede utilizar la sintaxis Fortran ) y expresiones lógicas.

Los valores lógicos en realidad se almacenan como valores numéricos: donde 0 significa falso y un valor distinto de cero (1 en la salida) significa verdadero.

:_ a = 1 2 3 4 5:_b=13254:_ a>b A>B (una matriz de 5 componentes) 0 0 1 0 1:_ a<=b A<=B (una matriz de 5 componentes) 1 1 0 1 0:_ a.eq.b A.EQ.B (Matriz de 5 componentes) 1 0 0 0 0:_ logical(2) $ esto cambia la forma en que se muestran los valores lógicos:_ a>b; a<=b; a.eq.b A>B (una matriz de 5 componentes) FFTFT A<=B (una matriz de 5 componentes) TTFTF A.EQ.B (Matriz de 5 componentes) ¡Joder!

Programación

Se pueden definir objetos especiales como los objetos "PROGRAMA", "SUBRUTINA" y "FUNCIÓN" (denominados colectivamente procedimientos ) para la automatización de operaciones. Otra forma de ejecutar varias instrucciones con un solo comando es almacenarlas en un archivo de uso y hacer que el procesador las lea mediante el comando USE.

Archivos de uso

"USEar" un archivo de uso es la forma más sencilla de ejecutar varias instrucciones con una mínima entrada de datos tipeados. (Esta operación se corresponde aproximadamente con lo que es "source-ing" (utilizar como fuente) un archivo en otros lenguajes de programación).

Un archivo de uso es una fuente de entrada alternativa a la consola estándar y puede contener todos los comandos que un usuario puede ingresar mediante el teclado (por lo tanto, no se permite ninguna construcción de control de flujo de varias líneas). El procesador lee y ejecuta archivos de uso una línea a la vez.

La ejecución del archivo de uso se puede concatenar, pero no anidar, es decir, el control no regresa al llamador una vez finalizado el archivo de uso llamado.

Procedimientos

La plena capacidad de programación se consigue mediante el uso de "procedimientos". En realidad, son objetos de Speakeasy, que deben definirse en el área de trabajo para ser ejecutados. Existe una opción para que los procedimientos se recuperen y carguen automáticamente desde el almacenamiento externo a medida que se necesiten.

Los procedimientos pueden contener cualquiera de las construcciones de control de flujo de ejecución disponibles en el lenguaje de programación Speakeasy.

Programas

Un programa puede ejecutarse simplemente invocando su nombre o utilizándolo como argumento del comando EXECUTE. En este último caso, un argumento adicional puede identificar una etiqueta desde la que comenzará la ejecución. Los programas de Speakeasy se diferencian de los demás procedimientos en que se ejecutan en el mismo "nivel" de alcance al que están referenciados, por lo que tienen visibilidad completa de todos los objetos definidos en ese nivel, y todos los objetos creados durante su ejecución se dejarán allí para usos posteriores. Por ese motivo, no se necesita una lista de argumentos.

Subrutinas y funciones

Las subrutinas y funciones se ejecutan en un nuevo nivel de alcance, que se elimina cuando finalizan. La comunicación con el nivel de alcance que las llama se realiza a través de la lista de argumentos (en ambas direcciones). Esto implementa la ocultación de datos, es decir, los objetos creados dentro de una subrutina o función no son visibles para otras subrutinas y funciones, sino a través de listas de argumentos.

Hay un nivel global disponible para almacenar objetos que deben ser visibles desde cualquier procedimiento, por ejemplo los procedimientos mismos.

Las funciones se diferencian de las subrutinas porque también devuelven un valor funcional; la referencia a ellas puede ser parte de una declaración más compleja y se reemplaza por el valor funcional devuelto al evaluar la declaración.

En cierto punto, las subrutinas y funciones de Speakeasy son muy similares a los procedimientos Fortran del mismo nombre.

Control de flujo

Hay disponible una construcción IF-THEN-ELSE para ejecución condicional y se proporcionan dos formas de construcción FOR-NEXT para bucles.

Se proporciona una declaración "GO TO label " para saltar, mientras que una declaración GO TO calculada similar a Fortran se puede utilizar para ramificaciones múltiples.

Un mecanismo ON ERROR, con varias opciones, proporciona un medio para el manejo de errores.

Escritura de enlaces

Las funciones de enlace son funciones que suelen estar escritas en Fortran (o, si no se admite, en C). Con la ayuda de macros de Mortran o C y una biblioteca API, pueden interactuar con el área de trabajo de Speakeasy para recuperar, definir y manipular cualquier objeto de Speakeasy.

La mayor parte del vocabulario operativo de Speakeasy se implementa mediante enlaces. Se pueden vincular estáticamente al motor principal o cargarse dinámicamente según sea necesario, siempre que se compilen correctamente como objetos compartidos (Unix) o DLL (Windows).

Notas

  1. ^ Plataformas compatibles
  2. ^ Rubinsteyn, Alex (2014). Compilación en tiempo de ejecución de programas Python orientados a matrices (PDF) (Ph.D.). Universidad de Nueva York. APL inspiró directamente a Speakeasy
  3. ^ "Entrevista con CLEVE MOLER realizada por Thomas Haigh el 8 y 9 de marzo de 2004 en Santa Bárbara, California" (PDF) . Museo de Historia de la Computación . Consultado el 6 de diciembre de 2016. APL, Speakeasy, LINPACK, EISPACK y PL0 fueron los predecesores de MATLAB.
  4. ^ "Una introducción a Speakeasy - Informe informal
  5. ^ Holl, Jack M.; Hewlett, Richard G.; Harris, Ruth R. (1997). Laboratorio Nacional Argonne, 1946-96. University of Illinois Press. pág. 482. ISBN 978-0-252-02341-5.
  6. ^ "Almacenamiento con nombre: un esquema dinámico de asignación de almacenamiento con rutinas manipulativas", Informe de investigación y desarrollo de AEC - Volumen 7021 ANL (Serie) - Stanley Cohen, División de Física, Comisión de Energía Atómica de Estados Unidos, Laboratorio Nacional Argonne, 1965.
  7. ^ "Speakeasy - Un sistema evolutivo", S. Cohen, Actas del simposio ACM SIGPLAN sobre lenguajes de muy alto nivel (marzo de 1974)
  8. ^ Cohen, Stanley (1971). "El sistema Delphi-speakeasy. I. Descripción general". Computer Physics Communications . 2 (1): 1–10. Bibcode :1971CoPhC...2....1C. doi :10.1016/0010-4655(71)90008-7.
  9. ^ "Uso de Mortran para traducir programas Fortran de una máquina a otra" Steven C. Pieper, Laboratorio Nacional de Argonne , 1976
  10. ^ "Domina tu mainframe". COPIA IMPRESA . Octubre de 1984. pág. 189.
  11. ^ "Boletín de informática de Argonne: SPEAKEASY". 1988. pág. 2526. {{cite web}}: Falta o está vacío |url=( ayuda )
  12. ^ "Speakeasy Linkules - software compatible con plug" ACM - Actas de la conferencia anual de 1977
  13. ^ Cohen, Stan (1976). Speakeasy: una ventana a una computadora. ACM Press. pp. 1039–1047. doi :10.1145/1499799.1499944. ISBN 978-1-4503-7917-5.S2CID 11997344  .
  14. ^ "Modelos econométricos a través de SPEAKEASY/FEDEASY", James M. Condie, John W. Davison, 1975
  15. ^ Renfro, Charles G. (2004). Econometría computacional: su impacto en el desarrollo de la economía cuantitativa. IOS Press. pp. 46–47. ISBN 978-1-58603-426-9.
  16. ^ Renfro, Charles G. (2004). Econometría computacional: su impacto en el desarrollo de la economía cuantitativa. IOS Press. pág. 373. ISBN 978-1-58603-426-9.
  17. ^ El usuario puede decidir con qué frecuencia se realizan las recolecciones de basura, en términos de la cantidad de objetos creados entre dos de ellas. Esta característica (comando SLOSH) está destinada en realidad a la depuración de enlaces.

Enlaces externos