Joss
JOSS (acrónimo de JOHNNIAC Open Shop System) fue uno de los primeros lenguajes de programación interactivos y de tiempo compartido. Fue pionera en muchas funciones que se volverían comunes en los lenguajes desde la década de 1960 hasta la década de 1980, incluido el uso de números de línea como instrucciones de edición y objetivos para las ramas, declaraciones predicadas por decisiones booleanas y un editor de código fuente incorporado que puede ejecutar instrucciones. en modo directo o inmediato, lo que denominaron una interfaz de usuario conversacional.
JOSS se implementó inicialmente en la máquina JOHNNIAC de RAND Corporation y se puso en línea en 1963. Resultó muy popular y los usuarios atascaron rápidamente la máquina. Para 1964, se buscó un reemplazo con mayor rendimiento. JOHNNIAC se retiró en 1966 y se reemplazó por un PDP-6, que finalmente creció para admitir cientos de terminales de computadora basadas en IBM Selectric. Los terminales usaban tinta verde para la entrada del usuario y negra para la respuesta de la computadora. Cualquier comando que no se entendía provocaba la respuesta Eh?
o LO SENTIMOS
.
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 (serie ICT 1900), Diálogo Interpretativo Algebraico (AID, sobre PDP-10); mientras que otros, como FOCAL y MUMPS, se desarrollaron en distintas direcciones. También tiene un gran parecido con los intérpretes BASIC que se encontraban en las microcomputadoras en la década de 1980, y se diferencian principalmente en los detalles de sintaxis.
Historia
Idea inicial
En 1959, Willis Ware escribió un memorando RAND sobre el tema de la informática en el que afirmaba que las computadoras del futuro tendrían "una multiplicidad de estaciones personales de entrada y salida, de modo que muchas personas pudieran interactuar con la máquina al mismo tiempo". tiempo." El memorando ganó el interés de la Fuerza Aérea de EE. UU., los patrocinadores principales de Rand, y en 1960 formaron el Proyecto de Procesador de Información para explorar este concepto, lo que pronto se conocería como tiempo compartido. El proyecto no se trataba específicamente de tiempo compartido, sino que tenía como objetivo mejorar la interacción humano-computadora en general. La idea en ese momento era que la interacción constante entre el usuario y la computadora, de ida y vuelta, haría que tales interacciones fueran más naturales. Como dijo más tarde el director de JOSS, Keith Uncapher:
Había dos percepciones que creo que condujeron el experimento. Uno era, desde al menos 1950, cuando me uní a Rand, siempre había un enfoque en la parte de la informática de Rand hacia la interacción suave del usuario. Fue construido en nosotros. Lo aprendimos de Gunning... todo lo que pensamos. El otro fue, viendo a los matemáticos que luchaban con las calculadoras Marchant, no siendo capaz de utilizar JOHNNIAC en su forma cruda. Fue demasiado duro. Tenían que aprender a ser programadores. Fue una experiencia frustrante para ellos. Queríamos algo que les viera como una forma natural de pensar en una ayuda para la solución de sus problemas sin mucho entrenamiento, y sin ninguna percepción de convertirse en programador, porque eso los habría mantenido alejados.
En marzo de 1961 se aceptó una propuesta formal para desarrollar lo que se convirtió en JOSS en la computadora JOHNNIAC.
JOSS-1
JOSS fue implementado casi en su totalidad por J. Clifford Shaw, un matemático que trabajó en la creciente división informática de Rand. Estaba escrito en un lenguaje ensamblador simbólico llamado EasyFox (E y F en el alfabeto fonético de entonces del ejército estadounidense), también desarrollado por Shaw.
El sistema JOSS se presentó formalmente por primera vez en mayo de 1963 y admitía cinco consolas, una en la sala de máquinas y otras cuatro en las oficinas alrededor del edificio. Las primeras consolas se basaron en la máquina de escribir transmisora IBM modelo 868, ya que la Selectric aún no se había introducido en el mercado cuando comenzó el desarrollo. El primer horario se publicó el 17 de junio, con JOSS funcionando durante tres horas de 9 a 12 todos los días. Se declaró en pleno funcionamiento en ocho terminales en enero de 1964. La versión final se implementó en enero de 1965.
Para entonces, el JOHNNIAC ya tenía más de una década y, para empezar, su lógica basada en válvulas nunca fue muy fiable. Incluso cuando funcionaba bien, el sistema se hizo tan popular que rápidamente se atascó. Los usuarios estaban entusiasmados, uno declaró:
La gente ajusta sus vidas para adaptarse a JOSS... Ningún uso entra en RAND antes de las 10:00 am cuando JOSS llega, de hecho a mediodía o después de las 5:00 pm es un mejor momento, JOSS está menos ocupado. Cuando el JOSS comienza a escribir respuestas, el placer titilante es igualado sólo por la angustia resultante cuando el JOSS se rompe en el jibberish [sicO desaparece elogiando su código para borrar. Apenas podemos vivir con JOSS, pero no podemos vivir sin él.
Otro lo expresó de manera más sucinta:
Es mejor que la cerveza, estamos enganchados.
Conmutación JOSS-2
En mayo de 1964, se tomó la decisión de buscar una nueva máquina para reemplazar la JOHNNIAC 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 entregarse antes del 31 de octubre de 1965.
Se recibió un total de nueve ofertas para la nueva máquina. Digital Equipment Corporation (DEC) ganó el concurso con su nuevo sistema PDP-6 y se liberaron los fondos de la Fuerza Aérea para la compra. DEC también acordó construir treinta terminales basados en la máquina de escribir IBM Selectric modificada con un mecanismo especial para avanzar a la página siguiente en un alimentador de papel plegado en acordeón. Varias otras partes del sistema general fueron entregadas por otras compañías.
El PDP-6 llegó a fines de julio de 1965 y se probó inicialmente utilizando Teletype Model 33 como terminales. 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 incluía seis horas de mantenimiento programado por semana. El primer terminal prototipo llegó en noviembre. En diciembre, una terminal en Las Vegas se conectó a la máquina de forma remota por primera vez. 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 de teletipo externa permanente para un Teletipo Modelo 35 se instaló en la Base de la Fuerza Aérea de Langley en febrero de 1967.
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 estaba escrito en JOSS y contaba los segundos hasta que se apagaba. La máquina fue enviada al Museo del Condado de Los Ángeles y finalmente terminó en el Museo de Historia de la Computación en las afueras de San Francisco. Habiendo sido reemplazado por el sistema JOSS-2, el original se conocía retroactivamente como JOSS-1.
Uso de JOSS-2
A fines de 1966, el nuevo sistema JOSS-2 era completamente funcional y pasó a ser utilizado por JOSS las 24 horas del día, los 7 días de la semana. La nueva máquina ofrecía alrededor de 30 veces la velocidad computacional, cinco veces el espacio de almacenamiento por usuario y muchas características nuevas en el propio lenguaje. En última instancia, la nueva plataforma podría admitir hasta 100 terminales en uso simultáneo. La Fuerza Aérea siguió siendo propietaria del sistema, con Rand y otros operando como consultores. El tiempo de CPU se facturaba a los usuarios externos a una tarifa de alrededor de $1 por minuto, aunque eso era solo durante la ejecución real, el tiempo dedicado a escribir e imprimir era gratis.
Para 1970, había entre 500 y 600 usuarios en Rand y en varios sitios de la Fuerza Aérea en todo el país. Muchos de ellos eran usuarios ocasionales, precisamente para lo que estaba destinado el sistema. Para apoyarlos, los terminales personalizados se equiparon con "enchufes JOSS" especiales. para que pudieran transportarse de una oficina a otra y enchufarse en tomas personalizadas. Doscientos de los enchufes se instalaron alrededor de Rand, y el chasis de la terminal se diseñó para que fuera lo suficientemente angosto para pasar por las puertas y dejar espacio para un café en un lado. Al alternar el interruptor de encendido en el terminal, se conectó en la nueva ubicación.
Los terminales personalizados se diseñaron para JOSS porque los ingenieros sintieron que las 'funciones de telecomunicaciones del modelo 33 son un misterio para las personas no capacitadas'. y sería demasiado confuso para que los usuarios ocasionales se molestaran en aprender. 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, se reconstruyó por completo un tercio de las terminales y se redujo la salida de la computadora 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.
Los usuarios eran entusiastas y, para atenderlos, 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.
JOSS-3
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 IBM 370/158 con OS/360. Existe poca información sobre este sistema, con la excepción de que fue en esta máquina que JOSS finalmente se retiró. Según una nota en una descripción histórica, Rand dudaba en permitir que IBM usara el nombre JOSS y, como resultado, "la versión de IBM nunca se usó ampliamente".
Implementación
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 controlador de terminal 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 usaba tanto que el almacén de usuarios de 16k palabras no era suficiente y estaba respaldado con un tambor magnético para soporte de paginación. El tambor fue impulsado por hardware externo y no requirió la atención del procesador principal.
Para admitir varios 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 único registro interno.
El almacenamiento permanente lo proporcionó 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 activado 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 y funcionaban de la misma manera que la unidad IBM.
Los terminales se manejaron a través de un "concentrador" personalizado. que consistía en un interruptor Strowger mecánico que podía conectar cualquiera de los 300 a 400 enchufes de terminal 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. Esas 48 líneas se conectaron luego 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.
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 las combinaciones de dos caracteres como <> no habia que usar. El sistema de comunicaciones se basaba en un código de caracteres de 6 bits en un paquete de 8 bits con bits de inicio y parada. Las líneas se manejaron a 120 bit/s para coincidir con la velocidad máxima de 15 caracteres por segundo del mecanismo Selectric. Se usaron códigos de cambio hacia adentro y hacia afuera 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 de la terminal en ese momento.
Idioma
Modo directo e indirecto
JOSS introdujo la idea de un único editor de línea de comandos que funcionaba tanto como lenguaje interactivo como 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 código a continuación.
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 cargaba, JOSS básicamente volvía a escribir las líneas. Esto significaba que los archivos de programa podían contener tanto instrucciones de programa como instrucciones de modo directo. Por ejemplo, era común ver programas que enumeraban las líneas de declaración y luego terminaban el archivo con Go.
para ejecutar inmediatamente el programa tan pronto como termine de cargarse. Había algunas funciones que solo se podían usar en modo directo, como Let
y Form
, que se ingresaron sin números de línea, pero aún regresa cuando se carga el programa.
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 de modo directo que comienzan con *
, o colocando uno al final de una línea de código y luego agregando un comentario después. También se ignoraron las líneas en blanco, lo que permitió dividir el programa para mayor claridad.
Declaraciones de programa
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 punto fijo que consisten en dos números enteros de dos dígitos separados por un punto. Al igual que en BASIC, los números de línea se usan tanto como etiquetas para apuntar desde hasta
y declaraciones Do
, y para admitir edición. Al ingresar una línea de código con un nuevo número de línea, se inserta en un programa, mientras que al ingresar una con un número de línea existente, se reemplaza la versión anterior o se elimina si está vacía.
La parte del número de línea a la izquierda del punto se denomina página o parte, mientras que la parte a la derecha se denomina línea. Por lo tanto, el número de línea 10.12
hace referencia 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 último formato, la página y la línea combinadas se denominan paso.
Las páginas se usan 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, una 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 regresaría a la declaración después de Do cuando llega a la siguiente línea en un diferente página, por ejemplo, 4.1. No existe la necesidad del equivalente de un RETURN
en el end, aunque si se requiere una devolución anticipada, Done
logra esto.
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 opcional LET
. Se pueden colocar varias declaraciones en una línea, separadas por dos puntos o punto y coma. Cada línea debe terminar con un punto.
Bucles y condiciones
JOSS usa una notación de sufijo para indicar una evaluación condicional, "haz esto si esto es cierto", en contraste con la mayoría de los lenguajes que colocan la condición al frente en la notación de prefijo, "si esto es cierto, haz esto". Al igual que BASIC, pero a diferencia de FORTRAN o FOCAL, cualquier declaración puede evaluarse condicionalmente de esta manera. Por ejemplo, para imprimir una cadena solo si se cumple una condición, se puede combinar if con Tipo
:
1.1 Escribe "Hola, Mundo!" si X=5.
JOSS admite seis comparaciones de infijos, =
, ≠
, ≥
, ≤
, >
, <
, y operadores booleanos o
, y
, y no
.
Los bucles se manejaron de manera similar, usando el For
y un formato algo oscuro para especificar los límites del bucle y el valor del paso, inicio(paso)fin
. Por ejemplo, para pasar del 1 al 10 de a 2, el formato es 1(2)10
. Como If
, For
podría aplicarse a cualquier otra declaración:
1.2 Tipo "¡Hola, Wikipedia!" para i=1(2)10.
Tenga en cuenta que el for se aplica solo a una sola instrucción; si uno quiere ejecutar varias declaraciones en un bucle, se separarían en otra parte y se llamarían usando do:
1.3 Haga la parte 5 para i=1(1)100. 5.1 Tipo "Hola, Wikipedia!". 5.2 Tipo "Esto es JOSS.".
Al igual que en BASIC, cualquiera de las entradas del bucle for podría ser constantes, variables u otras expresiones.
Como estos tipos de rangos se podían aplicar a cualquier línea de código, era posible definir límites y bucles cuando se invocaba el programa. Por ejemplo, considere el programa:
1.1 Tipo X.
Normalmente si uno invoca esto de una manera similar a BASIC EJECUTAR
:
Haga la parte 1.
Produciría:
0
Sin embargo, se puede modificar este comportamiento agregando una construcción de bucle a la invocación:
Haga la parte 1 para X = 1(1)5.
Lo que produciría:
1 2 3 4 5
Esto permite construir fórmulas en programas sin tener que colocarlas dentro de bucles. El bucle, si lo desea, puede ser proporcionado por el usuario cuando inicia el programa.
Expresiones y proposiciones
Una característica única de JOSS era 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, Establecer x=(1+2)·3.
que establece la variable x en el valor 9. JOSS amplió este concepto definiendo claramente el concepto de "proposición", un expresión que devuelve un valor lógico, verdadero o falso, en lugar de uno numérico. Se vieron principalmente en declaraciones If
, como en el ejemplos anteriores, pero el valor booleano también podría almacenarse en una variable directamente, o uno podría convertir verdadero en 1 y falso en 0 usando el tv
(valor de verdad).
Además de las proposiciones, JOSS también tenía el concepto de "expresiones condicionales". Estos consistían en cadenas de proposiciones junto con código que se ejecutaría si esa proposición fuera verdadera. Esto permitió escribir árboles de decisión de varios pasos 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. JOSS' version tiene cualquier cantidad de condicionales, no solo tres, por lo que es más una declaración de cambio compacta que un si-entonces compacto.
Este ejemplo recrea la función del sgn
función:
Dejar s(x)=[x=0:0; x título0:1; x 0:-1].
Esto define una función "s" que toma un solo parámetro, "x", y realiza tres pruebas consecutivas contra él. La prueba que tenga éxito primero devuelve el valor correspondiente después de los dos puntos.
Rangos
Otra característica avanzada de JOSS era que tenía el concepto de rango como un tipo incorporado que podía almacenarse y manipularse. Los rangos normalmente se encuentran como las entradas de los bucles for, donde son parte de la sintaxis del propio bucle. Por ejemplo, en BASIC uno escribe un ciclo for usando esta sintaxis básica:
PARA I=1 TO 5 STEP 2
Esto realizará un bucle que le asigna los valores 1, 3, 5 y luego sale.
JOSS usó un formato algo oscuro para definir los límites del bucle. El código equivalente en JOSS sería:
I=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 lenguaje, 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:
Let 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. La primera, 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 al prod
para multiplicar un rango de valores. El parámetro prod
también es un proposición, pero en este caso, la prueba se reemplaza por un iterador de bucle que va de 1 a x paso a paso de 1. Si esa proposición es verdadera, que es para todos los valores del bucle, devuelve el índice i. Esto hace que se envíe una serie de valores a prod
de 1 a x.
La combinación de estas funciones 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 normalmente 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
Establecer
El comando Establecer
asigna los resultados de un expresión a la variable especificada. Equivale a LET
de BASIC.
01.30 Set p=3.14156. 01.60 Set i=l*(r/100)*t.
Establecer
era opcional cuando se usaba en modo directo, donde uno podría escribir x=5.
sin el Establecer comando. Esto no estaba permitido en modo indirecto, a diferencia de BASIC.
Dejar
Let
se usó para definir lo definido por el usuario funciones Equivale a DEF FN
de BASIC.
Dejar t(x)=sin(x)/cos(x). Set j=t(1.1). Tipo j.
Let
también se puede usar para configurar el valor de una variable usando una fórmula que consiste en una constante:
Dejar x=5.
Desde ese punto, se puede usar de manera idéntica a uno creado usando Establecer
. 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. Un Set
solo se evalúa una vez, por lo que es mucho más rápido.
El sistema generalmente sugería usar Let
solo en modo directo, guardándolos para usarlos en un programa insertándolos en la parte superior o inferior del archivo. Esto evitó que se llamara a Let
varias veces durante la ejecución, ya que solo se llamaría una vez durante el proceso de carga.
Demanda
La Demand
toma una lista de variables y almacena la entrada del usuario en variables. El calificador opcional as
agregó un aviso personalizado. Equivalente a INPUT
de BASIC.
01.01 Tipo "¿Cuál es tu edad?". 01.02 Demanda A. 01.03 Tipo "Lo eres", A. 01.04 Demanda H como "¿Cuál es tu altura?". 01.05 Tipo H,"? ¿Es alto?".
Tipo
El comando Escribir
genera uno o más elementos separado por comas. En su forma básica, es equivalente a PRINT. Sin embargo,
Type
incluye varias formas opcionales que hacen estaba muy sobrecargado, realizando una variedad de tareas de salida no relacionadas.
Cuando se usa para imprimir valores, los parámetros pueden ser variables, cadenas literales entre comillas dobles y el _
carácter que produce un avance de línea. Type
también admite salida formateada mediante cadenas de formato. Consulte la sección sobre Formulario
a continuación para obtener más detalles.
El tipo también se usa como equivalente a LIST
, escribiendo el programa. Por ejemplo, Escriba el paso 1.1.
imprimirá un una sola línea de código, mientras que Escriba la parte 1.
imprima la parte completa y Escriba todo.
imprime sale todo el programa.
Además, también se puede utilizar para imprimir listas de valores internos. Escriba todos los valores.
produce una lista de todas las variables y sus valores, mientras que Escriba tamaño.
imprime el programa tamaño. Las palabras clave incluyen size
, hora
y usuarios
.
Página
Página
activa un feed de página en el especial Terminales JOSS. JOSS normalmente enviaría un feed 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, uno podría:
1.10 Página si $ Conf44.
$
es una pseudovariable que devuelve el número de línea actual.
Línea
Line
activa un avance de línea en el especial Terminales JOSS.
A
El comando To
salta la ejecución del programa al parte especificada o número de paso, usando A la parte 1.
o Al paso 1.1.
respectivamente. Es el equivalente de GOTO
de BASIC.. Contraste con Ir
, un comando indirecto que se usa desde el comando línea que inicia programas, el equivalente de BASIC's RUN.
01.01 Demanda A como "TYPE A NUMBER". 01.05 para el paso 1.01. 01.10 A la parte 1.
Hacer
Do
es similar a To
, pero se bifurca a una subrutina. Al igual que con Para
, puede Hacer parte
o Hacer paso
. Si se proporciona un paso, esa sola línea se ejecuta y luego regresa a la declaración después de Hacer
. 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 un Done
.
01.15 Do paso 7.24. 01.16 Haga la parte 8.
Do
tenía una forma abreviada especial para buscar de acuerdo con que es muy común en la mayoría de los programas. Esto usó el modificador times
en lugar de un for
, en el caso de bucles simples. Entonces las siguientes líneas son equivalentes:
Haga 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 es un Do
cambiaría. Sin embargo, incluía un "entre paréntesis especial" que podrí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, uno podría probar una subrutina en particular con:
(Haz la parte 2.)
Terminado
El comando Done
regresa de una llamada de subrutina. Como las subrutinas regresan automáticamente cuando se llega al final de la parte, Done
solo se requiere para regresar temprano y, a menudo, se usa con un condicional. Equivale a RETURN
de BASIC.
*Routine pide al usuario un valor positivo y repite hasta que consiga uno 01.10 Demanda X como "Introducir un valor positivo superior a cero". 01.20 Hecho si X título0. 01.30 a paso 1.1
Parar
El comando Stop
finaliza la ejecución del programa y devuelve el control al entorno de edición. Equivalente a END
o STOP
, aunque BASIC's STOP
está diseñado para permitir CONT
para retomar la ejecución en la misma ubicación, una característica que no tiene equivalente directo en JOSS' s sistema orientado al espacio de trabajo.
01.10 Tipo X. 01.20 Alto.
Ir
Disponible solo en modo directo, Ir
es el equivalente a RUN
y CONT
, dependiendo de si un programa está actualmente detenido debido a se encuentra un error o Stop
.
Cancelar
Otro comando solo en modo directo, Cancelar
se 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. Un Go
recogería en la última ubicación, pero emitir un Cancelar
hace que Ir
empezar de nuevo en la parte superior. 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 un Ir
para continuar en la última línea no entre paréntesis.
Matemáticas
JOSS almacenó todos los números como punto flotante radix-10.
JOSS contenía seis operadores matemáticos:
+
adicional-
para la resta·
para la multiplicación (el interpunto, no el período)/
para la división*
para exponentes|...|
para el 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 Conjunto A= duración-10·[5+1]·(1+5).
Produciría 360.
Funciones
El lenguaje contenía las siguientes funciones integradas:
Matemáticas
sin()
- Pecado de un ángulo dado en radianscos()
- Cosine.arg()
- Toma valores X y Y de un punto y devuelve el ángulo entre ese punto y el eje xlog()
- Naperian logexp()
- Base natural al poder del argumentosqrt()
- raíz cuadradasgn()
- Sign of the argument, 0 devuelve 0, -ve values -1, +ve +1ip()
- Una parte más importante del argumento,ip(22026.4658)
retornos 22026fp()
- Parte fraccional, regresa.4658dp()
- Parte dígitos, devuelve 2.20264658ep()
- Parte exponente, devuelve 4, la ubicación del decimal
Booleano
tv()
- Valor de la verdad, devuelve 1 si la expresión es verdadera, 0 de otro modo
Funciones de bucle
JOSS también definió una serie de funciones que realizaban bucles internamente, para evitar que el programador tuviera que escribir un For
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 declaración o llamada de función.
max()
- Valor máximo de las expresiones proporcionadasmin()
- Mínimosum()
- Sumprod()
- Productofirst()
- Primer artículo en la lista que coincide con una condición, devuelve ese resultado
Administración de archivos
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 a los que se hacía referencia mediante un nombre de archivo de varias partes que constaba de un número entero y un nombre de cinco letras entre paréntesis, por ejemplo, 123 (hola)
. La parte entera es el equivalente a un directorio, y el nombre es el subarchivo que contiene, mantenido por el mismo JOSS.
Los archivos se escriben con Archivar todo como nombre de archivo del elemento.
y cargado con Recuperar nombre de archivo del elemento.
. También se pueden leer o guardar solo ciertas partes del espacio de trabajo, por ejemplo Archiva la parte 1 como nombre de archivo del elemento.
para guardar una sola rutina en un archivo. Además, se podría establecer un archivo predeterminado en el que se asumieran todas las referencias con Utilice el nombre de archivo del elemento.
Los archivos se pueden eliminar con Discard.
Programa de muestra
1.1 Demanda p,q. 1.2 Parar si qificó0 o r(q,2)=0. 1.3 Establecer a=1. 1.4 Hacer la parte 2 mientras q título1 y a conveniencia0. 1,5 Escriba un formulario 3. 1.6 Alto. 2.1 Haga la parte 20. 2.1 Haga la parte 11 sip. 2.2 Haga la parte 12 si p≥q. 2.3 Haga la parte 13 si p=0. 2.4 Hecho si a=0. 2.5 Establecer p=p/4 mientras r(p,4)=0. 2.6 Haga la parte 14 si r(p,2)=0. 2.7 Haga la parte 20. 2.8 Establecer a=-a si r(p,4)=r(q,4)=3. 2.9 Set s=p, p=q, q=s. 2.95 Haga la parte 20. 11.1 Establecer a=-a si r(q,4)=3. 11.2 Establecer p= sobrevivir. 11.3 Haga la parte 20. 12.1 Establecer p=r(p,q). 12.2 Hacer la parte 20. 13.1 Establecer a=0, p=1, q=1. 14.1 Establecer a=-a si r(q,8)=3 o r(q,8)=5. 14.2 Establecer p=p/2. 20.1 Tipo p, q en forma 1 si a=1. 20.2 Tipo p, q en forma 2 si a=-1. Formulario 1: "L(%.0f,%.0f) =" Formulario 2: "L(%.0f,%.0f) =" Formulario 3: " %.0fn"
Tenga en cuenta que esta no es una muestra original, sino una de un simulador moderno. Hay algunas diferencias sintácticas con el lenguaje JOSS original.
Contenido relacionado
Dispositivo de camuflaje
Jpeg
Telecomunicaciones en los Estados Federados de Micronesia