JOSS - JOSS

JOSS
Paradigmata nestrukturované , procedurální , imperativní
Rodina JOSS
Navrhl Cliff Shaw
Vývojář RAND Corporation
Poprvé se objevil 1963 ; Před 58 lety ( 1963 )
Rozsah Lexikální
Implementační jazyk montážní jazyk
Plošina JOHNNIAC , PDP-6
Ovlivněn
TELCOMP , CAL , FOCAL , MUMPS
Část relace JOSS na RAND v roce 1970, ve které uživatel provádí několik jednoduchých výpočtů direct mode. Všimněte si rozdílu mezi obdobím na konci příkazů a interpunktem pro násobení.

JOSS (zkratka pro JOHNNIAC Open Shop System ) byl jedním z prvních interaktivních programovacích jazyků, které sdílejí čas . Je průkopníkem mnoha funkcí, které by se staly běžnými v jazycích od šedesátých let do osmdesátých let, včetně použití čísel řádků jako instrukcí pro úpravy a cílů pro větve , příkazů založených na logických rozhodnutích a vestavěného editoru zdrojového kódu, který může provádět pokyny v režimu nebo , co nazvali konverzační uživatelské rozhraní . directimmediate

JOSS byl původně implementován na stroji JOHNNIAC ve společnosti RAND Corporation a uveden do provozu v roce 1963. Ukázalo se, že je velmi populární a uživatelé jej rychle spustili. Do roku 1964 byla hledána náhrada s vyšším výkonem. JOHNNIAC byl v důchodu v roce 1966 a nahrazen PDP-6 , který nakonec rostl tak, aby podporoval stovky počítačových terminálů založených na IBM Selectric . Terminály používaly zelený inkoust pro vstup uživatele a černý pro reakci počítače. Jakýkoli příkaz, který nebyl pochopen, vyvolal odpověď Eh?nebo SORRY.

Systém měl velký vliv a plodil různé přístavy a odnože. Některé zůstaly podobné originálu, jako TELCOMP a STRINGCOMP , CAL , CITRAN, ISIS, PIL/I, JEAN ( řada ICT 1900 ), Algebraic Interpretive Dialogue (AID, na PDP-10 ); zatímco jiné, například FOCAL a MUMPS , se vyvíjely výraznými směry. Rovněž se velmi podobá interpretům BASIC, které se v 80. letech nacházejí na mikropočítačích , liší se hlavně v syntaxi .

Dějiny

Počáteční myšlenka

V roce 1959 Willis Ware napsal poznámku RAND na téma výpočetní techniky, ve které uvedl, že budoucí počítače budou mít „velké množství osobních vstupně-výstupních stanic, takže mnoho lidí může komunikovat se strojem současně“. Tato poznámka získala zájem amerického letectva , Randových hlavních sponzorů, a v roce 1960 založili projekt informačního procesoru, aby prozkoumali tento koncept, který bude brzy známý jako sdílení času . Projekt nebyl konkrétně o sdílení času, ale měl za cíl celkově zlepšit interakci člověk-počítač. Tehdejší myšlenka byla, že neustálá interakce mezi uživatelem a počítačem tam a zpět způsobí, že takové interakce budou přirozenější. Jak později uvedl ředitel JOSS Keith Uncapher :

Myslím, že experiment vedl ke dvěma vjemům. Jedním z nich bylo, že přinejmenším v roce 1950, kdy jsem se připojil k Randovi, se v části Rand pro počítačové vědy vždy soustředilo na hladkou interakci uživatele. Bylo to do nás zabudováno. Naučili jsme se to od Gunninga. ... vše, na co jsme mysleli. Ten druhý byl, když viděl, jak matematici zápasí s Marchantovými kalkulačkami, že nejsou schopni používat JOHNNIAC v jeho surové podobě. Bylo to příliš těžké. Museli se naučit být programátory. Byl to pro ně jen frustrující zážitek. Chtěli jsme něco, co by pro ně vypadalo jako přirozený způsob uvažování o pomoci při řešení jejich problémů bez velkého tréninku a bez jakéhokoli vnímání toho, že by se stali programátorem, protože to by je drželo stranou.

Formální návrh na rozvoj toho, co se stalo JOSS na počítači JOHNNIAC, byl přijat v březnu 1961.

JOSS-1

JOSS implementoval téměř výhradně J. Clifford Shaw , matematik, který pracoval v Randově rostoucí výpočetní divizi. Byl napsán v symbolickém montážním jazyce s názvem EasyFox (E a ​​F v tehdejší fonetické abecedě americké armády), který také vyvinul Shaw.

Systém JOSS byl formálně poprvé představen v květnu 1963 a podporoval pět konzolí, jednu ve strojovně a další čtyři v kancelářích kolem budovy. Rané konzole byly založeny na přenosném psacím stroji IBM Model 868, protože Selectric ještě nebyl uveden na trh, když začal vývoj. První plán byl zveřejněn 17. června, přičemž JOSS běží každý den po dobu tří hodin od 9 do 12 hodin. To bylo prohlášeno za plně funkční na osmi terminálech v lednu 1964. Konečná verze byla nasazena v lednu 1965.

Do této doby byl JOHNNIAC již více než deset let starý a jeho logika založená na trubkách nebyla nikdy vysoce spolehlivá. I když systém fungoval dobře, stal se tak populárním, že se rychle zasekl. Uživatelé byli nadšení, jeden uvedl:

Lidé přizpůsobují svůj život tak, aby se vešly kolem JOSS ... Nemá smysl přicházet do RAND před 10:00 ráno, když přijde JOSS, ve skutečnosti je lepší čas na poledne nebo po 17:00, JOSS je méně zaneprázdněn. Když JOSS začne psát odpovědi, titulující potěšení se vyrovná pouze následnou úzkostí, když se JOSS rozpadne na blábolení [ sic ] nebo zmizí a pochválí váš kód do zapomnění. S JOSSem můžeme žít jen stěží, ale nemůžeme bez něj.

Jiný to vyjádřil stručněji:

Je to lepší než pivo - jsme závislí.

Přepínání JOSS-2

V květnu 1964 bylo rozhodnuto poohlédnout se po novém stroji, který by nahradil JONNIAC a zcela ho zasvětil provozování rozšířené verze JOSS. Stroj by také musel podporovat nové terminály vyrobené podle Randových specifikací a měl by být dodán do 31. října 1965.

Na nový stroj bylo přijato celkem devět nabídek. Digital Equipment Corporation (DEC) vyhrála soutěž se svým novým systémem PDP-6 a na nákup bylo uvolněno financování letectva. DEC také souhlasil s vybudováním třiceti terminálů založených na psacím stroji IBM Selectric upraveném speciálním mechanismem pro postup na další stránku v podavači skládaného papíru. Několik dalších částí celkového systému bylo dodáno od jiných společností.

PDP-6 dorazil na konci července 1965 a byl původně testován pomocí terminálu Teletype Model 33 . Novou verzi kódu vytvořili Charles L. Baker, Joseph W. Smith, Irwin D. Greenwald a G. Edward Bryan. Systém byl poprvé prohlášen za funkční v říjnu, přestože to zahrnovalo šest hodin plánované údržby týdně. První prototyp terminálu dorazil v listopadu. V prosinci byl ke stroji poprvé vzdáleně připojen terminál v Las Vegas . V únoru 1966 to bylo posláno na leteckou základnu McClellan , následovala jedna v srpnu na Air Force Academy a dvě v září na ARPA a kancelář letectva v Pentagonu . První trvalé dálkové připojení dálnopisného teletypu pro Teletype Model 35 bylo instalováno na letecké základně Langley v únoru 1967.

S novým strojem v provozu byl JOHNNIAC vyřazen z provozu 11. února 1966 a oficiálně odešel do důchodu 18. února. Jeho poslední spuštěný program byl napsán v JOSS a odpočítával sekundy, než se vypne. Stroj byl odeslán do Los Angeles County Museum a nakonec skončil v Computer History Museum mimo San Francisco . Poté, co byl originál nahrazen systémem JOSS-2, byl zpětně znám jako JOSS-1.

Použití JOSS-2

Do konce roku 1966 byl nový systém JOSS-2 plně funkční a přešel na používání JOSS 24/7. Nový stroj nabídl zhruba 30násobek výpočetní rychlosti, pětinásobek úložného prostoru na uživatele a mnoho nových funkcí v samotném jazyce. Nová platforma by nakonec mohla podporovat až 100 terminálů při současném používání. Letectvo zůstalo vlastníkem systému, Rand a další působili jako konzultanti. Čas CPU byl účtován externím uživatelům rychlostí přibližně 1 $ za minutu, ačkoli to bylo pouze během skutečného provádění, čas strávený psaním a tiskem byl zdarma.

V roce 1970 bylo v Rand a na různých místech letectva po celé zemi mezi 500 a 600 uživateli. Mnozí z nich byli příležitostní uživatelé, přesně k tomu byl systém určen. Na jejich podporu byly vlastní terminály vybaveny speciálními „zástrčkami JOSS“, aby je bylo možné obíhat z kanceláře do kanceláře a zapojovat do vlastních zásuvek. Kolem Rand byly nainstalovány dvě stovky zátek a podvozek terminálu byl navržen tak, aby byl dostatečně úzký, aby se vešel dveřmi, a přitom na jedné straně zůstal prostor pro kávu. Přepnutím vypínače na terminálu došlo k připojení na nové místo.

Vlastní terminály byly navrženy pro JOSS, protože inženýři cítili, že „telekomunikační funkce modelu 33 jsou pro netrénované osoby tajemstvím“ a byly by příliš matoucí pro příležitostné uživatele, aby se obtěžovali s učením. V praxi se ukázaly, že selektrické mechanismy jsou příliš křehké pro neustálé používání, které viděli, a byly často opravovány opraváři IBM. V roce 1970 byla kompletně přestavěna celá třetina terminálů a výstup z počítače se kvůli zlepšení spolehlivosti zpomalil. Air Force, do této doby, se rozhodl použít model 35 místo, protože to bylo jak snadno dostupné a mnohem levnější.

Použití bylo nadšené a aby jim sloužil, Rand začal vydávat Zpravodaj JOSS , který upravila Shirley Marks. Nakonec bylo vydáno 44 čísel od listopadu 1967 do června 1971.

JOSS-3

Na začátku 70. let postavili programátoři v jednom ze zařízení IBM na západním pobřeží JOSS-3 pro IBM 370/158 se systémem OS/360 . O tomto systému existuje jen málo informací, s výjimkou toho, že JOSS nakonec odešel do důchodu na tomto počítači. Podle poznámky v historickém přehledu Rand váhal, zda povolit IBM používat název JOSS, a v důsledku toho „verze IBM nebyla nikdy široce používána“.

Implementace

Společnost JOSS použila kuličku vlastního typu, podobnou tomuto příkladu, pro terminály psacího stroje IBM Selectric k poskytování matematických symbolů.

JOSS-II na PDP-6 byl rozdělen na dvě části, odpovídající rozložení vnitřní paměti stroje. Stroj byl vybaven dvěma bankami základní paměti , s 16k 36bitovými slovy v každé bance. Samotný systém JOSS, který zahrnoval operační systém , kód pro správu uživatelů a souborů, obslužný program terminálu a tlumočník, spotřeboval většinu první z těchto bank. Druhá banka byla použita pro uživatelské programy. Přestože se v té době jednalo o relativně velké množství paměti, systém byl tak hojně využíván, že uživatelský sklad o velikosti 16k nestačil, a byl zálohován magnetickým bubnem pro podporu stránkování. Buben byl poháněn externím hardwarem a nevyžadoval pozornost hlavního procesoru.

Za účelem podpory více uživatelských programů byl hardware PDP-6 upraven tak, aby zkoumal bit-20 jakékoli adresy. Pokud byl tento bit nastaven, adresa byla v „uživatelském prostoru“ a byla upravena tak, aby nulová adresa ukazovala na základní adresu tohoto uživatele. Tímto způsobem bylo možné přesouvat uživatelské programy v paměti, aniž by to způsobilo problémy systému, a operační systém se mohl přepínat z uživatele na uživatele jednoduše změnou jediného interního registru.

Trvalé úložiště zajišťoval pevný disk Storage Products s úložištěm 5,7 milionu slov. Stejně jako buben byl skutečný vstup/výstup do a z bubnu zpracováván externě, i když v tomto případě byl pohyb spuštěn akcí uživatele k načtení a uložení jejich programů. K přesunu dat na a z jednotky podle potřeby byla použita pásková jednotka kompatibilní s IBM , což byla operace, která byla také nezávislá na CPU. K dispozici byly také dvě jednotky DECtape, které fungovaly stejným způsobem jako jednotka IBM.

Terminály byly zpracovávány prostřednictvím vlastního „koncentrátoru“, který se skládal z mechanického spínače Strowger, který dokázal připojit jakýkoli z 300 až 400 možných koncových konektorů k jakémukoli ze 40 výstupů. Dalších osm řádků bylo věnováno vstupům Teletype Model 33 , na rozdíl od Selectrics ve stylu JOSS. Těchto 48 linek bylo poté připojeno k elektronickému multiplexeru připojenému k CPU. Multiplexor byl řízen přerušením , což znamená, že nečinné terminály nespotřebovávaly žádné cykly.

Vlastní terminály JOSS byly postaveny společností DEC. Jednalo se o selektivní mechanismus zabudovaný do vlastního šasi obsahujícího komunikační systém, napájecí zdroj a další komponenty. K poskytnutí základních matematických symbolů jako ≠ byla použita koule vlastního písma, takže kombinace dvou znaků jako <> nebylo nutné použít. Komunikační systém byl založen na 6bitovém znakovém kódu v 8bitovém paketu se start a stop bity. Řádky byly vedeny rychlostí 120 bitů/s, aby odpovídaly maximální rychlosti 15 znaků za sekundu selektrického mechanismu. K přesunu pásky ze zelené na černou a zpět byly použity kódy Shift-in a Shif-Out. Těchto kódů si všiml také komunikační systém a změnila světla na předním panelu, aby indikovala, zda v danou chvíli ovládal terminál počítač nebo uživatel.

Jazyk

Přímý a nepřímý režim

JOSS představil myšlenku jediného editoru příkazového řádku, který fungoval jak jako interaktivní jazyk, tak jako programový editor. Příkazy, které byly zadány bez čísla řádku, byly provedeny okamžitě, v čem JOSS označoval jako „přímý režim“. Pokud bylo na stejném řádku předponováno číslo řádku, bylo místo toho zkopírováno do úložné oblasti programového kódu, kterou JOSS nazýval „nepřímý režim“. Pokud bylo číslo řádku jedinečné, byly do programu přidány nové řádky, nahrazeny existující řádky stejným číslem nebo odebrány z programu, pokud bylo zadáno existující číslo řádku bez kódu za ním.

Na rozdíl od většiny BASICů, JOSS ukládal celý uživatelský vstup do souborů, nejen programový kód. Po načtení JOSS v podstatě zadal řádky zpět. To znamenalo, že programové soubory mohly obsahovat jak programové příkazy, tak pokyny pro přímý režim. Například bylo běžné vidět programy, které uváděly řádky příkazů, a poté mít soubor na konci, Go.aby okamžitě spustil program, jakmile dokončil načítání. Některé funkce bylo možné použít pouze v přímém režimu, například Leta Form, které byly zadány bez čísel řádků, ale přesto se vrátily po načtení programu.

Přímé a nepřímé pokyny lze v pracovním prostoru libovolně kombinovat. To umožnilo vkládat komentáře do zdrojového kódu přidáním řádků přímého režimu začínajících na *, nebo umístěním jednoho na konec řádku kódu a následným přidáním komentáře za něj. Rovněž byly ignorovány prázdné řádky, což umožnilo program rozdělit kvůli přehlednosti.

Programová prohlášení

Každý řádek v programu JOSS musí začínat číslem řádku. Čísla řádků jsou čísla s pevným bodem skládající se ze dvou dvouciferných celých čísel oddělených tečkou. Stejně jako v základním, čísla řádků jsou použity jak jako popisky k cíli z Toa Dopříkazy, a na úpravy podpory. Zadáním řádku kódu s novým číslem řádku jej vložíte do programu, zatímco zadáním řádku s existujícím číslem řádku nahradíte předchozí verzi nebo ji odstraníte, pokud je prázdná.

Část čísla řádku nalevo od tečky se označuje jako stránka nebo část , zatímco část napravo se označuje jako řádek . Číslo řádku tedy 10.12odkazuje na stranu 10, řádek 12. Pobočky mohou cílit buď na stránku, nebo na řádek v rámci stránky. Při použití pozdějšího formátu se kombinovaná stránka a řádek označí jako krok .

Stránky se používají k definování podprogramů , které se vracejí, když je další řádek na jiné stránce. Pokud je například podprogram pro výpočet druhé odmocniny čísla na stránce 3, je možné, že máte tři řádky kódu 3.1, 3.2 a 3.3 a bylo by voláno pomocí Do part 3.kódu. dosáhne dalšího řádku na jiné stránce, například 4.1. Neexistuje žádný ekvivalent pro a RETURNna konci, i když je požadován předčasný návrat, je to Donesplněno.

Každý řádek musí začínat příkazovým klíčovým slovem za číslem řádku. Neexistuje žádný koncept výchozího příkazu , jako je tomu v případě BASIC s jeho volitelným LETpříkazem. Na jeden řádek lze umístit více příkazů oddělených dvojtečkami nebo středníky. Každý řádek musí končit tečkou.

Smyčky a podmínky

JOSS používá notaci přípony k označení podmíněného vyhodnocení, „udělej to, pokud je to pravda“, na rozdíl od většiny jazyků, které stav umísťují před notaci předpony „pokud je to pravda, udělej toto“. Stejně jako BASIC, ale na rozdíl od FORTRAN nebo FOCAL , jakékoli prohlášení může být podmíněně vyhodnoceno tímto způsobem. Chcete -li například vytisknout řetězec pouze v případě, že je splněna podmínka, lze příkaz if zkombinovat s Type:

1.1 Type "Hello, World!" if X=5.

JOSS podporován šest Infix srovnání, =, , , , >, <a logické operátory or, anda not.

Smyčky byly zpracovány podobným způsobem, s použitím Forpříkazu a poněkud obskurní formát pro zadávání hranice smyčky a hodnotu kroku, start(step)end. Například pro krok od 1 do 10 o 2 je formát 1(2)10. Stejně jako If, Forlze použít na jakékoli jiné prohlášení:

1.2 Type "Hello, Wikipedia!" for i=1(2)10.

Všimněte si, že for platí pouze pro jedno prohlášení; pokud někdo chce spustit více příkazů ve smyčce, byly by odděleny do jiné části a volány pomocí do:

1.3 Do part 5 for i=1(1)100.
5.1 Type "Hello, Wikipedia!".
5.2 Type "This is JOSS.".

Stejně jako v BASIC, všechny vstupy do smyčky for mohly být konstanty, proměnné nebo jiné výrazy.

Výrazy a propozice

Jedinečnou vlastností JOSS bylo zpracování logických výrazů. Většina počítačových jazyků nabízí nějaký způsob, jak například vytvořit vícedílný matematický výraz, Set x=(1+2)·3.který nastaví proměnnou x na hodnotu 9. JOSS tento koncept rozšířil jasným definováním pojmu „propozice“, výrazu, který vrací logický hodnota, true nebo false, místo číselné hodnoty. Byly většinou vidět ve Ifvýkazech, jako ve výše uvedených příkladech, ale booleovskou hodnotu lze také uložit přímo do proměnné, nebo je možné převést true na 1 a false na 0 pomocí funkce tv(hodnota pravdivosti).

Kromě propozic měl JOSS také koncept „podmíněných výrazů“. Ty se skládaly ze řetězců propozic spolu s kódem, který by se spustil, kdyby byl tento návrh pravdivý. To umožnilo vícekrokové rozhodovací stromy zapsat do jednoho řádku. Slouží účelu podobnému ternárnímu operátoru, který se nachází v moderních jazycích, jako je C nebo Java , kde se používají k vrácení hodnoty z kompaktní struktury implementující if-then-else . Verze JOSS má libovolný počet podmíněných, ne jen tři, takže je to spíše prohlášení o kompaktním přepínači než kompaktní if-then.

Tento příklad znovu vytvoří funkci sgnfunkce:

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

To definuje funkci „s“, která přebírá jeden parametr „x“ a provede tři po sobě jdoucí testy proti ní. Jakýkoli test uspěje jako první, vrátí odpovídající hodnotu za dvojtečkou.

Rozsahy

Další pokročilou funkcí JOSS bylo, že měl koncept rozsahu jako vestavěný typ, který lze ukládat a manipulovat s ním. Rozsahy se obvykle nacházejí jako vstupy pro smyčky , kde jsou součástí syntaxe samotné smyčky. Například v BASICu člověk píše smyčku for pomocí této základní syntaxe:

FOR I=1 TO 5 STEP 2

Tím se provede smyčka, která I přiřadí hodnoty 1, 3, 5 a poté se ukončí.

JOSS použil poněkud nejasný formát k definování limitů smyčky. Ekvivalentní kód v JOSS by byl:

 I=1(2)5

Všimněte si, že tento kód neobsahuje for. Důvodem je, že v JOSS jsou rozsahy prvotřídní občané jazyka, nikoli něco, co je součástí smyčky jako v BASICu. Rozsahy lze definovat a používat v mnoha kontextech mimo smyčky. Zde je například podmíněný výraz, který vyhodnotí faktoriál parametru x:

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

V tomto příkladu existují dvě hlavní věty oddělené středníkem. První vlevo uvádí, že pokud je parametr x 0, podmínka by se měla okamžitě vrátit 1. Pokud tento návrh selže, přesune se do druhého testu vpravo. Ten zkontroluje, zda je zlomková část x nula (tj. Je to celé číslo), a pokud ano, zavolá prodfunkci, aby znásobila rozsah hodnot. Parametr prod'' je také návrh, ale v tomto případě je test nahrazen iterátorem smyčky, který běží od 1 do x s krokem 1. Pokud je tento návrh pravdivý, což je pro všechny hodnoty smyčky, vrátí se index i. To způsobí odeslání řady hodnot prodod 1 do x.

Kombinace těchto funkcí umožňuje psaní složitých funkcí několika příkazy. Tento druh funkcí se stal běžným pouze v mnohem modernějších jazycích, které obvykle používají iterátory nebo funkci mapy k zajištění stejných výsledků. Schopnost JOSS kombinovat rozhodnutí a smyčky v kompaktní podobě není v jiných jazycích té doby, včetně odnoží, jako je FOCAL, známa.

Příkazy

Soubor

SetPříkaz přiřadí výsledky výrazu na definovaný proměnné. Ekvivalentní se ZÁKLADNÍMI LET.

01.30 Set p=3.14156.
01.60 Set i=l*(r/100)*t.

Setbyl volitelný při použití v přímém režimu, kde bylo možné psát x=5.bez příkazu Set. To nebylo povoleno v nepřímém režimu, na rozdíl od BASIC.

Nechat

Letbyl použit k definování funkcí definovaných uživatelem. Ekvivalentní se ZÁKLADNÍMI DEF FN.

Let t(x)=sin(x)/cos(x).
Set j=t(1.1).
Type j.

Let lze také použít k nastavení hodnoty proměnné pomocí vzorce sestávajícího z konstanty:

Let x=5.

Od té chvíle ho lze použít stejně jako ten, který byl vytvořen pomocí Set. Je zde drobný rozdíl, když však na tento X odkazujeme v kódu, bude hodnota vypočítána vyhodnocením na pravé straně. A Setje vyhodnoceno pouze jednou, takže je mnohem rychlejší.

Systém obecně navrhoval používat Letpouze v přímém režimu a ukládat je pro použití v programu vložením do horní nebo dolní části souboru. Tím se zabránilo tomu, že Letbyl během provádění vyvolán vícekrát, protože během procesu načítání by byl vyvolán pouze jednou.

Poptávka

DemandVezme seznam proměnných a uloží uživatelských vstupních proměnných. Volitelný askvalifikátor přidal vlastní výzvu. Ekvivalentní se ZÁKLADNÍMI INPUT.

01.01 Type "What is your age?".
01.02 Demand A.
01.03 Type "You are", A.
01.04 Demand H as "What is your height?".
01.05 Type H,"? That tall?".

Typ

TypePříkaz vydává jeden nebo více položek oddělených čárkami. Ve své základní podobě je ekvivalentní BASIC PRINT. Nicméně, Typeobsahuje řadu volitelných forem, které ji činí velmi přetížení, vykonávají řadu nesouvisejících výstupních úkolů.

Při použití k tisku hodnot mohou být parametry proměnné, doslovné řetězce obklopené dvojitými uvozovkami a speciální _znak, který vytváří posun řádku. Typetaké podporuje formátovaný výstup pomocí formátovacích řetězců. Podrobnosti najdete v Formníže uvedené části .

Typ se také používá jako ekvivalent LISTprohlášení BASIC při psaní programu. Například Type step 1.1.vytiskne jeden řádek kódu, zatímco Type part 1.vytiskne celou část a Type all.vytiskne celý program.

Dále jej lze také použít k tisku seznamů interních hodnot. Type all values.vytvoří seznam všech proměnných a jejich hodnot, zatímco Type size.vytiskne velikost programu. Klíčová patří size, timea users.

Strana

Pagespouští podávání stránek na speciálních terminálech JOSS. JOSS by normálně odesílal stránku, když terminál dosáhl řádku 54 na papíře, takže pokud by někdo chtěl zajistit, aby blok dat nebyl rozdělen na polovinu, mohl:

1.10 Page if $>44.

$ je pseudo-proměnná, která vrací aktuální číslo řádku.

Čára

Line spustí linkový posuv na speciálních terminálech JOSS.

Na

ToPříkaz přeskočí spuštění programu na určitou část či číslo kroku, za použití To part 1.nebo To step 1.1.resp. Je to ekvivalent BASIC GOTO. Kontrast s Gonepřímým příkazem použitým z příkazového řádku, který spouští programy, ekvivalentem BASIC RUN.

01.01 Demand "TYPE A NUMBER",A.
01.05 To step 1.01.
01.10 To part 1.

Dělat

Doje podobný Topodprogramu, ale rozvětvuje se na podprogram. Stejně jako u Tomůžete Do partnebo Do step. Pokud je k dispozici krok, spustí se tento jediný řádek a poté se vrátí do příkazu za Do. Pokud je poskytnuta součást, spuštění začíná na prvním řádku bloku a pokračuje, dokud není dosaženo konce bloku nebo dokud nenajdete Donepříkaz.

01.15 Do step 7.24.
01.16 Do part 8.

Doměl jeden speciální krátký formulář, podle kterého byl ve většině programů velmi běžný. To použilo timesmodifikátor namísto normálního for, v případě jednoduchých smyček. Následující řádky jsou tedy ekvivalentní:

Do part 1 for i=1(1)5.
Do part 1, 5 times.

JOSS udržuje ukazatel na aktuálně provádějící řádek, který Doby se změnil. Zahrnoval však speciální „závorku“, kterou bylo možné použít v přímém režimu k testování určitých částí kódu beze změny hlavního ukazatele. Pokud se například program zastavil kvůli chybě a nebylo jasné, která sekce způsobila problém, lze konkrétní podprogram otestovat pomocí:

 (Do part 2.)

Hotovo

DonePříkaz vrátí z volání podprogramu. Jelikož se podprogramy vracejí automaticky, když je dosaženo konce součásti, Doneje vyžadováno pouze pro předčasné vrácení a často se používá s podmíněným. Ekvivalentní se ZÁKLADNÍMI RETURN.

*Routine to ask the user for a positive value and repeat until it gets one
01.10 Demand X as "Enter a positive value greater than zero".
01.20 Done if X>0.
01.30 To step 1.1

Stop

StopPříkaz ukončí provádění programu a vrátí řízení do prostředí pro úpravy. Ekvivalentní k BASIC ENDnebo STOP, ačkoliv je BASIC STOPurčen k tomu, aby umožnil CONTvyzvednutí provedení na stejném místě, funkce, která nemá v systému orientovaném na pracovní prostor JOSS žádný přímý ekvivalent.

01.10 Type X.
01.20 Stop.

Jít

K dispozici pouze v přímém režimu, Goje ekvivalentem BASIC RUNa CONTv závislosti na tom, zda je program aktuálně zastaven kvůli chybě nebo Stoppříkazu.

zrušení

Další příkaz pouze v přímém režimu Cancelse používá, když se program zastavil kvůli chybě a uživatel chce program resetovat, což provede vymazáním čítače programu . GoBy vyzvednout na posledním místě, ale vydává jen Cancelznačky Gozačínají na vrcholu znovu. Pokud byl aktuální bod zlomu způsoben závorkou (Do.), je možné vydat závorku (Cancel.), aby se zastavilo právě toto dílčí provádění a umožnilo Gose pokračovat na posledním řádku bez závorek.

Matematika

JOSS uložil všechna čísla jako celé číslo a desítkový exponent. To znamená, že výpočty byly přesné desetinné hodnoty, na rozdíl od výpočtů s plovoucí desetinnou čárkou .1/3 + 1/3 + 1/3 byla přesně 1.

JOSS obsahoval šest matematických operátorů:

  • + pro přidání
  • - pro odčítání
  • · pro násobení (neinvazivní, ne tečka)
  • / pro rozdělení
  • * pro exponenty
  • |...| pro absolutní hodnotu, s výrazem uprostřed

Matematické výrazy by mohly použít () a [] zaměnitelně v párovaných párech, aby stanovily přednost. Například:

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

Vyrobí 360.

Funkce

Jazyk obsahoval následující vestavěné funkce:

Matematika

  • sin() - Sinus úhlu udávaného v radiánech
  • cos() - Cosine
  • arg() - Vezme hodnoty X a Y bodu a vrátí úhel mezi tímto bodem a osou x
  • log() - Naperian log
  • exp() - Přirozený základ síly argumentu
  • sqrt() - Odmocnina
  • sgn() -Znamení argumentu, 0 vrací 0, -ve hodnoty -1, +ve +1
  • ip()- Celočíselná část argumentu, ip(22026.4658)vrátí 22026
  • fp() - Zlomková část, vrací 0,4658
  • dp() - Digitální část, vrací 2.20264658
  • ep() - Exponent part, vrátí 4, umístění desetinné čárky

Boolean

  • tv() - Pravdivá hodnota, vrací 1, pokud je výraz pravdivý, 0, jinak

Smyčkové funkce

JOSS také definoval řadu funkcí, které prováděly smyčku interně, aby se zabránilo tomu, že programátor bude muset psát Forsmyčku k provádění jednoduchých úkolů, jako je sčítání řady čísel. Parametry může být buď seznam jednoduchých výrazů oddělených čárkami, nebo konstrukt rozsahu, jehož příkazem může být libovolný příkaz nebo volání funkce.

  • max() - Maximální hodnota poskytnutých výrazů
  • min() - Minimální
  • sum() - Součet
  • prod() - Produkt
  • first() - První položka v seznamu, která odpovídá podmínce, vrátí výsledek

Správa souborů

Systém JOSS používal pevný disk k ukládání uživatelských programů na vyhrazené místo. V tomto prostoru bylo několik souborů, na které se odkazovalo pomocí vícedílného názvu souboru, který se skládal například z celých čísel a pětipísmenných názvů v závorkách 123 (hello). Celočíselná část je ekvivalentem adresáře a název je v něm podsoubor spravovaný samotným JOSS.

Soubory se zapisují File all as item filename.a načítají Recall item filename.. Dalo by se také přečíst nebo uložit pouze určité části pracovního prostoru, například File part 1 as item filename.uložit jednu rutinu do souboru. Kromě toho lze nastavit výchozí soubor, na který se předpokládají všechny odkazy, pomocí kterého Use item filename.lze odstranit soubory Discard.

Ukázkový program

1.1 Demand p,q.
1.2 Stop if q<0 or r(q,2)=0.
1.3 Set a=1.
1.4 Do part 2 while q>1 and a≠0.
1.5 Type a in form 3.
1.6 Stop.

2.1  Do part 20.
2.1  Do part 11 if p<0.
2.2  Do part 12 if p≥q.
2.3  Do part 13 if p=0.
2.4  Done if a=0.
2.5  Set p=p/4 while r(p,4)=0.
2.6  Do part 14 if r(p,2)=0.
2.7  Do part 20.
2.8  Set a=-a if r(p,4)=r(q,4)=3.
2.9  Set s=p, p=q, q=s.
2.95 Do part 20.

11.1 Set a=-a if r(q,4)=3.
11.2 Set p=|p|.
11.3 Do part 20.

12.1 Set p=r(p,q).
12.2 Do part 20.

13.1 Set a=0, p=1, q=1.

14.1 Set a=-a if r(q,8)=3 or r(q,8)=5.
14.2 Set p=p/2.

20.1 Type p, q in form 1 if a=1.
20.2 Type p, q in form 2 if a=-1.

Form 1: "  L(%.0f,%.0f)  ="
Form 2: "  -L(%.0f,%.0f)  ="
Form 3: "  %.0f\n"

Všimněte si, že se nejedná o originální ukázku, ale spíše o vzorek z moderního simulátoru. Oproti původnímu jazyku JOSS existují určité syntaktické rozdíly.

Poznámky

Reference

Citace

Prameny

Další čtení