stringtranslate.com

Speakeasy (entorno computacional)

Speakeasy era un entorno interactivo de computación numérica que también presentaba un lenguaje de programación interpretado . Fue desarrollado inicialmente para uso interno en la División de Física del Laboratorio Nacional 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 muy larga duración. De hecho, la versión original del entorno se construyó alrededor de un repositorio central de datos dinámicos llamado "almacenamiento con nombre" desarrollado a principios de la década de 1960, [6] [7] mientras que la versión más reciente se lanzó en 2006.

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

Historia

Speakeasy se concibió inicialmente para funcionar en mainframes (el único tipo de computadora en ese momento) y posteriormente se transfirió a nuevas plataformas ( minicomputadoras , computadoras personales ) a medida que estuvieron disponibles. La portabilidad del mismo código en diferentes plataformas se hizo más fácil mediante el uso de macros de metalenguaje de Mortran para enfrentar 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 , computadoras departamentales y estaciones de trabajo con varias versiones de Linux, AIX o Solaris .

Speakeasy también estuvo entre los primeros [ cita necesaria ] entornos informáticos numéricos interactivos, ya que se implementó de tal manera en un sistema CDC 3600 y más tarde en máquinas IBM TSO , ya que uno estaba en pruebas beta en el Laboratorio Nacional Argonne en ese momento. En 1984 ya estaba disponible en los sistemas VAX de Digital Equipment Corporation . [10] [11]

Casi desde el principio (cuando la funcionalidad de enlace dinámico estuvo disponible en los sistemas operativos), Speakeasy presenta la capacidad de ampliar su vocabulario operativo utilizando módulos separados, vinculados dinámicamente al procesador central según sean necesarios. Por esta razón, estos módulos se denominaron "linkules" (LINKable-modules). [12] Son funciones con una interfaz generalizada, que puede escribirse en FORTRAN [13] o en C. [ cita necesaria ] 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 en los viejos tiempos.

Los usuarios a menudo aprovechaban esta forma sencilla de ampliar las funcionalidades del procesador principal para desarrollar sus propios paquetes especializados. Además de los programas, funciones y subrutinas que el usuario puede escribir en el lenguaje interpretado propio del Speakeasy, los linkules añaden funcionalidades realizadas 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 llevó finalmente a su distribución como producto independiente.

Sintaxis

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

El signo del dólar se utiliza para delimitar comentarios; el símbolo comercial 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 varias 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, argumento_5, argumento_6) $ por otro lado , puedes recopilar varias declaraciones cortas $ en una sola línea física usando " ;" :_a=1; b=2; c=3; re=4                                          

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

:_ OBTENER my_data DE LA BIBLIOTECA my_project:_ MANTENGA mis_datos COMO un_nuevo_nombre_para_misdatos EN LA BIBLIOTECA otro_proyecto

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

:_a=1:_ que es unA es un ESCALAR REAL.:_ a="ahora una matriz de caracteres":_ que es unA es una MATRIZ DE CARACTERES de 21 elementos.

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

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

puede ser escrito :

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

o incluso

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

Son posibles muchas otras simplificaciones de sintaxis; por ejemplo, para definir un objeto llamado 'a' valorado en una matriz de diez elementos 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=ints(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 anterior, el resultado de la función sin aplicada a la matriz (llamémosla x ) generada por la función grid es la respuesta de la matriz cuyo elemento respuesta (i) es igual a sin ( x (i)) para cada i de 1 a 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 de -pi a pi, pasando por pi/32for i = 1,noels(x) $ bucles en los elementos de x a(i) = sin(x(i)) $ evalúa el i-ésimo elemento de asiguiente i $ incrementa el índice del bucle

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

Área de trabajo y objetos.

Desde la primera declaración de la sesión, el usuario puede definir el tamaño del "almacenamiento con nombre" (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 [17] ajustable por el usuario para maximizar el tamaño del bloque libre en el área de trabajo, empaquetando los objetos definidos en el extremo inferior o superior del asignador. En cualquier momento el usuario podrá consultar sobre el espacio utilizado o restante en el área de trabajo.

:_ TAMAÑO 100M $ primera declaración: el área de trabajo será de 100MB:_ TAMAÑO $ 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 formato

Dentro de restricciones razonables de conformidad y compatibilidad, los objetos Speakeasy pueden operarse usando la misma sintaxis algebraica.

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

Las familias de objetos

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

Los datos elementales pueden ser del tipo real (8 bytes), complejos (2x8 bytes), literales de caracteres o literales de nombre (los elementos de las matrices pueden ser reales o complejos, los valores de las series temporales solo pueden ser reales).

Valores faltantes

Para el procesamiento de series temporales , se proporcionan cinco tipos de valores perdidos . Se denotan por NA (no disponible), NC (no computable), ND (no definido), junto con NB y NE cuyo significado no está predeterminado y queda disponible para el desarrollador de enlaces. Están representados 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, propagándolos adecuadamente en los resultados.

Dependiendo de una configuración específica, los valores faltantes se pueden representar mediante la notación anterior, mediante un símbolo de interrogación o un espacio en blanco (útil en tablas). Cuando se utiliza en la entrada, el signo de interrogación se interpreta como un valor faltante de 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) = ?:_ showmval marca q:_ b B (una serie temporal con 4 componentes) 1 2 ? 4:_ 1/b 1/B (Una serie temporal con 4 componentes) 15 ? .25:_ showmval explica:_ b B (una serie temporal con 4 componentes) 1 2 NA 4:_ 1/b 1/B (Una serie temporal con 4 componentes) 1 .5 NC .25

En objetos numéricos que no sean series de tiempo, el concepto de "valores perdidos" no tiene sentido, y las operaciones numéricas sobre ellos utilizan los valores numéricos reales independientemente de si corresponden a "códigos de valores perdidos" o no (aunque se pueden ingresar "códigos de valores perdidos" y mostrado como tal).

:_ 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 de mostrar más partes 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 de al menos 859387 kilobytes.+:_ ?Utilice GRATIS para eliminar datos que ya no necesitaouse CHECKPOINT para guardar el asignador para reiniciarlo más tarde.+:_ ?Utilice NOMBRES para ver los nombres actualmente definidos.Utilice TAMAÑO Y RESTAURACIÓN 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 de Fortran ) y expresiones lógicas.

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

:_a = 1 2 3 4 5:_ b = 1 3 2 5 4:_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 (una matriz de 5 componentes) 1 0 0 0 0:_ logic(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 (una matriz de 5 componentes) TFFFF

Programación

Se pueden definir objetos especiales como "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 use y hacer que el procesador las lea mediante el comando USE.

Archivos de uso

"UTILIZAR" un archivo de uso es la forma más sencilla de realizar varias instrucciones con una mínima entrada escrita. (Esta operación corresponde aproximadamente a lo que es "obtener" un archivo en otros lenguajes de secuencias de comandos).

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 multilínea). 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 autor de la llamada al finalizar el archivo de uso llamado.

Trámites

La capacidad total de programación se logra mediante "procedimientos". En realidad son objetos Speakeasy, los cuales deben ser definidos en el área de trabajo a ejecutar. Hay una opción disponible para que los procedimientos se recuperen y carguen automáticamente desde el almacenamiento externo a medida que sean necesarios.

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 se puede ejecutar simplemente invocando su nombre o usándolo como argumento del comando EXECUTE. En el último caso, un argumento adicional puede identificar una etiqueta a partir de la cual comenzará la ejecución. Los programas Speakeasy se diferencian de otros procedimientos por ser ejecutados 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 quedarán allí para posteriores. usos. 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 de llamada 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 una función no son visibles para otras subrutinas y funciones sino a través de listas de argumentos.

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

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

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

Control de flujo

Una construcción IF-THEN-ELSE está disponible 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 usar para múltiples ramificaciones.

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

Escritura de enlace

Los enlaces son funciones generalmente escritas en Fortran (o, sin soporte, en C). Con la ayuda de macros 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. Pueden vincularse estáticamente al motor central o cargarse dinámicamente según sea necesario, siempre que estén compilados 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 el Speakeasy
  3. ^ "Una entrevista con CLEVE MOLER realizada por Thomas Haigh los días 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 . Así, APL, Speakeasy, LINPACK, EISPACK y PL0 fueron los predecesores de MATLAB.
  4. ^ "Una introducción al Speakeasy - Informe informal
  5. ^ Holl, Jack M.; Hewlett, Richard G.; Harris, Ruth R. (1997). Laboratorio Nacional Argonne, 1946-96. Prensa de la Universidad de Illinois. pag. 482.ISBN 978-0-252-02341-5.
  6. ^ "Almacenamiento con nombre: un esquema dinámico de asignación de almacenamiento con rutinas de manipulación", 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 EE. UU., 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". Comunicaciones de Física Informática . 2 (1): 1–10. Código bibliográfico : 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 Argonne , 1976
  10. ^ "Domine su computadora central". COPIA IMPRESA . Octubre de 1984. pág. 189.
  11. ^ "Boletín de Argonne Computing: SPEAKEASY". 1988. pág. 2526. {{cite web}}: Falta o está vacío |url=( ayuda )
  12. ^ "Speakeasy linkules - software compatible con enchufes" ACM - Actas de la conferencia anual de 1977
  13. ^ Cohen, Stan (1976). Speakeasy: una ventana a una computadora. Prensa ACM. págs. 1039-1047. doi :10.1145/1499799.1499944. ISBN 978-1-4503-7917-5. S2CID  11997344.
  14. ^ "Modelos econométricos vía 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. Prensa IOS. págs. 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. Prensa IOS. pag. 373.ISBN 978-1-58603-426-9.
  17. ^ El usuario puede decidir con qué frecuencia ocurren las recolecciones de basura, en términos de cantidad de objetos creados entre dos de ellos. Esta característica (comando SLOSH) en realidad está destinada a la depuración de enlaces.

enlaces externos