Obsah
1. Programovací jazyky používané v SSSR
2. Programovací jazyk DSSP (Dialog System for Structured Programming)
4. Odlišnosti mezi Forthem a programovacím jazykem DSSP
5. Řízení běhu programů v jazyce DSSP
7. Obsah následující části seriálu
1. Programovací jazyky používané v SSSR
V předchozích třech částech tohoto seriálu jsme si popsali některé počítače, které byly vyvinuty v Sovětském Svazu v průběhu padesátých a na začátku šedesátých let minulého století. Prozatím jsme se však zabývali především technickými parametry těchto počítačů, nikoli způsobem jejich programování. První počítače vyráběné v SSSR se programovaly, podobně jako tomu bylo například i u prvních počítačů v USA a samozřejmě i v dalších zemích, přímo ve strojovém kódu, který se zapisoval (zadával) pomocí tlačítek na řídicím panelu buď do operační paměti počítače (typicky se jednalo o feritovou nebo bubnovou paměť), nebo na děrnou pásku či štítek. Ovšem přímý zápis programů ve strojovém kódu je složitý, zdlouhavý a s velkou pravděpodobností vzniku chyb při ručním překladu programu a jeho následném přepisu do paměti. Z tohoto důvodu byly postupně vyvinuty první jednoduché assemblery a později makroassemblery (jedná se o assemblery vybavené preprocesorem umožňujícím tvorbu více či méně složitých maker) a takzvané autokódy, z nichž se později vyvinuly vyšší programovací jazyky (HLL – High(er) Level Languages).

Obrázek 1: Elektronkový počítač Ural-2, jenž se programoval přímo ve strojovém kódu postupným zadáváním instrukcí i jejich operandů v osmičkové soustavě pomocí tlačítek umístěných na řídicím panelu. Tímto způsobem s počítačem Ural-2 v minulosti „konverzoval“ i známý programátor a vizionář Charles Simonyi, po němž je mj. pojmenována maďarská notace zápisu prefixů u jmen proměnných a funkcí (kdo zná například WinAPI, jistě se s touto notací již mnohokrát setkal).
Některé z programovacích jazyků používaných mj. i v SSSR jsme si již v seriálu o historii výpočetní techniky popsali. Jedná se především o FORTRAN (první vyšší programovací jazyk vyvinutý firmou IBM, ale později používaný i v zemích RVHP, především v souvislosti s vývojem počítačů kompatibilních s mainframy firmy IBM), COBOL (v azbuce zapisovaný Кобол) a taktéž ALGOL (Алгол, využitý například i na prozatím nezmíněných počítačích Elbrus a Odra), popř. jeho varianta pojmenovaná Алгэк, která byla jakýmsi hybridem mezi COBOLem a originálním ALGOLem. Ovšem v Sovětském Svazu se používaly i mnohé další programovací jazyky. Dnes si popíšeme jeden z těchto jazyků. Jedná o originální Sovětský programovací jazyk DSSP, který byl původně vyvinut pro tvorbu aplikací na minule popsaném „trojkovém“ počítači Setuň (Сетунь), ale později se z různých důvodů rozšířil i na mnohé další platformy, například i na třicetidvoubitové osobní počítače PC.

Obrázek 2: Počítač IBM System/360 Model 40, kterým se taktéž „inspirovali“ konstruktéři ze zemí RVHP při návrhu počítačů řady JSEP (jednotného systému elektronických počítačů).
2. Programovací jazyk DSSP (Dialog System for Structured Programming)
„One word of text – One word of machine code“
Z instrukčního kódu minule popsaného počítače Setuň (pracujícího z dnešního pohledu velmi netradičně ve vyvážené trojkové soustavě namísto dnes obvyklé soustavy binární) byl na začátku osmdesátých let minulého století odvozen vyšší programovací jazyk nazvaný (v překladu) DSSP neboli Dialog System for Structured Programming. Některé syntaktické i sémantické konstrukce, které můžeme v tomto programovacím jazyku nalézt, pochází z programovacího jazyka Forth Chucka Moorea, ovšem tvůrci DSSP se při návrhu tohoto jazyka, na rozdíl od Forthu, poměrně striktně drželi hesla: „One word of text – One word of machine code“ (jde samozřejmě o slovní hříčku, neboť termín „slovo“ má v tomto hesle dva odlišné významy). To zjednodušeně řečeno znamená, že téměř každé klíčové slovo či speciální znak se přímo překládá do jednoho operačního kódu uloženého v operační paměti v jednom slově, což je v případě počítače Setuň n-tice tritů (viz též předchozí část tohoto seriálu). V následujících odstavcích si velmi stručně popíšeme některé základní konstrukce, ze kterých se programy vytvářené v programovacím jazyce DSSP skládají.

Obrázek 3: Počítač Setuň zpracovávající operandy uložené ve vyvážené trojkové soustavě.
3. Zásobníkové jazyky a RPN
Oba výše zmíněné programovací jazyky, tj. jak „východní“ DSSP, tak i „západní“ Forth, jsou založeny na použití dvou zásobníků. První z těchto zásobníků se nazývá zásobník operandů, druhý zásobník návratových adres. Většina matematických operací je prováděna buď s jedním operandem (uloženým na vrcholu zásobníku operandů, což je místo označované zkratkou TOS neboli Top Of Stack) nebo s dvojicí operandů (první je uložený v TOS, druhý těsně pod prvním operandem). Funkce zásobníku návratových adres je zřejmá – obsahuje adresy, na které se má řízení programu vrátit při opuštění právě prováděné funkce. Poznámka – funkce jsou v programovacích jazycích Forth i DSSP označovány termínem slova (words), protože se při jejich definici ani volání nemusí zapisovat jejich parametry, neboť ty jsou vždy uloženy na zásobníku operandů, odkud si je volaná funkce (slovo) může přečíst a následně zpracovat. Zásobník operandů je taktéž použit pro uložení návratových hodnot, kterých může být více (nejenom jedna návratová hodnota, jak je tomu u většiny ostatních programovacích jazyků).

Obrázek 4: Pohled na jiný model počítače Setuň.
Oba programovací jazyky taktéž používají prakticky totožnou syntaxi pro vytváření nových slov (funkcí) i postfixovou notaci (RPN – Reverse Polish Notation) pro zápis matematických a logických výrazů. Následuje několik příkladů zápisu aritmetických výrazů v postfixové notaci, jenž je oběma jazyky používána (a nejenom jimi – viz například tradiční prastará a stále existující a využívaná Unixová utilita dc nebo jazyk PostScript):
Zápis výrazu v RPN | Infixový ekvivalent | Výsledek |
---|---|---|
1 2 + | 1 + 2 | 3 |
1 2 3 * – | 1 – 2 * 3 | –5 |
1 2 * 3 – | 1 * 2 – 3 | –1 |
1 2 + 3 4 + * | (1 + 2) * (3 + 4) | 21 |
4 3 2 1 + + * | (1 + 2 + 3) * 4 | 24 |
Podrobnější popis RPN najde čtenář například v seriálu o programovacím jazyce Forth nebo programovacích jazycích Joy a Factor, které již na Rootu v minulosti vyšly. Ukažme si ještě, jakým způsobem lze v programovacím jazyku DSSP vytvářet nová slova. Nově definované slovo (funkce) vždy začíná znakem : (tím se interpret jazyka přepne do režimu překladu) a končí znakem ;, který se překládá na instrukci RETURN:
( toto slovo očekává na zásobníku operandů dvě hodnoty, které sečte a výsledek uloží do TOS ) : soucet + ; ( slovo C má v DSSP stejný význam jako slovo DUP ve Forthu - zduplikuje hodnotu v TOS ) ( nejprve se tedy nějaká hodnota X zkopíruje, takže zásobník obsahuje dvojici X X ) ( posléze se oba shodné operandy vynásobí a výsledek je uložen zpět na vrchol zásobníku ) : mocnina C * ; ( vynulování proměnné X ) ( ve Forthu by se toto slovo zapsalo jako 0 X ! ovšem syntaxe DSSP je odlišná) : clear_x !0 X ;
Obrázek 5: Chuck Moore – tvůrce jazyka Forth.
4. Odlišnosti mezi Forthem a programovacím jazykem DSSP
DSSP was not invented. It was found. That is why DSSP has not versions, but only extensions. Forth is created by practice. DSSP is created by theory.
Programovací jazyky DSSP a Forth se i přes mnohé společné prvky, jimiž jsme se částečně zabývali v předchozí kapitole, v několika oblastech odlišují. Týká se to především konstrukce podmínek a programových smyček, kterými se budeme zabývat v následující kapitole, ale i některých základních slov, z nichž některé jsou v obou jazycích odlišné. Autoři jazyka DSSP evidentně dávali přednost kratšímu zápisu základních slov, tj. slov (funkcí) implementovaných přímo v jádru jazyka. Ovšem v případě potřeby většinou není velkým problémem si vytvořit slova, jež mají stejný význam jako slova základní. V jazyce DSSP je například možné vytvořit slovo DUP s využitím základního slova C (pravděpodobně se jedná o zkratku ze slova „copy“) následujícím způsobem – : DUP C ;. V tabulce zobrazené pod tímto odstavcem jsou pro ilustraci vypsána některá slova, která jsou v obou programovacích jazycích rozdílná:
DSSP | Forth | Význam slova |
---|---|---|
D | DROP | odstranění operandu z vrcholu zásobníku |
C | DUP | duplikace (kopie) operandu ležícího na vrcholu zásobníku |
. | DUP . | tisk operandu ležícího na vrcholu zásobníku bez jeho odstranění |
DD | 2DROP | odstranění dvou operandů ze zásobníku |
SP | SPACE | vložení ASCII znaku mezery na zásobník operandů |
5. Řízení běhu programů v jazyce DSSP
Programovací jazyky DSSP a Forth se kromě odlišných jmen některých základních slov (funkcí) navzájem liší i ve způsobu tvorby podmínek (podmíněných příkazů) a programových smyček. Zatímco jazyk Forth je v tomto ohledu jazykem na poněkud vyšší úrovni, protože jak základní podmínkový příkaz (if-else-then), tak i všechny podporované programové smyčky mohou ve svém těle obsahovat libovolné množství slov, včetně dalších smyček či podmínek, v jazyku DSSP se jeho tvůrci tvrdošíjně drželi svého hesla „One word of text – One word of machine code“, což mj. znamená, že se například v každé větvi podmíněného příkazu může vyskytovat pouze jedno slovo (tj. volání příkazů, které toto slovo představuje).
To je sice z hlediska tvorby aplikací poněkud nepříjemná vlastnost (je to podobné, jako by například v Céčku nebo Javě nebylo možné za příkazem if vytvořit blok pomocí složených závorek {}, ale bylo by povoleno uvést pouze jedno volání funkce či metody), ale je vhodné si uvědomit, že vytváření i volání slov v DSSP či Forthu je velmi jednoduché, dokonce s velikou pravděpodobností mnohem jednodušší, než v jakémkoli jiném programovacím jazyce. Druhá výhoda tohoto přístupu k tvorbě podmínek a programových smyček spočívá v tom, že se tyto příkazy dají přímo převést na instrukce procesoru. Pokud by bylo možné například v obou větvích podmíněného příkazu zapisovat libovolné množství příkazů (tj. programový blok), musel by se plný podmíněný příkaz převést na minimálně jeden podmíněný a jeden nepodmíněný skok tak, jak je naznačeno níže:
vyhodnocení_podmínky if podmínka_splněna jump BLOK1 BLOK2: první příkaz ve větvi else druhý příkaz ve větvi else .... jump KONEC_PODMINKY BLOK1: první příkaz ve větvi then druhý příkaz ve větvi then .... KONEC_PODMINKY:
Navíc programovací jazyk DSSP podporuje hned několik podmíněných příkazů, které jsou však, na rozdíl od univerzálního Forthovského příkazu if, specializovány na určitý typ podmínek, jak je to ostatně patrné z popisu uvedeného v následující tabulce. Povšimněte si především existence podmíněného příkazu BRS, který je možné na počítači Setuň přeložit do jediné instrukce, protože se jedná, jak jsme si již řekli v předchozí části tohoto seriálu, o počítač pracující ve vyvážené trojkové soustavě, který většinu instrukcí pro podmíněné skoky nahrazuje právě obdobou slova BRS, v níž se vyhodnocuje znaménko čísla, popř. jeho nulovost (znalci programovacího jazyka FORTRAN možná znají takzvané „aritmetické if“, které je vlastně obdobou tohoto příkazu). Ve skutečnosti jsou všechny ostatní podmíněné příkazy jen variantou příkazu BRS, který je z tohoto pohledu zcela universální (pokud je například zapotřebí porovnávat dvě celočíselné hodnoty, postačuje je nejdříve odečíst, podobně logické výrazy se nejdříve vyhodnotí a testuje se, zda je výsledek nulový či nenulový atd.). Připomeňme si, že zkratkou TOS (Top Of Stack) je označována hodnota ležící na vrcholu zásobníku operandů:
Podmíněný příkaz | Význam |
---|---|
IF+ A | pokud je operátor ležící na TOS větší než 0, proveď slovo A |
IF- A | pokud je operátor ležící na TOS menší než 0, proveď slovo A |
IF0 A | pokud je operátor ležící na TOS nulový, proveď slovo A |
BR+ A B | pokud hodnota na TOS je větší než 0, proveď slovo A, jinak slovo B |
BR- A B | pokud hodnota na TOS je menší než 0, proveď slovo A, jinak slovo B |
BR0 A B | pokud je hodnota na TOS nulová, proveď slovo A, jinak slovo B |
BRS A B C | TOS záporné: proveď A, TOS nulové: proveď B, jinak proveď C |
6. Tvorba programových smyček
Programové smyčky jsou v jazyku DSSP taktéž navrženy takovým způsobem, aby, podobně jako je tomu u podmíněných příkazů, byl jejich překlad do strojového kódu co nejjednodušší. Tento jazyk podporuje pouze dva typy smyček – nepočítanou smyčku (s podmínkou) a počítanou smyčku. Nepočítaná smyčka se zapisuje slovem RP (repeat), za nímž následuje jediné slovo tvořící tělo smyčky. Pokud je po provedení tohoto slova na vrcholu zásobníku uložena nula, smyčka je ukončena, v opačném případě je provedena další iterace. Počítaná smyčka se zapisuje pomocí slova DO, za nímž (jak již jistě tušíte) následuje jediné slovo tvořící její tělo. Před vstupem do této smyčky musí být na vrcholu zásobníku uložen počet opakování, který je v každé iteraci snížen o jedničku – to mj. znamená, že slovo tvořící tělo smyčky sice zásobník může používat (jinak by se v něm nemohly vyskytovat prakticky žádné příkazy ani výrazy), ale po opuštění tohoto slova musí zásobník opět na svém vrcholu obsahovat počitadlo (které ovšem vývojáři aplikací mohou programově změnit, podobně jako je možné například v céčku měnit počitadlo smyčky for).
Programové smyčky je možné opustit též jedním z příkazů EX (exit), EX+, EX- a EX0. Funkce těchto příkazů (slov) je vypsána v následující tabulce:
Příkaz | Význam příkazu |
---|---|
EX | nepodmíněné opuštění smyčky |
EX+ | opuštění smyčky za předpokladu, že obsah TOS je větší než 0 |
EX- | opuštění smyčky za předpokladu, že obsah TOS je menší než 0 |
EX0 | opuštění smyčky za předpokladu, že obsah TOS je nulový |
Výše uvedená čtveřice příkazů slouží k opuštění nejvnitřnější smyčky (za předpokladu, že jsou smyčky vnořeny). Pokud je zapotřebí vyskočit z více vnořených smyček, je možné použít příkaz EXT, který na zásobníku očekává číslo odpovídající počtu vnořených smyček, z nichž se má vyskočit. Interně toto slovo pracuje tak, že vyjme ze zásobníku návratových adres n hodnot a provede skok na poslední vyjmutou adresu. Záleží jen na programátorech, jakým způsobem ošetří zpracování hodnot uložených na zásobníku operandů.
7. Obsah následující části seriálu
V následující části seriálu o historii výpočetní techniky se zaměříme na popis programovacího jazyka SNOBOL, jenž je (či spíše byl) specializovaný na zpracovávání textů. Jedná se o ideového předchůdce jazyků AWK či Perl, i když sémanticky jde o poněkud odlišný jazyk, který se v některých ohledech podobá spíše konečnému automatu specifikovanému pomocí množiny stavů a přechodových funkcí. Taktéž si vysvětlíme principy snad nejdůležitějšího jazyka, jaký byl ve druhé polovině padesátých let minulého století vytvořen. Jedná se o jazyk LISP, jehož různé varianty se používají dodnes.
8. Literatura
- Ankrum,T. Scott
„COBOL – A Best Practice (Sept, 2001)“
COBOLReport.com - Arranga,Edmund C.
„The Viagrazation of COBOL“
COBOLwebler.com - Arranga, Edmund C. & Price, Wilson
„Fresh from Y2K, What's next for COBOL? (March/April 2000)“
IEEE Software - Arranga et al
„In COBOL's Defense : Roundtable Discussion (March/April 2000)“
IEEE Software - Badower, Justin
„COBOL: Foundation of the future“
COBOLwebler.com - Brown, Gary DeWard
„COBOL: The failure that wasn't“
COBOLReport.com - Burger,Thomas Wolfgang
„COBOL in an open source future (May 2000)“
IBM developerWorks : Linux : Linux articles - Carr, Donald and Kizior, Ronald J.
„The Case for Continued COBOL Education (March/April 2000)“
IEEE Software - Feiman, J.
„The Gartner Programming Language Survey (October 2001)“
Gartner Advisory - Glass, Robert L.
„Cobol – A Contradiction and an Enigma“
COMMUNICATIONS OF THE ACM September 1997/Vol. 40, No. 9 - Griswold R. E., Poage J. F., Polonsky I. P.:
„The SNOBOL4 Programming Language“
second edition, Bell Telephone Laboratories, 1968, 1971 - Jones, Capers
„The global economic impact of the year 2000 software problem“
(Jan, 1997) - Kappelman, Leon A.
„Some Strategic Y2K Blessings (March/April 2000)“
IEEE Software - Kizior, Dr. Ronald J. and Carr, Donald and Halpern, Dr. Paul
„What Professionals think of the Future of COBOL? “ - Murach, Mike
„Is COBOL Dying … or Thriving? (February 2001)“
The Cobol Newswire - Pagnan, Martin
„Can A Java Programmer Be Transitioned To Cobol? (Feb, 2002)“
COBOLReport.com - Reimann, Artur
„COBOL, Language of Choice – Then and Now (January, 2001)“
COBOLReport.com - Sayles, Jonathan
„COBOL and the Enterprise Business Application Programming Legacy“
MicroFocus Ltd. - Silverberg, Fred
„COBOL and the Business Programming Paradigm“
(1996) - Sneed, Harry M.
„The Evolution of COBOL“
COBOLReport.com - Wilkinson,Stephanie
„From the Dustbin, Cobol Rises (May, 2001)“
eWeek - C.A.R. Hoare:
„The Emperor's Old Clothes Communications of the ACM“
1981 - IBM:
„VS BASIC Language, Third edition“ - IBM:
„VS Fortran Application Programming: Language reference“ - IBM:
„IBM System/360 Operating System: ALGOL Language“ - B. Randell and L.J. Russell,
„ALGOL 60 Implementation: The Translation and Use of ALGOL 60 Programs on a Computer“
Academic Press, 1964. The design of the Whetstone Compiler. - E. W, Dijkstra,
„Algol 60 translation: an algol 60 translator for the x1 and making a translator for algol 60, report MR 35/61“
Mathematisch Centrum, Amsterdam, 1961. - Akin, Ed (2003):
„Object Oriented Programming via Fortran 90/95 (1st ed.)“
Cambridge University Press. ISBN 0–521–52408–3. - Etter, D. M. (1990):
„Structured FORTRAN 77 for Engineers and Scientists (3rd ed.)“
The Benjamin/Cummings Publishing Company, Inc.. ISBN 0–8053–0051–1. - Chapman, Stephen J. (2007):
„Fortran 95/2003 for Scientists and Engineers (3rd ed.)“
McGraw-Hill. ISBN 978–0–07–319157–7. - Chapman, Stephen J. (2003):
„Fortran 90/95 for Scientists and Engineers (2nd ed.)“
McGraw-Hill. ISBN 0–07–282575–8. - Chivers, Ian; Jane Sleightholme (2006):
„Introduction to Programming with Fortran (1st ed.)“
Springer. ISBN 1–84628–053–2. - Ellis, T. M. R.; Ivor R. Phillips, Thomas M. Lahey (1994)
„Fortran 90 Programming (1st ed.)“
Addison Wesley. ISBN 0–201–54446–6. - Kupferschmid, Michael (2002):
„Classical Fortran: Programming for Engineering and Scientific Applications“
Marcel Dekker (CRC Press). ISBN 0–8247–0802–4. - McCracken, Daniel D. (1961):
„A Guide to Fortran Programming“
Wiley. - McCracken, Daniel D. (1965):
„A Guide to Fortran IV Programming“
Wiley. - Metcalf, Michael; John Reid, Malcolm Cohen (2004):
„Fortran 95/2003 Explained“
Oxford University Press. ISBN 0–19–852693–8. - Nyhoff, Larry; Sanford Leestma (1995):
„FORTRAN 77 for Engineers and Scientists with an Introduction to Fortran 90 (4th ed.)“
Prentice Hall. ISBN 0–13–363003-X.
9. Odkazy na Internetu
- Vanilla Snobol4 Reference Manual
http://burks.bton.ac.uk/burks/language/snobol/catspaw/manual/contents.htm - SNOBOL4.ORG – SNOBOL4 Resources
http://www.snobol4.org/ - Snobol3 – Snobol 3 Interpreter Implemented in Java
http://serl.cs.colorado.edu/~dennis/software/s3.html - Exploring Beautiful Languages – A guick look at SNOBOL
http://langexplr.blogspot.com/2007/12/quick-look-at-snobol.html - Rosetta Code: Roman_numerals
http://rosettacode.org/wiki/Roman_numerals - Category:SNOBOL4
http://rosettacode.org/wiki/Category:SNOBOL4 - An introduction to SNOBOL by James Ford
http://drofmij.awardspace.com/snobol/ - Rosetta Code – Category:COBOL
http://rosettacode.org/wiki/Category:COBOL - COmmon Business Oriented Language
http://foldoc.org/COBOL - COBOL Compilers
http://www-01.ibm.com/software/awdtools/cobol/ - Cobol: Not Dead Yet
http://www.computerworld.com/s/article/266156/Cobol_Not_Dead_Yet?intsrc=kc_rfavs - The future's bright … the future's Cobol
http://features.techworld.com/applications/3056/the-futures-bright–the-futures-cobol/ - COBOL Example Programs
http://www.csis.ul.ie/COBOL/examples/default.htm - Introduction to COBOL
http://www.csis.ul.ie/COBOL/Course/COBOLIntro.htm - COBOL programming – tutorials, lectures, exercises, examples
http://www.csis.ul.ie/COBOL/ - Wikipedia: COBOL
http://en.wikipedia.org/wiki/COBOL - Humor on Computers, Systems and Programming
http://www-crypto.htw-saarland.de/weber/misc/programming.html - OpenCOBOL
http://en.wikipedia.org/wiki/OpenCOBOL - OpenCOBOL.org
http://opencobol.org/ - OpenCOBOL FAQ
http://opencobol.add1tocobol.com/ - TinyCOBOL
http://tiny-cobol.sourceforge.net/ - TinyCOBOL FAQ
http://tiny-cobol.sourceforge.net/docs/faq/ - JTC1/SC22/WG4 – COBOL
http://ra.dkuug.dk/jtc1/sc22/wg4/ - COBOL on COGS
http://www.coboloncogs.org/INDEX.HTM - Cobol Coders: Going, Going, Gone?
http://www.computerworld.com/s/article/266228/Cobol_Coders_Going_Going_Gone_ - Rosetta Code – Category:Fortran
http://rosettacode.org/wiki/Fortran - Rosetta Code – Category:Lisp
http://rosettacode.org/wiki/Category:Lisp - Algol 68 – 25 Years in the USSR
http://www.computer-museum.ru/english/algol68.htm - Charles Simonyi
http://en.wikipedia.org/wiki/Charles_Simonyi - Charles Simonyi
http://cs.wikipedia.org/wiki/Charles_Simonyi - Charles Simonyi returns to space
http://www.charlesinspace.com/ - Charles Simonyi
http://www.shamit.org/charles_simonyi.htm - Minsk Family of Computers
http://www.computer-museum.ru/english/minsk0.htm - Minsk family of computers
http://en.wikipedia.org/wiki/Minsk_family_of_computers