BOŻEK CHIŃSKI
Paradygmaty | nieustrukturyzowane , proceduralne , imperatywne |
---|---|
Rodzina | BOŻEK CHIŃSKI |
Zaprojektowany przez | Cliffa Shawa |
Deweloper | Firma RAND |
Po raz pierwszy pojawiły się | 1963 |
Zakres | Leksykalny |
Język implementacji | język programowania |
Platforma | JOHNNIAC , PDP-6 |
Wpływ na | |
TELCOMP , CAL , FOCAL , MUMPS |
JOSS (skrót od JOHNNIAC Open Shop System ) był jednym z pierwszych interaktywnych języków programowania z podziałem czasu . Był pionierem wielu funkcji, które stały się powszechne w językach od lat 60. do 80. XX wieku, w tym używania numerów linii zarówno jako instrukcji edycji, jak i celów dla rozgałęzień , instrukcji opartych na decyzjach boolowskich oraz wbudowanego edytora kodu źródłowego , który może wykonywać instrukcje w trybie bezpośrednim lub natychmiastowym, co nazwali konwersacyjnym interfejsem użytkownika .
JOSS został początkowo zaimplementowany na maszynie JOHNNIAC w RAND Corporation i udostępniony online w 1963 roku. Okazał się bardzo popularny, a użytkownicy szybko ugrzęzli w maszynie. Do 1964 roku poszukiwano zamiennika o wyższej wydajności. JOHNNIAC przeszedł na emeryturę w 1966 roku i został zastąpiony przez PDP-6 , który ostatecznie rozrósł się do obsługi setek terminali komputerowych opartych na IBM Selectric . Terminale używały zielonego atramentu do wprowadzania danych przez użytkownika i czarnego do odpowiedzi komputera. Każde polecenie , które nie zostało zrozumiane, wywoływało odpowiedź Eh?
lub PRZEPRASZAM
.
System był bardzo wpływowy, tworząc różne porty i odgałęzienia. Niektóre pozostały podobne do oryginału, jak TELCOMP i STRINGCOMP , CAL , CITRAN, ISIS, PIL/I, JEAN ( seria ICT 1900 ), Algebraic Interpretive Dialogue (AID, na PDP-10 ); podczas gdy inne, takie jak FOCAL i MUMPS , rozwijały się w charakterystycznych kierunkach. Wykazuje również duże podobieństwo do języka BASIC , które można było znaleźć na mikrokomputerach w latach 80., różniąc się głównie składni .
Historia
Wstępny pomysł
W 1959 roku Willis Ware napisał notatkę RAND na temat komputerów, w której stwierdził, że przyszłe komputery będą miały „wiele osobistych stacji wejścia-wyjścia, tak aby wiele osób mogło jednocześnie wchodzić w interakcje z maszyną”. Notatka wzbudziła zainteresowanie Sił Powietrznych Stanów Zjednoczonych , głównych sponsorów Rand, iw 1960 roku utworzyli oni Information Processor Project, aby zbadać tę koncepcję, która wkrótce będzie znana jako podział czasu . Projekt nie dotyczył konkretnie podziału czasu, ale miał na celu ogólną poprawę interakcji człowiek-komputer. W tamtym czasie pomysł polegał na tym, że stała interakcja między użytkownikiem a komputerem w sposób tam iz powrotem uczyniłaby takie interakcje bardziej naturalnymi. Jako dyrektor JOSS Keith Uncapher ujął to później:
Wydaje mi się, że były dwa przekonania, które kierowały tym eksperymentem. Jednym z nich było to, że od co najmniej 1950 roku, kiedy dołączyłem do Rand, informatyczna część Rand zawsze koncentrowała się na płynnej interakcji użytkownika. To było po prostu w nas wbudowane. Nauczyliśmy się tego od Gunninga. ... wszystko o czym myśleliśmy. Drugim było to, że matematycy zmagający się z kalkulatorami Marchanta nie byli w stanie użyć JOHNNIAC w jego surowej postaci. To było po prostu zbyt trudne. Musieli nauczyć się być programistami. To było dla nich po prostu frustrujące doświadczenie. Chcieliśmy czegoś, co wyglądałoby dla nich jako naturalny sposób myślenia o pomocy w rozwiązywaniu ich problemów bez zbytniego szkolenia i bez poczucia zostania programistą, ponieważ to by ich powstrzymało.
Formalna propozycja opracowania tego, co stało się JOSS na komputerze JOHNNIAC , została przyjęta w marcu 1961 roku.
JOSS-1
JOSS został prawie w całości zaimplementowany przez J. Clifforda Shawa , matematyka, który pracował w rozwijającym się dziale komputerów Rand. Został napisany w symbolicznym języku asemblera o nazwie EasyFox (E i F w ówczesnym alfabecie fonetycznym armii amerykańskiej), również opracowanym przez Shawa.
System JOSS został formalnie wprowadzony po raz pierwszy w maju 1963 roku, obsługując pięć konsol, jedną w maszynowni, a kolejne cztery w biurach wokół budynku. Wczesne konsole były oparte na Transmitting Typewriter IBM Model 868, ponieważ Selectric nie został jeszcze wprowadzony na rynek, gdy rozpoczął się rozwój. Pierwszy harmonogram został opublikowany 17 czerwca, a JOSS działał codziennie przez trzy godziny od 9:00 do 12:00. Został uznany za w pełni operacyjny na ośmiu terminalach w styczniu 1964 roku. Ostateczna wersja została wdrożona w styczniu 1965 roku.
W tym czasie JOHNNIAC miał już ponad dekadę, a jego logika oparta na lampach nigdy nie była wysoce niezawodna. Nawet gdy działał dobrze, system stał się tak popularny, że szybko ugrzązł. Użytkownicy byli entuzjastycznie nastawieni, jeden stwierdził:
Ludzie dopasowują swoje życie do JOSS… Nie ma sensu przychodzić do RAND przed 10:00, kiedy przyjeżdża JOSS, właściwie południe lub po 17:00 to lepsza pora, JOSS jest mniej zajęty. Kiedy JOSS zaczyna wpisywać odpowiedzi, ekscytującej przyjemności dorównuje tylko wynikający z tego udręka, gdy JOSS przerywa bełkot [ sic ] lub odchodzi, polecając twój kod zapomnienie. Trudno nam żyć z JOSSem, ale nie możemy bez niego żyć.
Inny ujął to bardziej zwięźle:
To lepsze niż piwo — jesteśmy uzależnieni.
Przełączenie JOSS-2
W maju 1964 roku podjęto decyzję o poszukiwaniu nowej maszyny, która zastąpiłaby JOHNNIACa i przeznaczono ją całkowicie do obsługi rozszerzonej wersji JOSS. Maszyna musiałaby również obsługiwać nowe terminale wykonane zgodnie ze specyfikacjami Rand i zostać dostarczona do 31 października 1965 r.
Na nową maszynę wpłynęło łącznie dziewięć ofert. Firma Digital Equipment Corporation (DEC) wygrała konkurs ze swoim nowym systemem PDP-6 , a na zakup przyznano fundusze Sił Powietrznych. DEC zgodził się również na zbudowanie trzydziestu terminali opartych na maszynie do pisania IBM Selectric zmodyfikowanej za pomocą specjalnego mechanizmu umożliwiającego przejście do następnej strony w składanym podajniku papieru. Kilka innych części całego systemu zostało dostarczonych przez inne firmy.
PDP-6 przybył pod koniec lipca 1965 roku i był początkowo testowany przy użyciu Teletype Model 33 jako terminali. Nowa wersja kodu została opracowana przez Charlesa L. Bakera, Josepha W. Smitha, Irwina D. Greenwalda i G. Edwarda Bryana. System został po raz pierwszy uznany za operacyjny w październiku, chociaż obejmowało to sześć godzin zaplanowanej konserwacji tygodniowo. Pierwszy terminal prototypowy przybył w listopadzie. W grudniu terminal w Las Vegas po raz pierwszy został zdalnie podłączony do maszyny. W lutym 1966 roku wysłano go do Bazy Sił Powietrznych McClellan , a następnie w sierpniu do Akademii Sił Powietrznych i dwóch we wrześniu do ARPA i biura Sił Powietrznych w Pentagonie . Pierwsze stałe połączenie dalekopisowe poza siedzibą dla Teletype Model 35 zostało zainstalowane w bazie sił powietrznych Langley w lutym 1967 roku.
Po uruchomieniu nowej maszyny JOHNNIAC został wyłączony 11 lutego 1966 r. I 18 lutego oficjalnie przeszedł na emeryturę. Jego ostatni uruchomiony program został napisany w JOSS i odliczał sekundy do wyłączenia. Maszyna została wysłana do Muzeum Hrabstwa Los Angeles iw końcu trafiła do Muzeum Historii Komputerów pod San Francisco . Po zastąpieniu przez system JOSS-2, oryginał był z mocą wsteczną znany jako JOSS-1.
Zastosowanie JOSS-2
Pod koniec 1966 roku nowy system JOSS-2 był w pełni funkcjonalny i oddany do użytku przez JOSS 24/7. Nowa maszyna oferowała około 30-krotnie większą prędkość obliczeniową, pięciokrotnie większą przestrzeń dyskową na użytkownika i wiele nowych funkcji w samym języku. Nowa platforma mogłaby docelowo obsługiwać do 100 terminali jednocześnie. Siły Powietrzne pozostały właścicielem systemu, a Rand i inni działali jako konsultanci. Czas procesora był rozliczany dla użytkowników zewnętrznych w wysokości około 1 USD za minutę, chociaż było to tylko podczas rzeczywistego wykonywania, czas spędzony na pisaniu i drukowaniu był bezpłatny.
Do 1970 roku w Rand i różnych miejscach sił powietrznych w całym kraju było od 500 do 600 użytkowników. Wielu z nich było okazjonalnymi użytkownikami, dokładnie do tego przeznaczony był ten system. Aby je wspierać, niestandardowe terminale zostały wyposażone w specjalne „wtyczki JOSS”, dzięki czemu można je było przewozić z biura do biura i podłączać do niestandardowych gniazdek. Wokół Rand zainstalowano dwieście wtyczek, a obudowa terminala została zaprojektowana tak, aby była wystarczająco wąska, aby zmieściła się w drzwiach, pozostawiając jednocześnie miejsce na kawę po jednej stronie. Przełączenie wyłącznika zasilania na terminalu spowodowało połączenie w nowej lokalizacji.
Niestandardowe terminale zostały zaprojektowane dla JOSS, ponieważ inżynierowie uważali, że „funkcje telekomunikacyjne Modelu 33 są tajemnicą dla nieprzeszkolonej osoby” i byłyby zbyt mylące dla okazjonalnych użytkowników, aby zawracali sobie głowę nauką. W praktyce mechanizmy oparte na Selectric okazały się zbyt kruche, aby mogły być stale używane i często były naprawiane w terenie przez serwisantów IBM. W 1970 roku całkowicie przebudowano jedną trzecią terminali, a wydajność komputera została spowolniona, aby poprawić niezawodność. Do tego czasu Siły Powietrzne zdecydowały się zamiast tego użyć Modelu 35, ponieważ był on zarówno łatwo dostępny, jak i znacznie tańszy.
Zastosowania były entuzjastyczne i aby im służyć, Rand zaczął publikować biuletyn JOSS , redagowany przez Shirley Marks. Ostatecznie w okresie od listopada 1967 do czerwca 1971 ukazały się 44 numery.
JOSS-3
We wczesnych latach siedemdziesiątych programiści z jednego z obiektów IBM na zachodnim wybrzeżu zbudowali JOSS-3 dla IBM 370/158 z systemem OS/360 . Istnieje niewiele informacji na temat tego systemu, z wyjątkiem tego, że to na tej maszynie JOSS ostatecznie przeszedł na emeryturę. Zgodnie z notatką w przeglądzie historycznym, Rand wahał się, czy pozwolić IBM na używanie nazwy JOSS, w wyniku czego „wersja IBM nigdy nie była powszechnie używana”.
Realizacja
JOSS-II na PDP-6 został podzielony na dwie części, pasujące do układu pamięci wewnętrznej maszyny. Maszyna została wyposażona w dwa banki pamięci rdzeniowej , po 16 tys. słów 36-bitowych w każdym. Sam system JOSS, który obejmował system operacyjny , kod zarządzania użytkownikami i plikami, obsługę terminali i interpreter, wykorzystał większość pierwszego z tych banków. Drugi bank był używany dla programów użytkownika. Chociaż była to stosunkowo duża ilość pamięci jak na tamte czasy, system był tak intensywnie używany, że magazyn użytkowników o pojemności 16 000 słów nie wystarczał i był wspierany przez bęben magnetyczny do obsługi stronicowania. Bęben był napędzany zewnętrznym sprzętem i nie wymagał uwagi głównego procesora.
Aby obsługiwać wiele programów użytkownika, sprzęt PDP-6 został zmodyfikowany w celu zbadania bitu 20 dowolnego odniesienia do adresu. Jeśli ten bit został ustawiony, adres znajdował się w „przestrzeni użytkownika” i został zmodyfikowany tak, aby adres zero wskazywał na adres bazowy tego użytkownika. W ten sposób programy użytkownika można było przenosić w pamięci bez powodowania problemów dla systemu, a system operacyjny mógł przełączać się od użytkownika do użytkownika, po prostu zmieniając pojedynczy rejestr wewnętrzny.
Stałą pamięć zapewniał dysk twardy Storage Products z 5,7 milionami słów. Podobnie jak w przypadku bębna, rzeczywiste wejście / wyjście do iz bębna było obsługiwane z zewnątrz, chociaż w tym przypadku ruch był wyzwalany przez działania użytkownika w celu załadowania i zapisania ich programów. Napęd taśmowy zgodny z IBM był używany do przenoszenia danych do iz napędu w razie potrzeby, operacja ta była również niezależna od procesora. Dostępne były również dwie DECtape , które działały w taki sam sposób jak napęd IBM.
Terminale były obsługiwane przez niestandardowy „koncentrator”, który składał się z mechanicznego przełącznika Strowgera , który mógł podłączyć dowolną z 300 do 400 możliwych wtyczek terminali do dowolnego z 40 wyjść. Kolejne osiem linii było poświęconych Teletype Model 33 , w przeciwieństwie do Selectrics w stylu JOSS. Te 48 linii zostało następnie podłączonych do elektronicznego multipleksera podłączonego do procesora. Multiplekser był przerwaniami , co oznacza, że bezczynne terminale nie zużywały żadnych cykli.
Niestandardowe terminale JOSS zostały zbudowane przez DEC. Składały się one z mechanizmu Selectric wbudowanego w niestandardową obudowę zawierającą system komunikacyjny, zasilacz i inne komponenty. Do zapewnienia podstawowych symboli matematycznych, takich jak ≠, użyto niestandardowej kulki czcionki, więc nie trzeba było używać kombinacji dwóch znaków, takich jak <>. System komunikacji został oparty na 6-bitowym kodzie znakowym w 8-bitowym pakiecie z bitami startu i stopu. Linie były napędzane z prędkością 120 bitów / s, aby dopasować się do maksymalnej prędkości 15 znaków na sekundę mechanizmu Selectric. Kody Shift-in i shift-out zostały użyte do przesunięcia wstęgi z zielonej na czarną iz powrotem. Kody te zostały również zauważone przez system komunikacyjny i zmieniły światła na panelu przednim, aby wskazać, czy komputer lub użytkownik miał kontrolę nad terminalem w tym momencie.
Język
Tryb bezpośredni i pośredni
JOSS przedstawił pomysł pojedynczego edytora wiersza poleceń , który działał zarówno jako język interaktywny, jak i edytor programu. Polecenia, które zostały wpisane bez numeru linii, były wykonywane natychmiast, w tym, co JOSS nazywał „ trybem bezpośrednim ”. Jeśli ten sam wiersz był poprzedzony numerem wiersza, zamiast tego był kopiowany do obszaru przechowywania kodu programu, który JOSS nazywał „trybem pośrednim”. Nowe wiersze były dodawane do programu, jeśli numer wiersza był unikalny, zastępowano istniejące wiersze tym samym numerem lub usuwano z programu, jeśli wpisano istniejący numer wiersza bez następującego po nim kodu.
W przeciwieństwie do większości języków BASIC, JOSS zapisał w plikach całe dane wprowadzone przez użytkownika, a nie tylko kod programu. Po załadowaniu JOSS w zasadzie ponownie wpisał wiersze. Oznaczało to, że pliki programów mogły zawierać zarówno instrukcje programu, jak i instrukcje trybu bezpośredniego. Na przykład często zdarzało się, że programy wyświetlały wiersze instrukcji, a następnie kończyły plik Go.
aby natychmiast uruchomić program, gdy tylko zakończy ładowanie. Było kilka funkcji, których można było używać tylko w trybie bezpośrednim, takich jak Let
i Form
, które zostały wprowadzone bez numerów linii, ale nadal zwracane po załadowaniu programu.
Bezpośrednie i pośrednie instrukcje można dowolnie mieszać w przestrzeni roboczej. Umożliwiło to wstawianie komentarzy do kodu źródłowego poprzez dodawanie wierszy w trybie bezpośrednim zaczynających się od *
lub umieszczanie jednego na końcu wiersza kodu, a następnie dodanie komentarza po nim. Puste wiersze również zostały zignorowane, co pozwoliło na podzielenie programu dla przejrzystości.
Oświadczenia programowe
Każda linia w programie JOSS musi zaczynać się od numeru linii. Numery wierszy to liczby stałoprzecinkowe składające się z dwóch dwucyfrowych liczb całkowitych oddzielonych kropką. Podobnie jak w BASIC-u, numery wierszy są używane zarówno jako etykiety do kierowania z To
i Do
, jak i do obsługi edycji. Wprowadzenie wiersza kodu z nowym numerem wiersza powoduje wstawienie go do programu, natomiast wprowadzenie wiersza z zachowanym numerem wiersza zastępuje poprzednią wersję lub usuwa ją, jeśli jest pusta.
Część numeru wiersza po lewej stronie okresu nazywana jest stroną lub częścią , podczas gdy część po prawej stronie nazywana jest linią . Tak więc numer linii 10.12
odnosi się do strony 10, linii 12. Gałęzie mogą kierować albo na stronę, albo na linię na stronie. Kiedy używany jest późniejszy format, połączona strona i linia są określane jako krok .
Strony służą do definiowania podprogramów , które powracają, gdy następna linia znajduje się na innej stronie. Na przykład, jeśli podprogram do obliczania pierwiastka kwadratowego z liczby znajduje się na stronie 3, można by mieć trzy wiersze kodu 3.1, 3.2 i 3.3 i można by go wywołać za pomocą części Do 3. Kod powróciłby do instrukcji
po Do, gdy dojdzie do następnej linii na innej stronie, na przykład 4.1. Nie ma potrzeby stosowania ekwiwalentu RETURN na
końcu, chociaż jeśli wymagany jest wcześniejszy powrót, Done
to realizuje.
Każda linia musi zaczynać się od słowa kluczowego polecenia następującego po numerze linii. Nie istnieje koncepcja polecenia domyślnego , jak ma to miejsce w BASIC-u z jego opcjonalną instrukcją LET
. W jednym wierszu można umieścić wiele instrukcji, oddzielając je dwukropkami lub średnikami. Każda linia musi kończyć się kropką.
Pętle i warunki
JOSS używa notacji sufiksowej, aby wskazać ocenę warunkową, „zrób to, jeśli to prawda”, w przeciwieństwie do większości języków, które umieszczają warunek na początku w notacji przedrostkowej, „jeśli to prawda, zrób to”. Podobnie jak BASIC, ale w przeciwieństwie do FORTRAN lub FOCAL , każda instrukcja może być warunkowo oceniona w ten sposób. Na przykład, aby wydrukować ciąg tylko wtedy, gdy spełniony jest warunek, można połączyć if z Type
:
1.1 Wpisz „Witaj, świecie!” jeśli X=5.
JOSS obsługiwał sześć porównań wrostków, =
, ≠
, ≥
, ≤
, >
, <
i operatory boolowskie lub
, i
, a nie
.
Pętle były obsługiwane w podobny sposób, przy użyciu polecenia For
i nieco niejasnego formatu do określania granic pętli i wartości kroku, start(step)end
. Na przykład, aby przejść od 1 do 10 przez 2, format to 1(2)10
. Podobnie jak If
, For
można zastosować do dowolnej innej instrukcji:
1.2 Wpisz „Witaj, Wikipedia!” dla i=1(2)10.
Zauważ, że for odnosi się tylko do pojedynczej instrukcji; jeśli ktoś chce uruchomić wiele instrukcji w pętli, zostałyby one rozdzielone na inną część i wywołane za pomocą do:
1.3 Wykonaj część 5 dla i=1(1)100. 5.1 Wpisz „Witaj, Wikipedia!”. 5.2 Wpisz „To jest JOSS.”.
Podobnie jak w BASIC-u, dowolne dane wejściowe pętli for mogą być stałymi, zmiennymi lub innymi wyrażeniami.
Ponieważ tego rodzaju zakresy można było zastosować do dowolnej linii kodu, możliwe było zdefiniowanie ograniczeń i pętli podczas wywoływania programu. Weźmy na przykład program:
1.1 Typ X.
RUN
BASICa :
Zrób część 1.
To by produkowało:
0
Można jednak zmodyfikować to zachowanie, dodając konstrukcję pętli do wywołania:
Wykonaj część 1 dla X = 1(1)5.
Co dałoby:
1 2 3 4 5
Pozwala to na konstruowanie formuł w programach bez konieczności umieszczania ich w pętlach. Zapętlanie, jeśli jest to pożądane, może być zapewnione przez użytkownika podczas uruchamiania programu.
Wyrażenia i propozycje
Unikalną cechą JOSS była obsługa wyrażeń logicznych. Większość języków komputerowych oferuje jakiś sposób tworzenia wieloczęściowych wyrażeń matematycznych, na przykład Set x=(1+2)·3.
co ustawia zmienną x na wartość 9. JOSS rozwinął tę koncepcję, jasno definiując pojęcie „propozycji”, wyrażenia, które zwraca wartość logiczną, prawda lub fałsz, zamiast wartości liczbowej. Były one najczęściej spotykane w If
, jak w powyższych przykładach, ale wartość logiczna mogła być również przechowywana bezpośrednio w zmiennej lub można było zamienić wartość true na 1 i false na 0 za pomocą tv
(wartość logiczna).
Oprócz zdań JOSS miał również pojęcie „wyrażeń warunkowych”. Składały się one z ciągów zdań wraz z kodem, który działałby, gdyby to zdanie było prawdziwe. Umożliwiło to zapisanie wieloetapowych drzew decyzyjnych w jednym wierszu. Służą celowi podobnemu do operatora trójskładnikowego występującego we współczesnych językach, takich jak C lub Java , gdzie są używane do zwracania wartości ze zwartej struktury implementującej if-then-else . Wersja JOSS ma dowolną liczbę warunków warunkowych, nie tylko trzy, więc jest to bardziej zwarta instrukcja switch niż zwarte jeśli-to.
Ten przykład odtwarza funkcję funkcji sgn
:
Niech s(x)=[x=0:0; x>0:1; x<0:-1].
Definiuje to funkcję „s”, która przyjmuje pojedynczy parametr „x” i przeprowadza z nim trzy kolejne testy. Którykolwiek test zakończy się pomyślnie jako pierwszy, zwraca odpowiednią wartość po dwukropku.
Zakresy
Inną zaawansowaną cechą JOSS było to, że miał koncepcję zakresu jako wbudowanego typu, który można przechowywać i manipulować. Zakresy zwykle znajdują się jako dane wejściowe pętli for , gdzie są częścią składni samej pętli. Na przykład w BASICu pisze się pętlę for, używając tej podstawowej składni:
DLA I = 1 DO 5 KROK 2
Spowoduje to wykonanie pętli, która przypisze I wartości 1, 3, 5, a następnie zakończy działanie.
JOSS użył nieco niejasnego formatu, aby zdefiniować granice pętli. Równoważny kod w JOSS byłby:
ja=1(2)5
Zauważ, że ten kod nie zawiera for. Dzieje się tak dlatego, że w JOSS zakresy są pierwszorzędnymi obywatelami języka, a nie czymś, co jest częścią pętli, jak w BASIC-u. Zakresy mogą być definiowane i używane w wielu kontekstach poza pętlami. Oto na przykład wyrażenie warunkowe, które oblicza silnię parametru x:
Niech f(x)=[x=0:1 ; fp(x)=0:prod(i=1(1)x:i)].
W tym przykładzie są dwa główne zdania oddzielone średnikiem. Pierwszy, po lewej, stwierdza, że jeśli parametr x wynosi 0, warunek powinien natychmiast zwrócić 1. Jeśli ta propozycja się nie powiedzie, przechodzi do drugiego testu, po prawej. Ten sprawdza, czy ułamkowa część x wynosi zero (tj. jest liczbą całkowitą), a jeśli tak, to wywołuje funkcję prod
, aby pomnożyć zakres wartości. prod _
Parametr 's jest również propozycją, ale w tym przypadku test jest zastępowany iteratorem pętli, który działa od 1 do x, przechodząc o 1. Jeśli ta propozycja jest prawdziwa, co dotyczy wszystkich wartości pętli, zwraca indeks I. Powoduje to wysłanie serii wartości do prod
od 1 do x.
Połączenie tych cech pozwala na pisanie złożonych funkcji w kilku poleceniach. Tego rodzaju funkcjonalność stała się powszechna dopiero w znacznie bardziej nowoczesnych językach, które zwykle używają iteratorów lub funkcji mapowania , aby zapewnić te same wyniki. Zdolność JOSS do łączenia decyzji i pętli w zwartej formie jest nieznana w innych językach tamtej epoki, w tym w odgałęzieniach, takich jak FOCAL.
Polecenia
Ustawić
Polecenie Ustaw
przypisuje wyniki wyrażenia do określonej zmiennej. Odpowiednik LET
w BASICu .
01,30 Ustaw p=3,14156. 01.60 Ustaw i=l*(r/100)*t.
Zestaw
był opcjonalny, gdy był używany w trybie bezpośrednim, gdzie można było wpisać x=5.
bez polecenia Ustaw. Nie było to dozwolone w trybie pośrednim, w przeciwieństwie do języka BASIC.
Pozwalać
Let
został użyty do zdefiniowania funkcji zdefiniowanych przez użytkownika. Odpowiednik DEF FN języka BASIC
.
Niech t(x)=sin(x)/cos(x). Ustaw j=t(1.1). wpisz j.
Let
może być również użyty do ustawienia wartości zmiennej za pomocą formuły składającej się ze stałej:
Niech x=5.
Od tego momentu może być używany identycznie jak ten utworzony za pomocą Set
. Istnieje jednak subtelna różnica, gdy ten X jest odwoływany w kodzie, wartość zostanie obliczona na podstawie oceny prawej strony. Zestaw więc
jest znacznie szybszy.
System generalnie sugerował używanie Let
only w trybie bezpośrednim, zapisując je do użycia w programie, wstawiając je na górze lub na dole pliku. Pozwoliło to uniknąć Let
podczas wykonywania, ponieważ byłoby wywoływane tylko raz podczas procesu ładowania.
Popyt
Żądanie pobiera listę zmiennych i przechowuje dane wprowadzone przez użytkownika w zmiennych .
Opcjonalny kwalifikator jako
dodał niestandardowy monit. Odpowiednik INPUT języka BASIC
.
01.01 Wpisz „W jakim jesteś wieku?”. 01.02 Żądanie A. 01.03 Wpisz „Jesteś”, A. 01.04 Żądanie H jako „Jaki jest twój wzrost?”. 01.05 Typ H, „Tak wysoki?”.
Typ
Polecenie Type
wyświetla jeden lub więcej elementów oddzielonych przecinkami. W swojej podstawowej formie jest odpowiednikiem PRINT języka BASIC
. Jednak Type
zawiera wiele opcjonalnych formularzy, które powodują, że jest bardzo przeciążony, wykonując szereg niepowiązanych zadań wyjściowych.
Gdy jest używany do drukowania wartości, parametrami mogą być zmienne, ciągi literałów otoczone podwójnymi cudzysłowami oraz znak specjalny _
, który tworzy nowy wiersz. Typ
obsługuje również sformatowane dane wyjściowe przy użyciu ciągów formatujących. Szczegółowe informacje znajdują się w sekcji dotyczącej formularza poniżej.
Typ jest również używany jako odpowiednik instrukcji LIST języka BASIC
, zapisując program. Na przykład wpisz krok 1.1.
wydrukuje pojedynczą linię kodu, podczas gdy Wpisz część 1.
wydrukuje całą część, a Wpisz wszystko.
drukuje cały program.
Ponadto może być również używany do drukowania list wartości wewnętrznych. Wpisz wszystkie wartości.
tworzy listę wszystkich zmiennych i ich wartości, podczas gdy Type size.
drukuje rozmiar programu. Słowa kluczowe obejmują rozmiar
, czas
i użytkowników
.
Strona
Strona
uruchamia kanał strony na specjalnych terminalach JOSS. JOSS normalnie wysłałby stronę, gdy terminal osiągnął linię 54 na papierze, więc jeśli ktoś chciał mieć pewność, że blok danych nie zostanie podzielony na pół, można:
1.10 Strona, jeśli $>44.
$
to pseudozmienna, która zwraca bieżący numer wiersza.
Linia
Linia
uruchamia wysuw linii na specjalnych terminalach JOSS.
Do
Polecenie Do
powoduje przeskok wykonania programu do określonej części lub numeru kroku, używając części Do części 1.
lub Do kroku 1.1.
odpowiednio. Jest odpowiednikiem GOTO w BASICu
. Porównaj z Go
, pośrednim poleceniem używanym z wiersza poleceń, które uruchamia programy, odpowiednikiem RUN języka BASIC
.
01.01 Żądanie A jako „WPISZ NUMER”. 01.05 Do kroku 1.01. 01.10 Do części 1.
Do
Do
jest podobny do To
, ale rozgałęzia się do podprogramu. Podobnie jak w przypadku Do
, możesz wykonać część
lub wykonać krok
. Jeśli podano krok, ta pojedyncza linia jest uruchamiana, a następnie powraca do instrukcji po Do
. Jeśli podano część, wykonywanie rozpoczyna się od pierwszego wiersza bloku i trwa do osiągnięcia końca bloku lub napotkania instrukcji Done .
01.15 Wykonaj krok 7.24. 01.16 Zrób część 8.
Czy
miał jeden specjalny krótki formularz do wyszukiwania, który jest bardzo powszechny w większości programów. Używało to times
zamiast normalnego for
, w przypadku prostych pętli. Zatem następujące linie są równoważne:
Wykonaj część 1 dla i=1(1)5. Wykonaj część 1, 5 razy.
JOSS utrzymuje wskaźnik do aktualnie wykonywanej linii, którą zmieni Do.
Zawierał jednak specjalne „do” w nawiasie, którego można było użyć w trybie bezpośrednim do przetestowania niektórych sekcji kodu bez zmiany głównego wskaźnika. Na przykład, jeśli program zatrzymał się z powodu błędu i nie było jasne, która sekcja jest przyczyną problemu, można przetestować określony podprogram za pomocą:
(Zrób część 2.)
Zrobione
Polecenie Done
powraca z wywołania podprogramu standardowego. Ponieważ podprogramy powracają automatycznie po osiągnięciu końca części, polecenie Gotowe
jest wymagane tylko w przypadku wcześniejszego powrotu i jest często używane z trybem warunkowym. Odpowiednik RETURN
BASIC'a .
* Rutynowa prośba użytkownika o podanie wartości dodatniej i powtarzanie, aż ją uzyska. 01.10 Żądaj X jako „Wprowadź wartość dodatnią większą od zera”. 01.20 Gotowe, jeśli X>0. 01.30 Do kroku 1.1
Zatrzymywać się
Polecenie Stop
kończy wykonywanie programu i przywraca sterowanie do środowiska edycyjnego. Odpowiednik END
lub STOP
BASICa , chociaż STOP
BASIC- a ma na celu umożliwienie CONT
podjęcia wykonania w tym samym miejscu, funkcja, która nie ma bezpośredniego odpowiednika w zorientowanym na obszar roboczy systemie JOSS.
01.10 Typ X. 01.20 Zatrzymanie.
Iść
Dostępne tylko w trybie bezpośrednim, Go
jest odpowiednikiem RUN
i CONT języka BASIC
, w zależności od tego, czy program jest aktualnie zatrzymany z powodu błędu, czy napotkania polecenia Stop .
Anulować
Inne polecenie tylko w trybie bezpośrednim, Anuluj
, jest używane, gdy program został zatrzymany z powodu błędu, a użytkownik chce zresetować program, co robi, czyszcząc licznik programu . Go odebrałby w ostatniej lokalizacji, ale wydanie Anuluj
powoduje, że Go
zaczyna
ponownie od góry. Jeśli bieżący punkt przerwania wynikał z nawiasu (Do.)
, można wydać anulowanie w nawiasie (Cancel.)
, aby zatrzymać tylko to wykonanie podrzędne i pozwolić Go na
kontynuację w ostatniej linii bez nawiasów.
Matematyka
JOSS zapisał wszystkie liczby jako zmiennoprzecinkowe radix-10.
JOSS zawierał sześć operatorów matematycznych:
-
+
za dodanie -
-
do odejmowania -
·
dla mnożenia (interpunkcja , nie kropka) -
/
do podziału -
*
dla wykładników -
|...|
dla wartości bezwzględnej, z wyrażeniem w środku
Wyrażenia matematyczne mogą używać () i [] zamiennie w dopasowanych parach, aby ustalić pierwszeństwo. Na przykład:
1,30 Ustaw A=|-10·[5+1]·(1+5)|.
Wyprodukuje 360.
Funkcje
Język zawierał następujące wbudowane funkcje:
Matematyka
-
sin()
- Sinus kąta podanego w radianach -
cos()
— Cosinus -
arg()
— Pobiera wartości X i Y punktu i zwraca kąt między tym punktem a osią X -
log()
— log Napera -
exp()
- Naturalna podstawa do potęgi argumentu -
sqrt()
— pierwiastek kwadratowy -
sgn()
- Znak argumentu, 0 zwraca 0, -ve wartości -1, +ve +1 -
ip()
- Część całkowita argumentu,ip(22026.4658)
zwraca 22026 -
fp()
- Część ułamkowa, zwraca 0,4658 -
dp()
— Część cyfrowa, zwraca 2,20264658 -
ep()
— Część wykładnicza, zwraca 4, miejsce dziesiętne
logiczne
-
tv()
— Wartość logiczna, zwraca 1, jeśli wyrażenie jest prawdziwe, 0 w przeciwnym razie
Funkcje pętli
JOSS zdefiniował również szereg funkcji, które wykonywały wewnętrzne pętle, aby programista nie musiał pisać pętli For
w celu wykonywania prostych zadań, takich jak sumowanie serii liczb. Parametry mogą być albo listą prostych wyrażeń oddzielonych przecinkami, albo konstrukcją zakresu, której poleceniem może być dowolna instrukcja lub wywołanie funkcji.
-
max()
- Maksymalna wartość podanych wyrażeń -
min()
— Minimum -
sum()
- Suma -
prod()
— Produkt -
first()
— Pierwsza pozycja na liście, która pasuje do warunku, zwraca ten wynik
Zarządzanie plikami
System JOSS wykorzystywał dysk twardy do przechowywania programów użytkownika w przydzielonej przestrzeni. W tej przestrzeni znajdowało się wiele plików, do których odwoływano się przy użyciu wieloczęściowej nazwy pliku składającej się z liczby całkowitej i pięcioliterowej nazwy w nawiasach, na przykład 123 (cześć )
. Część całkowita jest odpowiednikiem katalogu, a nazwa jest zawartym w nim plikiem podrzędnym, utrzymywanym przez sam JOSS.
Pliki są zapisywane z opcją Plik wszystko jako nazwa pliku pozycji.
i załadowany z Recall item filename.
. Można również odczytywać lub zapisywać tylko niektóre części obszaru roboczego, na przykład Plik część 1 jako nazwa pliku elementu.
aby zapisać pojedynczą procedurę do pliku. Dodatkowo można było ustawić plik domyślny, do którego przyjmowane były wszystkie odwołania za pomocą opcji Użyj nazwy pliku pozycji.
Pliki można usunąć za pomocą przycisku Odrzuć
.
Przykładowy program
1.1 Popyt p,q. 1.2 Zatrzymaj się, jeśli q<0 lub r(q,2)=0. 1.3 Ustaw a=1. 1.4 Wykonaj część 2, gdy q>1 i a≠0. 1.5 Wpisz a w formularzu 3. 1.6 Stop. 2.1 Wykonaj część 20. 2.1 Wykonaj część 11, jeśli p<0. 2.2 Wykonaj część 12, jeśli p≥q. 2.3 Wykonaj część 13, jeśli p=0. 2.4 Wykonane, jeśli a=0. 2.5 Ustaw p=p/4 podczas gdy r(p,4)=0. 2.6 Wykonaj część 14, jeśli r(p,2)=0. 2.7 Wykonaj część 20. 2.8 Ustaw a=-a jeśli r(p,4)=r(q,4)=3. 2.9 Ustaw s=p, p=q, q=s. 2.95 Wykonaj część 20. 11.1 Ustaw a=-a jeśli r(q,4)=3. 11.2 Ustaw p=|p|. 11.3 Wykonaj część 20. 12.1 Ustaw p=r(p,q). 12.2 Wykonaj część 20. 13.1 Ustaw a=0, p=1, q=1. 14.1 Ustaw a=-a jeśli r(q,8)=3 lub r(q,8)=5. 14.2 Ustaw p=p/2. 20.1 Wpisz p, q w formularzu 1, jeśli a=1. 20.2 Wpisz p, q w formularzu 2, jeśli a=-1. Formularz 1: " L(%.0f,%.0f) =" Formularz 2: " -L(%.0f,%.0f) =" Formularz 3: " %.0f\n"
Zwróć uwagę, że nie jest to oryginalna próbka, ale raczej próbka z nowoczesnego symulatora. Istnieją pewne różnice składniowe w stosunku do oryginalnego języka JOSS.
Notatki
Cytaty
Źródła
- Gimble, EP (maj 1967). JOSS: Rozwiązywanie problemów dla inżynierów (PDF) (raport techniczny). Skraj.
- Bryan, GE (4 listopada 1966). JOSS: Wprowadzenie do wdrażania systemu . Lawrence Radiation Laboratory, Berkeley w Kalifornii: DECUS. P. 19 . Źródło 2019-06-19 .
- Znaki, Shirley (grudzień 1971). Lata JOSS: Refleksje na temat eksperymentu (PDF) (raport techniczny). Rand . Źródło 2019-06-19 .
- Sammet, Jean (1969). Języki programowania: historia i podstawy . Prentice Hall . s. 217–226. ISBN 0-13-729988-5 .
- Shaw, JC (maj 1965). JOSS: Doświadczenie z eksperymentalną usługą komputerową dla użytkowników zdalnych konsol do pisania (PDF) (raport techniczny). Skraj.
- Ware, Willis, wyd. (2008). RAND i ewolucja informacji (PDF) . Skraj. ISBN 9780833048165 .
Dalsza lektura
- „Podręcznik użytkownika JOSS”, RL Clark, Report R-1555/9, RAND Corp (styczeń 1975)
- Wywiad historii mówionej z Keithem W. Uncapherem z Charles Babbage Institute , University of Minnesota. Przegląd projektów w RAND Corporation , kiedy Keith Uncapher był zatrudniony w latach 1950-1970, takich jak JOHNNIAC , JOSS, przetrwała sieć krajowa i niektóre prace związane z ARPANET .
Linki zewnętrzne
- JOSS: Internetowy system komputerowy (VPRI-0270) , film demonstrujący JOSS nakręcony przez SRI w marcu 1964 r., Kiedy jeszcze działał na JOHNNIAC.