De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda
Parte de una sesión de JOSS en RAND en 1970 en la que el usuario realiza una serie de cálculos simples en "modo directo". Note la diferencia entre el punto al final de los enunciados y el interpunto para la multiplicación.

JOSS , un acrónimo de JOHNNIAC Open Shop System , [a] fue uno de los primeros lenguajes de programación interactivos de tiempo compartido . Fue pionera en una serie de características que se volverían comunes en los lenguajes desde la década de 1960 hasta la de 1980, incluido el uso de números de línea como instrucciones de edición y destinos para ramas, declaraciones basadas en decisiones booleanas y un editor integrado que puede ejecutar instrucciones. en modo "directo" o "inmediato", lo que ellos denominaron una interfaz de usuario conversacional .

JOSS se implementó inicialmente en la máquina JOHNNIAC en Rand Corporation y se puso en línea en 1963. Resultó muy popular y los usuarios atascaron rápidamente la máquina. En 1964 se buscó un reemplazo con mayor rendimiento. JOHNNIAC se retiró en 1966 y fue reemplazado por un PDP-6 , que finalmente creció para admitir cientos de terminales de computadora basados ​​en IBM Selectric . Los terminales usaban tinta verde para la entrada del usuario y negra para la respuesta de la computadora. Cualquier orden que no se entendió provocó la respuesta "¿Eh?" o "LO SIENTO".

El sistema fue muy influyente y generó una variedad de puertos y ramificaciones. Algunos permanecieron similares al original, como TELCOMP y STRINGCOMP , CAL , CITRAN, ISIS, PIL / I, JEAN ( ICT serie 1900 ), AID ( PDP-10 ); mientras que otros, como FOCAL y MUMPS , se desarrollaron en direcciones distintivas. También tiene un gran parecido con los intérpretes BASIC encontrados en microcomputadoras en la década de 1980, difiriendo principalmente en los detalles de sintaxis.

Historia [ editar ]

Idea inicial [ editar ]

En 1959, Willis Ware escribió un memorando de Rand sobre el tema de la informática en el que afirmaba que las computadoras futuras tendrían "una multiplicidad de estaciones de entrada y salida personales, de modo que muchas personas puedan interactuar con la máquina al mismo tiempo". [2] El memorándum ganó el interés de la Fuerza Aérea de los Estados Unidos , los patrocinadores principales de Rand, y en 1960 formaron el Proyecto del Procesador de Información para explorar este concepto, lo que pronto se conocería como tiempo compartido . El proyecto no se refería específicamente al tiempo compartido, sino que tenía como objetivo mejorar la interacción entre humanos y computadoras en general. La idea en ese momento era que la interacción constante entre el usuario y la computadora en forma de ida y vuelta haría que tales interacciones fueran más naturales. [2]Como dijo más tarde el director de JOSS, Keith Uncapher :

Hubo dos percepciones que creo que impulsaron el experimento. Uno fue, al menos desde 1950, cuando me uní a Rand, siempre hubo un enfoque en la parte de informática de Rand hacia la interacción fluida del usuario. Simplemente fue construido dentro de nosotros. Lo aprendimos de Gunning. ... todo lo que pensamos. La otra fue, ver a los matemáticos luchando con las calculadoras de Marchant, no poder usar JOHNNIAC en su forma cruda. Fue demasiado difícil. Tuvieron que aprender a ser programadores. Fue una experiencia frustrante para ellos. Queríamos algo que les pareciera una forma natural de pensar en una ayuda para la solución de sus problemas sin mucha capacitación y sin ninguna percepción de convertirse en programadores, porque eso los habría mantenido alejados. [3]

En marzo de 1961 se aceptó una propuesta formal para desarrollar lo que se convirtió en JOSS en la computadora JOHNNIAC . [2]

JOSS-1 [ editar ]

JOSS fue implementado casi en su totalidad por J. Clifford Shaw , un matemático que trabajó en la creciente división de computación de Rand. Estaba escrito en un lenguaje ensamblador simbólico llamado EasyFox (E y F en el alfabeto fonético del ejército estadounidense de esa época), también desarrollado por Shaw. [4]

El sistema JOSS se planteó formalmente por primera vez en mayo de 1963, admitiendo cinco consolas, una en la sala de máquinas y otras cuatro en oficinas alrededor del edificio. [5] Las primeras consolas se basaron en la máquina de escribir transmisora ​​modelo 868 de IBM, ya que la Selectric aún no se había introducido en el mercado cuando comenzó el desarrollo. [6] El primer programa se publicó el 17 de junio, con JOSS funcionando durante tres horas de 9 a.m. a 12 todos los días. [7] Se declaró en pleno funcionamiento en ocho terminales en enero de 1964. [1] La versión final se implementó en enero de 1965. [8]

Para entonces, el JOHNNIAC ya tenía más de una década y, para empezar, su lógica basada en tubos nunca fue muy confiable. Incluso cuando funcionaba bien, el sistema se hizo tan popular que rápidamente se empantanó. Los usuarios estaban entusiasmados, uno dijo:

La gente ajusta sus vidas para adaptarse a JOSS ... No sirve de nada entrar en RAND antes de las 10:00 am cuando llega JOSS, de hecho, el mediodía o después de las 5:00 pm es un mejor momento, JOSS está menos ocupado. Cuando JOSS comienza a escribir respuestas, el placer excitante es igualado solo por la angustia resultante cuando JOSS se pone a bromear o se aleja recomendando su código al olvido. Difícilmente podemos vivir con JOSS, pero no podemos vivir sin él. [9]

Otro lo expresó de manera más sucinta:

Es mejor que la cerveza, estamos enganchados. [1]

Cambio de JOSS-2 [ editar ]

En mayo de 1964, se tomó la decisión de buscar una nueva máquina para reemplazar la JONNIAC y dedicarla por completo a ejecutar una versión ampliada de JOSS. La máquina también tendría que admitir nuevos terminales fabricados según las especificaciones de Rand y se entregaría antes del 31 de octubre de 1965. [7]

Se recibieron un total de nueve ofertas por la nueva máquina. Digital Equipment Corporation (DEC) ganó el concurso con su nuevo sistema PDP-6 y se liberaron fondos de la Fuerza Aérea para la compra. DEC también acordó construir treinta terminales basadas en la máquina de escribir IBM Selectric modificada con un mecanismo especial para avanzar a la página siguiente en una alimentación de papel plegado en abanico. Varias otras partes del sistema general fueron entregadas por otras compañías. [10]

El PDP-6 llegó a finales de julio de 1965 y se probó inicialmente utilizando como terminales el Teletype Model 33 . La nueva versión del código fue desarrollada por Charles L. Baker, Joseph W. Smith, Irwin D. Greenwald y G. Edward Bryan. El sistema se declaró operativo por primera vez en octubre, aunque esto incluyó seis horas de mantenimiento programado por semana. [11] El primer prototipo de terminal llegó en noviembre. En diciembre, una terminal en Las Vegas se conectó a la máquina de forma remota por primera vez. [10] En febrero de 1966, se envió a la Base de la Fuerza Aérea McClellan , seguido de uno en agosto a la Academia de la Fuerza Aérea y dos en septiembre a ARPA.y una oficina de la Fuerza Aérea en el Pentágono . La primera conexión permanente de teletipo externo para un teletipo Modelo 35 se instaló en la Base de la Fuerza Aérea de Langley en febrero de 1967. [11]

Con la nueva máquina en funcionamiento, JOHNNIAC se desconectó el 11 de febrero de 1966 y se retiró oficialmente el 18 de febrero. Su último programa en ejecución se escribió en JOSS y contó segundos hasta que se apagó. La máquina fue enviada al Museo del Condado de Los Ángeles , [12] y finalmente terminó en el Museo de Historia de la Computación en las afueras de San Francisco . [13] Habiendo sido reemplazado por el sistema JOSS-2, el original fue conocido retroactivamente como JOSS-1. [14]

Uso de JOSS-2 [ editar ]

A fines de 1966, el nuevo sistema JOSS-2 era completamente funcional y se entregó al uso de JOSS las 24 horas del día, los 7 días de la semana. La nueva máquina ofrecía unas 30 veces la velocidad de cálculo, cinco veces el espacio de almacenamiento por usuario y muchas funciones nuevas en el propio idioma. [15] [1] La nueva plataforma podría soportar en última instancia hasta 100 terminales en uso simultáneo. [16] La Fuerza Aérea siguió siendo la propietaria del sistema, con Rand y otros operando como consultores. El tiempo de la CPU se facturaba a los usuarios externos a una tasa de alrededor de $ 1 por minuto, aunque eso fue solo durante la ejecución real, el tiempo dedicado a escribir e imprimir fue gratuito. [17]

Para 1970, había entre 500 y 600 usuarios en Rand y varios sitios de la Fuerza Aérea en todo el país. [18] Muchos de ellos eran usuarios ocasionales, precisamente para lo que estaba destinado el sistema. Para apoyarlos, los terminales personalizados fueron equipados con "enchufes JOSS" especiales para que pudieran ser transportados de oficina en oficina y enchufados a enchufes personalizados. Doscientos de los enchufes se instalaron alrededor de Rand, y el chasis del terminal se diseñó para ser lo suficientemente estrecho como para pasar por las puertas y dejar espacio para un café en un lado. [19] Al alternar el interruptor de encendido en el terminal, se conectó en la nueva ubicación. [dieciséis]

Los terminales personalizados habían sido diseñados para JOSS ya que los ingenieros sintieron que las "funciones de telecomunicaciones del Modelo 33 son un misterio para la persona no capacitada" y serían demasiado confusas para que los usuarios ocasionales se molestaran en aprender. [20] En la práctica, los mecanismos basados ​​en Selectric demostraron ser demasiado frágiles para el uso constante que veían y los militares de IBM los reparaban con frecuencia en el campo. En 1970, un tercio completo de los terminales se reconstruyeron por completo y la salida de la computadora se redujo para mejorar la confiabilidad. La Fuerza Aérea, en ese momento, había decidido usar el Modelo 35 en su lugar, ya que estaba fácilmente disponible y era mucho menos costoso. [21] [11]

Los usos fueron entusiastas y para servirlos, Rand comenzó a publicar The JOSS Newsletter , editado por Shirley Marks. Finalmente, se publicaron 44 números entre noviembre de 1967 y junio de 1971. [22]

JOSS-3 [ editar ]

A principios de la década de 1970, los programadores de una de las instalaciones de la costa oeste de IBM construyeron un JOSS-3 para el IBM 370/158 con OS / 360 . Existe poca información sobre este sistema, con la excepción de que fue en esta máquina donde JOSS finalmente se retiró. [23] Según una nota en un resumen histórico, Rand dudaba en permitir que IBM usara el nombre JOSS y, como resultado, "la versión de IBM nunca se usó ampliamente". [24]

Implementación [ editar ]

JOSS utilizó una bola de tipo personalizado, similar a este ejemplo, para sus terminales de máquina de escribir IBM Selectric para proporcionar símbolos matemáticos.

JOSS-II en el PDP-6 se dividió en dos partes, coincidiendo con el diseño de la memoria interna de la máquina. La máquina estaba equipada con dos bancos de memoria central , con 16k palabras de 36 bits en cada banco. El propio sistema JOSS, que incluía el sistema operativo , el código de gestión de archivos y usuarios, el gestor de terminales y el intérprete, consumió gran parte del primero de estos bancos. El segundo banco se utilizó para programas de usuario. Aunque se trataba de una cantidad de memoria relativamente grande para la época, el sistema se utilizó tan intensamente que el almacenamiento de usuarios de 16k palabras no fue suficiente y se hizo una copia de seguridad con un tambor magnético para soporte de paginación. [16] El tambor fue accionado por hardware externo y no requirió atención del procesador principal. [25]

Para admitir múltiples programas de usuario, el hardware del PDP-6 se modificó para examinar el bit-20 de cualquier referencia de dirección. Si se estableció este bit, la dirección estaba en "espacio de usuario" y se modificó para que la dirección cero apuntara a la dirección base de ese usuario. De esta manera, los programas de usuario podrían moverse en la memoria sin causar problemas al sistema, y ​​el sistema operativo podría cambiar de usuario a usuario simplemente cambiando un solo registro interno. [dieciséis]

El almacenamiento permanente fue proporcionado por un disco duro de Storage Products con 5.7 millones de palabras de almacenamiento. Al igual que el tambor, la entrada / salida real hacia y desde el tambor se manejó externamente, aunque en este caso el movimiento fue provocado por las acciones del usuario para cargar y almacenar sus programas. Se utilizó una unidad de cinta compatible con IBM para mover datos hacia y desde la unidad según fuera necesario, una operación que también era independiente de la CPU. También estaban disponibles dos unidades DECtape que funcionaban de la misma forma que la unidad IBM. [26]

Los terminales se manejaban a través de un "concentrador" personalizado que consistía en un interruptor mecánico Strowger que podía conectar cualquiera de los 300 a 400 enchufes de terminales posibles a cualquiera de las 40 salidas. Otras ocho líneas se dedicaron a las entradas de Teletype Model 33 , a diferencia de las Selectrics de estilo JOSS. Luego, esas 48 líneas se conectaron a un multiplexor electrónico conectado a la CPU. El multiplexor estaba controlado por interrupciones , lo que significa que los terminales inactivos no consumieron ningún ciclo. [26]

Los terminales JOSS personalizados fueron construidos por DEC. Estos consistían en un mecanismo Selectric integrado en un chasis personalizado que contenía el sistema de comunicaciones, la fuente de alimentación y otros componentes. Se usó una bola de fuente personalizada para proporcionar símbolos matemáticos básicos como ≠, por lo que no fue necesario usar combinaciones de dos caracteres como <>. El sistema de comunicaciones se basó en un código de caracteres de 6 bits en un paquete de 8 bits con bits de inicio y parada. Las líneas fueron impulsadas a 120 bit / s para igualar la velocidad máxima de 15 caracteres por segundo del mecanismo Selectric. Se utilizaron códigos de cambio de entrada y salida para mover la cinta de verde a negro y viceversa. Estos códigos también fueron notados por el sistema de comunicaciones y cambiaron las luces en el panel frontal para indicar si la computadora o el usuario tenían el control del terminal en ese momento. [27]

Idioma [ editar ]

Modo directo e indirecto [ editar ]

JOSS introdujo la idea de un editor de línea de comandos único que funcionaba como un lenguaje interactivo y un editor de programas. Los comandos que se escribieron sin un número de línea se ejecutaron inmediatamente, en lo que JOSS denominó "modo directo". Si la misma línea tenía un prefijo con un número de línea, en su lugar se copiaba en el área de almacenamiento del código del programa, que JOSS denominó "modo indirecto". Se agregaron nuevas líneas al programa si el número de línea era único, se reemplazaron las líneas existentes con el mismo número o se eliminaron del programa si se ingresó un número de línea existente sin ningún código a continuación. [28]

A diferencia de la mayoría de los BASIC, JOSS guardó toda la entrada del usuario en archivos, no solo el código del programa. Cuando se cargó, JOSS esencialmente volvió a escribir las líneas. Esto significaba que los "archivos de programa" podían contener tanto declaraciones de programa como instrucciones de modo directo. Por ejemplo, era común ver programas que enumeraban las líneas de declaración y luego hacer que el archivo terminara en Go.para ejecutar inmediatamente el programa tan pronto como se completara la carga. Había algunas características que solo se podían usar en modo directo, como Lety Form, que se ingresaron sin números de línea pero que aún regresaban cuando se cargaba el programa. [29]

Las instrucciones directas e indirectas se pueden mezclar libremente en un espacio de trabajo. Esto permitió insertar comentarios en el código fuente agregando líneas en modo directo comenzando con *, [30] o colocando una al final de una línea de código y luego agregando un comentario después. Las líneas en blanco también se ignoraron, lo que permitió dividir el programa para mayor claridad. [31]

Declaraciones del programa [ editar ]

Cada línea en un programa JOSS debe comenzar con un número de línea. Los números de línea son números de coma fija que constan de dos números enteros de dos dígitos separados por un punto. Al igual que en BASIC, los números de línea se utilizan como etiquetas para orientar desde Toy Dodeclaraciones, así como para admitir la edición. Al ingresar una línea de código con un nuevo número de línea, se inserta en el programa, mientras que ingresar una con un número de línea existente reemplaza la versión anterior o la elimina si está vacía.

La parte del número de línea a la izquierda del período se conoce como "página" o "parte", mientras que la parte de la derecha se conoce como "línea". Por lo tanto, el número de línea se 10.12refiere a la página 10, línea 12. Las sucursales pueden apuntar a una página o una línea dentro de una página. Cuando se utiliza el formato posterior, la página y la línea combinadas se conocen como "paso".

Las páginas se utilizan para definir subrutinas , que regresan cuando la siguiente línea está en una página diferente. Por ejemplo, si una subrutina para calcular la raíz cuadrada de un número está en la página 3, uno podría tener tres líneas de código 3.1, 3.2 y 3.3, y se llamaría usando Do part 3.El código volvería a la declaración después de Do cuando llega a la siguiente línea en una página diferente, por ejemplo, 4.1. No es necesario el equivalente de RETURNa al final, aunque si se requiere una devolución anticipada, lo Donelogra.

Cada línea debe comenzar con una palabra clave de comando después del número de línea. No existe el concepto de un "comando predeterminado" como es el caso en BASIC con su LETdeclaración opcional . Se pueden colocar varias declaraciones en una sola línea, separadas por dos puntos o punto y coma. Cada línea debe terminar con un punto.

Bucles y condiciones [ editar ]

JOSS usa una notación de sufijo para indicar evaluación condicional, "haz esto si esto es cierto", en comparación con la mayoría de los lenguajes que colocan la condición al principio en notación de prefijo, "si esto es cierto, haz esto". Como BASIC, pero a diferencia de FORTRAN o FOCAL , cualquier declaración se puede evaluar condicionalmente de esta manera. Por ejemplo, para imprimir una cadena solo si se cumple una condición, se puede combinar el if con un Type:

1.1 Escriba "¡Hola, mundo!" si X = 5.

JOSS soportado seis comparaciones infijos, =, , , , >y <, así como los operadores booleanos or, andy not. [32]

Loops fueron manejados de una manera similar, utilizando el Forcomando y un formato algo oscura para especificar los límites de bucle y valor de paso, start(step)end. Por ejemplo, para pasar de 1 a 10 por 2, el formato es 1(2)10. Como If, Forpodría aplicarse a cualquier otra declaración:

1.2 Escriba "¡Hola, Wikipedia!" para i = 1 (2) 10.

Tenga en cuenta que para se aplica solo a una única instrucción; si uno quiere ejecutar múltiples declaraciones en un bucle, se separarían en otra parte y se llamarían usando do:

1.3 Realice la parte 5 para i = 1 (1) 100.5.1 Escriba "¡Hola, Wikipedia!".5.2 Escriba "Esto es JOSS".

Como en BASIC, cualquiera de las entradas al ciclo for podría ser constantes, variables u otras expresiones.

Expresiones y proposiciones [ editar ]

Una característica única de JOSS fue su manejo de expresiones lógicas. La mayoría de los lenguajes informáticos ofrecen alguna forma de formar una expresión matemática de varias partes, por ejemplo, Set x=(1+2)·3.que establece la variable x en el valor 9. JOSS amplió este concepto definiendo claramente el concepto de "proposición", una expresión que devuelve un valor lógico. valor, verdadero o falso, en lugar de uno numérico. Se vieron principalmente en Ifdeclaraciones, como en los ejemplos anteriores, pero el valor booleano también podría almacenarse en una variable directamente, [33] o se podría convertir verdadero en 1 y falso en 0 usando la función tv(valor de verdad). [34]

Además de las proposiciones, JOSS también tenía el concepto de "expresiones condicionales". Estos consistían en cadenas de proposiciones junto con el código que se ejecutaría si esa proposición fuera verdadera. Esto permitió que los árboles de decisión de varios pasos se escribieran en una sola línea. Tienen un propósito similar al operador ternario que se encuentra en lenguajes modernos como C o Java , donde se utilizan para devolver un valor de una estructura compacta que implementa if-then-else . La versión de JOSS tiene cualquier número de condicionales, no solo tres, por lo que es más una declaración de cambio compacta que un si-entonces compacto. [35]

Este ejemplo recrea la función de la sgnfunción: [36]

Sea s (x) = [x = 0: 0; x> 0: 1; x <0: -1].

Esto define una función "s" que toma un solo parámetro, "x", y realiza tres pruebas consecutivas contra él. Cualquier prueba que tenga éxito primero devuelve el valor correspondiente después de los dos puntos. [37]

Rangos [ editar ]

Otra característica avanzada de JOSS era que tenía el concepto de una gama como un tipo integrado que podía almacenarse y manipularse. Los rangos se encuentran normalmente como entradas a los bucles for , donde forman parte de la sintaxis del bucle en sí. Por ejemplo, en BASIC uno escribe un bucle for usando esta sintaxis básica:

PARA I = 1 A 5 PASO 2     

Esto realizará un ciclo que le asigna los valores 1, 3, 5 y luego sale.

JOSS utilizó un formato algo oscuro para definir los límites del bucle. El código equivalente en JOSS sería:

 Yo = 1 (2) 5

Tenga en cuenta que este código no incluye un for. Esto se debe a que en JOSS, los rangos son ciudadanos de primera clase del idioma, no algo que sea parte de un bucle como en BASIC. Los rangos se pueden definir y utilizar en muchos contextos fuera de los bucles. Por ejemplo, aquí hay una expresión condicional que evalúa el factorial de un parámetro x: [35]

Sea f (x) = [x = 0: 1; fp (x) = 0: prod (i = 1 (1) x: i)].

En este ejemplo, hay dos proposiciones principales, separadas por punto y coma. El primero, a la izquierda, establece que si el parámetro x es 0, la condición debe devolver inmediatamente 1. Si esa proposición falla, pasa a la segunda prueba, a la derecha. Éste comprueba si la parte fraccionaria de x es cero (es decir, es un número entero), y si es así, llama a la prodfunción para multiplicar un rango de valores. El prodparámetro de también es una proposición, pero en este caso, la prueba se reemplaza por un iterador de bucle que va de 1 a x pasando por 1. Si esa proposición es verdadera, que es para todos los valores del bucle, devuelve el índice i. Esto hace que se envíen una serie de valores proddesde 1 hasta x. [35]

La combinación de estas características permite escribir funciones complejas en unos pocos comandos. Este tipo de funcionalidad solo se ha vuelto común en lenguajes mucho más modernos, que generalmente usan iteradores o una función de mapa para proporcionar los mismos resultados. La capacidad de JOSS para combinar decisiones y bucles en una forma compacta es desconocida en otros lenguajes de la época, incluidas las ramificaciones como FOCAL.

Comandos [ editar ]

Establecer [ editar ]

El Setcomando asigna los resultados de una expresión a la variable especificada. Equivalente a BASIC LET.

01.30 Ajuste p = 3.14156.01.60 Establezca i = l * (r / 100) * t.

Setera opcional cuando se usaba en modo directo, donde se podía escribir x=5.sin el comando Set. Esto no estaba permitido en modo indirecto, a diferencia del BASIC. [38]

Deja [ editar ]

Letse utilizó para definir funciones definidas por el usuario. [39] Equivalente a BASIC DEF FN. [30]

Sea t (x) = sin (x) / cos (x).Establezca j = t (1.1).Escriba j.

Let también se puede utilizar para establecer el valor de una variable mediante una fórmula que consta de una constante:

Sea x = 5.

A partir de ese momento, se puede utilizar de forma idéntica a uno creado con Set. Sin embargo, hay una diferencia sutil, cuando se hace referencia a esta X en el código, el valor se calculará evaluando el lado derecho. A Setsolo se evalúa una vez, por lo que es mucho más rápido. [40]

El sistema generalmente sugirió usar Letsolo en modo directo, guardándolos para usarlos en un programa insertándolos en la parte superior o inferior del archivo. Esto evitó que Letse llamara varias veces durante la ejecución, ya que solo se llamaría una vez durante el proceso de carga. [41]

Demanda [ editar ]

El Demandtoma una lista de variables y almacena la entrada del usuario en variables. El ascalificador opcional agregó un mensaje personalizado. Equivalente a BASIC INPUT.

01.01 Escriba "¿Cuál es su edad?".01.02 Demanda A.01.03 Escriba "Usted es", A.01.04 Exija H como "¿Cuál es su altura?".01.05 Tipo H, "? Tan alto?".

Escribe [ editar ]

El Typecomando genera uno o más elementos separados por comas. En su forma básica es equivalente a BASIC PRINT. Sin embargo, Typeincluye una serie de formularios opcionales que lo hacen muy sobrecargado, realizando una variedad de tareas de salida no relacionadas. [42]

Cuando se utilizan para imprimir valores, los parámetros pueden ser variables, cadenas literales rodeadas de comillas dobles y el _carácter especial que produce un salto de línea. [43] Type también admite salida formateada utilizando cadenas de formato. Consulte la sección a Formcontinuación para obtener más detalles. [42]

El tipo también se usa como equivalente a la LISTdeclaración de BASIC , escribiendo el programa. Por ejemplo, Type step 1.1.imprimirá una sola línea de código, mientras Type part 1.que imprimirá la parte completa e Type all.imprimirá el programa completo. [42]

Además, también se puede utilizar para imprimir listas de valores internos. Type all values.produce una lista de todas las variables y sus valores, mientras Type size.imprime el tamaño del programa. Las palabras clave incluyen size, timey users. [42]

Página [ editar ]

Pageactiva un avance de página en los terminales especiales de JOSS. [33] JOSS normalmente enviaría un avance de página cuando el terminal llegara a la línea 54 en el papel, por lo que si uno quisiera asegurarse de que un bloque de datos no se dividiera por la mitad, podría: [44]

1.10 Página si $> 44.

$es una pseudovariable que devuelve el número de línea actual. [44]

Línea [ editar ]

Lineactiva un salto de línea en los terminales especiales de JOSS. [33]

Para [ editar ]

El Tocomando salta la ejecución del programa a la parte especificada o al número de paso, usando To part 1.o To step 1.1.respectivamente. [45] Es el equivalente de BASIC GOTO. En contraste con Go, un comando indirecto usado desde la línea de comando que inicia programas, el equivalente de BASIC RUN.

01.01 Demanda "TIPO NÚMERO A", A.01.05 Al paso 1.01.01.10 A la parte 1.

Hacer [ editar ]

Does similar a To, pero se ramifica a una subrutina. Al igual que con To, puede Do parto Do step. Si se proporciona un paso, esa única línea se ejecuta y luego vuelve a la instrucción después de Do. Si se proporciona una parte, la ejecución comienza en la primera línea del bloque y continúa hasta que se alcanza el final del bloque o Donese encuentra una instrucción.

01.15 Realice el paso 7.24.01.16 Haz la parte 8.

Dotenía una forma abreviada especial para buscar, ya que era muy común en la mayoría de los programas. Esto usó el timesmodificador en lugar de uno normal for, en el caso de bucles simples. Entonces, las siguientes líneas son equivalentes: [42]

Realice la parte 1 para i = 1 (1) 5.Haz la parte 1, 5 veces.

JOSS mantiene un puntero a la línea que se está ejecutando actualmente, que Docambiaría. Sin embargo, incluía un "do entre paréntesis" especial que podía usarse en modo directo para probar ciertas secciones del código sin cambiar el puntero principal. Por ejemplo, si el programa se detuvo debido a un error y no estaba claro qué sección causó el problema, se podría probar una subrutina en particular con: [46]

 (Haz la parte 2.)

Listo [ editar ]

El Donecomando regresa de una llamada de subrutina. Dado que las subrutinas regresan automáticamente cuando se alcanza el final de la parte, Donesolo se requiere para regresar antes y a menudo se usa con un condicional. Equivalente a BASIC RETURN.

* Rutina para pedirle al usuario un valor positivo y repetir hasta obtener uno01.10 Solicite X como "Introduzca un valor positivo mayor que cero".01.20 Hecho si X> 0.01.30 Al paso 1.1

Detener [ editar ]

El Stopcomando finaliza la ejecución del programa y devuelve el control al entorno de edición. Equivalente a BASIC ENDo STOP, aunque BASIC STOPestá destinado a permitir CONTrecoger la ejecución en la misma ubicación, una característica que no tiene equivalente directo en el sistema orientado al espacio de trabajo de JOSS.

01.10 Tipo X.01.20 Para.

Ir [ editar ]

Disponible solo en modo directo, Goes equivalente a BASIC RUNy CONT, dependiendo de si un programa está detenido actualmente debido a un error o Stopcomando que se encuentra. [47]

Cancelar [ editar ]

Otro comando solo en modo directo Cancelse utiliza cuando el programa se ha detenido por un error y el usuario desea restablecer el programa, lo que hace borrando el contador del programa . A Gorecogería en la última ubicación, pero emitir Cancelmarcas Gocomenzaría en la parte superior nuevamente. [48] Si el punto de interrupción actual se debió a un paréntesis (Do.), se puede emitir una cancelación entre paréntesis (Cancel.), para detener solo esa subejecución y permitir que Goa continúe en la última línea no entre paréntesis. [46]

Matemáticas [ editar ]

JOSS almacenó todos los números como un entero y un exponente decimal. Esto significa que los cálculos eran valores decimales exactos, a diferencia de los cálculos de coma flotante .1/3 + 1/3 + 1/3era exactamente 1. [49]

JOSS contenía seis operadores matemáticos: [49]

  • + para la adición
  • - para restar
  • · para la multiplicación (el inpunt, no el punto)
  • / para la división
  • * para exponentes
  • |...| para valor absoluto, con una expresión en el medio

Las expresiones matemáticas pueden usar () y [] indistintamente en pares coincidentes para establecer la precedencia. Por ejemplo:

 1.30 Establezca A = | -10 * [5 + 1] * (1 + 5) |.

Produciría 360. [32]

Funciones [ editar ]

El idioma contenía las siguientes funciones integradas:

Matemáticas [ editar ]

  • sin() - Seno de un ángulo expresado en radianes
  • cos() - coseno
  • arg() - Toma los valores X e Y de un punto y devuelve el ángulo entre ese punto y el eje x
  • log() - Tronco naperiano
  • exp() - Base natural al poder del argumento
  • sqrt() - Raíz cuadrada
  • sgn() - Signo del argumento, 0 devuelve 0, -ve valores -1, + ve +1
  • ip()- Parte entera del argumento, ip(22026.4658)devuelve 22026
  • fp() - Parte fraccionaria, devuelve .4658
  • dp() - Parte de dígitos, devuelve 2.20264658
  • ep() - Parte de exponente, devuelve 4, la ubicación del decimal

Booleano [ editar ]

  • tv() - Valor de verdad, devuelve 1 si la expresión es verdadera, 0 en caso contrario

Funciones de bucle [ editar ]

JOSS también definió una serie de funciones que realizaban bucles internamente, para evitar que el programador tuviera que escribir un Forbucle para realizar tareas simples como sumar una serie de números. Los parámetros podrían ser una lista de expresiones simples separadas por comas o una construcción de rango cuyo comando podría ser cualquier instrucción o llamada a función.

  • max() - Valor máximo de las expresiones proporcionadas
  • min() - Mínimo
  • sum() - Suma
  • prod() - Producto
  • first() - El primer elemento de la lista que coincide con una condición, devuelve ese resultado

Gestión de archivos [ editar ]

El sistema JOSS usaba un disco duro para almacenar programas de usuario en un espacio asignado. Dentro de ese espacio había una serie de archivos que se refiere a la utilización de un nombre de archivo de varias partes que consta de un entero y un nombre de cinco letras entre paréntesis, por ejemplo, 123 (hello). La parte entera es el equivalente a un directorio, y el nombre es el subarchivo dentro de él, mantenido por el propio JOSS. [50]

Los archivos se escriben File all as item filename.y se cargan con Recall item filename.. También se puede leer o guardar solo ciertas partes del espacio de trabajo, por ejemplo, File part 1 as item filename.para guardar una sola rutina en un archivo. [51] Además, se podría establecer un archivo predeterminado al que se asumieron todas las referencias con Use item filename.Archivos que se podrían eliminar Discard. [51]

Programa de muestra [ editar ]

1.1 Demanda p, q.1.2 Deténgase si q <0 or (q, 2) = 0.1.3 Establezca a = 1.1.4 Realice la parte 2 mientras q> 1 y a ≠ 0.1.5 Escriba a en el formulario 3.1.6 Detener.2.1 Haz la parte 20.2.1 Realice la parte 11 si p <0.2.2 Realice la parte 12 si p≥q.2.3 Realice la parte 13 si p = 0.2.4 Hecho si a = 0.2.5 Establezca p = p / 4 mientras r (p, 4) = 0.2.6 Realice la parte 14 si r (p, 2) = 0.2.7 Haz la parte 20.2.8 Establezca a = -a si r (p, 4) = r (q, 4) = 3.2.9 Establezca s = p, p = q, q = s.2.95 Haz la parte 20.11.1 Establezca a = -a si r (q, 4) = 3.11.2 Establezca p = | p |.11.3 Haz la parte 20.12.1 Establezca p = r (p, q).12.2 Haz la parte 20.13.1 Establezca a = 0, p = 1, q = 1.14.1 Establezca a = -a si r (q, 8) = 3 o r (q, 8) = 5.14.2 Establezca p = p / 2.20.1 Escriba p, q en la forma 1 si a = 1.20.2 Escriba p, q en la forma 2 si a = -1.Forma 1: "L (%. 0f,%. 0f) ="Forma 2: "-L (%. 0f,%. 0f) ="Forma 3: "% .0f \ n"

Tenga en cuenta que esta no es una muestra original, sino una de un simulador moderno. Existen algunas diferencias sintácticas con respecto al lenguaje JOSS original.

Notas [ editar ]

  1. ^ Cuando salió de JOHNNIAC, se sugirió que el acrónimo se cambiara a "JOSS Open Shop System", convirtiéndolo en un ejemplo temprano de un nombre recursivo. [1]

Referencias [ editar ]

Citas [ editar ]

  1. ↑ a b c d Bryan , 1966 , p. 2.
  2. ↑ a b c Marks 1971 , p. 1.
  3. ^ Norberg, Arthur (10 de julio de 1989). "Una entrevista con KEITH UNCAPHER" (PDF) (Entrevista). pag. 7.
  4. ^ Ware 2008 , p. 62.
  5. Marks 1971 , p. iii.
  6. ^ Shaw 1965 , p. 3.
  7. ↑ a b Marks 1971 , p. 2.
  8. ^ Smith, JW (agosto de 1967). JOSS: Rutinas de procesamiento central (guía del usuario de referencia). RAND. RM 5270 PR . Consultado el 16 de abril de 2012 .
  9. ^ Shaw 1965 , p. 14.
  10. ↑ a b Marks 1971 , p. 3.
  11. ↑ a b c Marks 1971 , p. 9.
  12. Marks 1971 , p. 4.
  13. ^ "JOHNNIAC" . Museo de Historia de la Computación .
  14. ^ Ware 2008 , p. 15, 109.
  15. Marks 1971 , p. 5.
  16. ↑ a b c d Bryan , 1966 , p. 3.
  17. Marks 1971 , p. 32.
  18. Marks 1971 , p. 10.
  19. Marks 1971 , p. 15.
  20. Marks 1971 , p. 14.
  21. Bryan , 1966 , p. 12.
  22. Marks 1971 , p. 47.
  23. ^ Ware 2008 , p. sesenta y cinco.
  24. ^ Ware 2008 , p. dieciséis.
  25. Bryan , 1966 , p. 4.
  26. ↑ a b Bryan , 1966 , p. 5.
  27. Bryan , 1966 , p. 6.
  28. ^ Gimble 1967 , p. v.
  29. ^ Gimble 1967 , p. vi.
  30. ↑ a b Gimble , 1967 , p. sesenta y cinco.
  31. Marks 1971 , p. 42.
  32. ↑ a b Gimble , 1967 , p. 70.
  33. ↑ a b c Gimble , 1967 , pág. 77.
  34. ^ Gimble 1967 , p. 24, 69.
  35. ↑ a b c Gimble , 1967 , pág. 75.
  36. Marks 1971 , p. 41.
  37. ^ Gimble 1967 , p. 25.
  38. ^ Gimble 1967 , p. 68.
  39. ^ Gimble 1967 , p. 74-75.
  40. ^ Gimble 1967 , p. 45.
  41. ^ Gimble 1967 , p. 63.
  42. ↑ a b c d e Gimble , 1967 , pág. 66.
  43. ^ Gimble 1967 , p. 7.
  44. ↑ a b Gimble , 1967 , p. 49.
  45. ^ Gimble 1967 , p. 67.
  46. ↑ a b Gimble , 1967 , p. 58.
  47. ^ Gimble 1967 , p. 57.
  48. ^ Gimble 1967 , p. 53.
  49. ↑ a b Gimble , 1967 , p. 69.
  50. ^ Gimble 1967 , p. 59.
  51. ↑ a b Gimble , 1967 , p. 61.

Fuentes [ editar ]

  • Gimble, EP (mayo de 1967). JOSS: Solución de problemas para ingenieros (PDF) (Informe técnico). Rand.
  • Bryan, GE (4 de noviembre de 1966). JOSS: Introducción a la implementación del sistema . Laboratorio de Radiación Lawrence, Berkeley California: DECUS. pag. 19 . Consultado el 19 de junio de 2019 .
  • Marks, Shirley (diciembre de 1971). Los años de JOSS: Reflexiones sobre un experimento (PDF) (Informe técnico). Rand . Consultado el 19 de junio de 2019 .
  • Sammet, Jean (1969). Lenguajes de programación: historia y fundamentos . Prentice-Hall . págs. 217–226. ISBN 0-13-729988-5.
  • Shaw, JC (mayo de 1965). JOSS: Experiencia con un servicio de informática experimental para usuarios en consolas de máquinas de escribir remotas (PDF) (Informe técnico). Rand.
  • Ware, Willis, ed. (2008). RAND y la evolución de la información (PDF) . Rand. ISBN 9780833048165.

Lectura adicional [ editar ]

  • "Manual de referencia de los usuarios de JOSS", RL Clark, Informe R-1555/9, RAND Corp (enero de 1975)
  • Entrevista de historia oral con Keith W. Uncapher , Instituto Charles Babbage , Universidad de Minnesota. Revisión de proyectos en RAND cuando Keith Uncapher fue contratado en 1950 hasta principios de la década de 1970, como JOHNNIAC , JOSS, una red nacional sobreviviente y algunos trabajos relacionados con ARPANET .