Forth (programovací jazyk)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 29. září 2020; kontroly vyžadují 18 úprav .
Forth
Sémantika rozkazovací způsob
Jazyková třída programovací jazyk , interpretovaný programovací jazyk a kompilovaný programovací jazyk
Typ provedení překladač/překladač
Objevil se v 1971
Autor Charles H. Moore
Typový systém netypizovaný
Hlavní implementace gForth , pForth, kForth, SP-Forth [1] , win32forth [2]
Dialekty FORTH-79, FORTH-83, ANSI FORTH 1994, ColorForth , RetroForth . Čtvrtý standard 2012
Byl ovlivněn APL , Lisp
ovlivnil PostScript , Factor a další zřetězení jazyků
 Mediální soubory na Wikimedia Commons

Forth ( anglicky  Forth ) je jedním z prvních zřetězených programovacích jazyků , ve kterém jsou programy psány jako sekvence lexémů („slova“ v terminologii jazyka Forth). Matematické výrazy jsou reprezentovány postfixovým zápisem při použití zásobníku . Podporuje mechanismy pro metarozšíření sémantiky a syntaxe jazyka pro přizpůsobení požadované oblasti. Syntaxe základní úrovně ve Forth je jednoduchá a skládá se z jediného pravidla: "všechny definice jsou odděleny mezerami". Čtvrté definice mohou mít libovolnou kombinaci znaků.

Řada vlastností, jmenovitě interaktivita , flexibilita a snadný vývoj, činí z Forth efektivní jazyk pro aplikovaný výzkum a vytváření nástrojů. Vestavěné řídicí systémy jsou zřejmé oblasti použití tohoto jazyka . Díky své jednoduchosti je kompilátor a často kompilátor Forth snadno implementován pro velkou většinu mikrokontrolérů a používá se také jako nástroj křížového programování . Používá se také při programování počítačů s různými operačními systémy nebo jako nezávislé operační prostředí.

Historie

Tvorba

Jazyk Forth vytvořil Charles X. Moore koncem 60. a začátkem 70. let. Moore nazval svůj jazyk Fourth , protože věřil, že to bude počítačový jazyk čtvrté generace .  Ale protože pracoval na stroji IBM 1130 , který umožňoval jména složená z ne více než pěti velkých písmen, bylo jméno převedeno na FORTH ( eng. forth  - forward). První Mooreovy experimenty s vytvořením jednoduchého tlumočníka, který usnadňuje psaní programů pro ovládání astronomických zařízení, však pocházejí z konce 50. let 20. století. [3] 

Od roku 1971 Moore pracoval na National Radio Astronomy Observatory , kde se podílel na vývoji programů pro sběr a zpracování dat přijatých radioteleskopem . Tehdy se objevila první implementace jazyka Forth. Na této práci se podílela i Moorova spolupracovnice Elizabeth Ratherová , kterou lze považovat za druhou programátorku pevnosti na světě . 

Nově vytvořený jazyk byl přijat jako hlavní programovací jazyk Americkou astronomickou společností . Později, v roce 1973, Charles Moore a Elizabeth Rather založili FORTH, Inc [4] , během níž byl jazyk portován na mnoho platforem v průběhu následující dekády.

Na konci 70. let byla FORTH Interest Group (FIG) vytvořena programátory, kteří měli zájem o vývoj jazyka. Tato skupina vyvinula koncept modelu FIG Forth, veřejně dostupného systému, který lze snadno přenést na populární počítačové architektury. Tento čtvrtý referenční systém, FIG-FORTH, je často považován za původní jazykový standard.

Standardizace

Myšlenka oficiální standardizace Forth původně vznikla v rámci International Association of Astronomers ( anglicky  Astronomical Sciences, AST ). V květnu 1977 byl na setkání v Kitt Peak National Observatory ( USA ) vyvinut glosář jazyka Forth, označený jako AST.01.

V únoru 1978 byl v Utrechtu přijat standard FORTH-77 , zaměřený na implementaci mikropočítačů .

V říjnu 1979 skončilo setkání na ostrově Santa Catalina ( Kalifornie ) vývojem standardu FORTH-79, který platí pro všechny typy počítačů.

Na podzim roku 1983 se konala schůzka k vypracování dalšího standardu, schváleného v roce 1984 jako FORTH-83. Standard Fort-83 se liší od standardu Fort-79 v některých detailech, ale ne v podstatě.

V roce 1988 byla skupina SIGFORTH [5] organizována jako součást ACM ; existovala i odpovídající ruská skupina ACM (předseda - prof. S. N. Baranov ( Petrohrad , SPIIRAS )). SIGFORTH nyní existuje jako součást SIGPLAN

V roce 1994, po zdlouhavých jednáních zahrnujících mnoho zainteresovaných firem, byla přijata jazyková norma ANSI Forth. [6]

Současná jazyková norma Forth byla přijata v roce 2012. [7]

Další vývoj a případy použití

Známým příkladem úspěchu Fortu je jeho použití v softwaru hlubokomořského sestupového vozidla při hledání Titaniku v roce 1985 . Fort byl také použit v softwaru spektrografu na Shuttle , v mikromodulech pro ovládání umělých družic Země, pro řídicí systém na letišti v Rijádu , systémy počítačového vidění , automatizaci krevních analýz a kardiologické kontroly, kapesní překladače.

Čtvrtý dialekt se používá v OpenBoot  , základním počítačovém softwaru založeném na procesorech SPARC a PowerPC .

Na počátku 80. let vytvořili John Warnock a Chuck Geschke z Adobe Systems jazyk PostScript [8] . Přes podobnosti jazyků John Warnock poznamenal [9] , že Forth neměl vliv na vytvoření PostScriptu.

Existují procesory a řadiče, které podporují výpočetní model jazyka na hardwarové úrovni. Mnoho open source implementací Forth bylo vytvořeno pro různé hardwarové platformy. Samostatné firmy (mezi nimiž je třeba poznamenat především FORTH, Inc založený Charlesem Moorem a britská společnost MicroProcessor Engineering Ltd. [10] ) dodávají komerční verze jazyka s různými schopnostmi.

Dvě domácí počítačové hry od Electronic Arts vytvořené v 80. letech byly napsány ve Forth: Worms? (1983) [11] a Starflight (1986). [12] Canon Cat (1987) použil Forth jako systémový programovací jazyk .

Konference EuroForth se konají každoročně, mimo jiné v Rusku, Anglii, Rakousku, Německu, Španělsku, České republice (dříve v Československu). [13]

Základní pojmy klasického systému Forth

Hlavní částí systému Forth je propojený seznam slov neboli slovník , ze kterého je slovo voláno jménem, ​​aby plnilo specifické funkce. Čtvrté programování spočívá v definování nových slov na základě slov dříve definovaných ve slovníku. Jakmile jsou nová slova sestavena do slovníku, neliší se ve formě od slov, která již ve slovníku jsou. Popis slova ve slovníku se nazývá záznam .

Struktura "typického" hesla ve Forth slovníku je:

Články čtveřice lze běžně rozdělit do dvou kategorií: články nízké úrovně a články čtveřice . Články prvního typu obsahují v poli kódu ukazatel na proceduru v kódech cílového procesoru, která přímo provádí sémantiku slova. Pole parametrů takových článků obsahuje parametry předávané proceduře nebo její samotný kód. Čtvrté články obsahují ukazatele na jiné články v poli parametru a pole kódu ukazuje na speciální proceduru nazývanou interpreter odkazů . V praxi struktura článku závisí na implementaci, ale zpravidla je podobná výše uvedenému. Princip použitý uvnitř pole parametrů čtvrtého článku se nazývá vláknový kód a interpret odkazů se nazývá  virtuální čtvrtý stroj .

Gramaticky je text zpracovaný překladačem Forth posloupností tokenů ( angl.  token ), oddělených mezerami a znaky na konci řádku. Překladač vstupních řetězců vybere další token a vyhledá jej v aktuálním slovníku a vyhledávání se provádí od novějších slov ke starším. Pokud slovo není nalezeno, pokusí se token interpretovat jako číselný záznam, který se v případě úspěchu posune na vrchol zásobníku. Pokud se token shoduje se slovem Forth, analyzuje se aktuální stav příznaku kompilace systému Forth . Pokud je příznak vymazán, pak se slovo vykoná - řízení se předá podle ukazatele pole kódu nalezeného článku. Pokud je příznak nastaven, slovo se zkompiluje , to znamená, že se k aktuálně vytvořenému článku připojí ukazatel na pole jeho kódu. Pokud bylo číslo přeloženo, je vyjmuto ze zásobníku a zkompilováno do doslovného kódu , jehož spuštění uvnitř položky slovníku posune číslo na vrchol zásobníku. Kromě toho mohou slova obsahovat okamžitý příznak , v takovém případě se vždy provedou.

Mechanismus pro předávání parametrů mezi slovy:

Jazyk poskytuje způsob, jak pracovat se systémovou pamětí jako s lineární oblastí.

Povinnou součástí systému je také vratný zásobník. K dispozici programově pro změnu řídicího toku programu.

Vše výše uvedené platí pro koncept Fort pouze v prvním přiblížení. Forth není zrovna programovací jazyk; spíše překrývá pojem programovacího jazyka. Forth je spíše virtuální stroj a operační systém ForthOS. [čtrnáct]

Syntaxi a sémantiku Forth lze rozšířit na jakýkoli jiný programovací jazyk přímo v době interpretace (kompilace) programu Forth. Použití Forth jako metajazyka je pohodlné díky dostupnosti nástrojů Forth, které podporují ty jazyky, které jsou již v systému Forth. Všechny zdroje systému Forth jsou uživateli k dispozici a jsou prezentovány ve formě slovníkových hesel. Uživatelsky definované slovníkové položky mají zpravidla přesně stejné zastoupení v systému Forth jako všechny ostatní položky slovníku, které tvoří celý systém Forth.

Čtvrté typy kódů

Nějaký druh vláknového kódu se používá jako strojová reprezentace zkompilovaného programu .

Při použití kódu podprogramu se získá strojový kód, ve kterém ve srovnání s kódem generovaným kompilátorem běžného programovacího jazyka, kde jsou proměnné i návratové adresy z podprogramů umístěny na jednom zásobníku, neexistují žádné operace pro „přetažení a drop“ parametrů podprogramu. Hlavní zásobník procesoru se používá jako návratový zásobník, zásobník dat je organizován softwarově.

Při použití zřetězeného kódu jiného než kódu podprogramu se definice Forth skládající se pouze ze strojového kódu nazývají primitiva . V takovém vláknovém kódu se často snaží použít hlavní zásobník procesoru jako zásobník dat a přístup k datům na něm ležícím ve formě strojových instrukcí popa push.

Jednou z ne zcela zřejmých výhod používání nepřímého vláknového kódu je, že veškerý nativní kód, tedy primitiva, volání interpretu kódu a proměnné, lze umístit do jednoho segmentu kódu, který nebude přístupný ke změnám. Všechny ostatní kódy Forth jsou umístěny v datovém segmentu. Těchto segmentů může být mnoho a je jednodušší pracovat s jedním číslem segmentu než se dvěma.

Čtvrté systémy mohou také používat bajtový kód jako logický závěr vývoje nepřímého vláknového kódu a složeného vláknového kódu s tabulkou adres. V tomto případě je programový kód (Forth) posloupnost bajtů nebo kód nějakého vynalezeného virtuálního procesoru. Aby bylo možné tento kód spustit, musí existovat tabulka 256 adres (2bajtové, 4bajtové nebo 8bajtové), na kterých jsou umístěna Forth primitiva nebo komplexní definice.

Tato možnost se velmi liší od ostatních typů kódu a zaslouží si zvláštní pozornost.

Příklady programů

.( Ahoj světe)

Příklad definice slova .SIGN, která vytiskne příslušnou frázi v závislosti na znaménku čísla v horní části zásobníku:

\ Vytiskněte znak čísla : .SIGN ( n -- ) ?DUP 0=KDYŽ "NULA" JINÝ 0>IF "POZITIVNÍ ČÍSLO" JINAK "ZÁPORNÉ ČÍSLO" PAK PAK ;

Příklad skutečného kódu, který vytváří řetězcovou konstantu ve formě přijaté ve Forth (s čítačem):

\ Vytvořte "konstantu" z řetězce : S-CONSTANT ( c-addr u "<mezery>jméno" -- ) VYTVOŘIT DUP , 0? DO DUP C@ C,CHAR+ LOOP DROP 0 C, DĚLÁ > DUP CELL+ SWAP @ ;

Tento příklad vytvoří definici slova namepomocí slova CREATE. Po provedení názvu slova se do zásobníku umístí adresa ukazatele na oblast paměti, která byla v době kompilace slova. Aby se to dalo nějak použít, zapíše se tam řetězec („zkompilovaný“). Po provedení slova se provedou slova zadaná za slovem DOES>.

V tomto příkladu byl tedy vytvořen nový syntaktický konstrukt. Podobné funkce jsou zřídka poskytovány v jiných programovacích jazycích.

Kromě vytváření nových syntaktických konstrukcí je jednou z nejsilnějších funkcí Fortha schopnost zasahovat do procesu kompilace pomocí okamžitých prováděcích slov (bezprostředních slov).

Příklady takových standardních slov:

[ - Dočasné přepnutí do režimu provádění (ve skutečnosti často pouze zapíše 0 do proměnné STATE).

] — Přepněte zpět do režimu kompilace.

LITERAL - Zkompilujte číslo aktuálně na vrcholu zásobníku jako konstantu. Je to také slovo okamžitého provedení.

Příklad kódu, kde jsou použita tato slova:

\ Určitá velikost dat v kilobajtech 16 KONSTANTNÍ velikost \ Vytiskněte zprávu o převodu kilobajtů na bajty :zpráva(-) velikost . ." kilobajty jsou ekvivalentní " [ velikost 1024 * ] DOSLOVNĚ . "bajtů" ;

Vlastnosti jazyka Forth

Jedním z opakujících se témat Forthovy kontroverze je jeho místo mezi „klasickými“ imperativními jazyky. Čtvrté programy mají extrémně neobvyklý vzhled:

  • Program se skládá z neobvyklé sekvence slov, mezi nimiž nejsou žádná takzvaná „klíčová“ slova, která jsou rozpoznána a zpracována v jiných programovacích jazycích zvláštním způsobem.
    S vydáním filmové série Star Wars se o tom objevil vtip, který se nyní stal klasikou, což dobře ilustruje tuto vlastnost Fort:

Tajemství řeči mistra Yody bylo odhaleno:
Programátor staré pevnosti byl jen on.

Původní text  (anglicky)[ zobrazitskrýt]

Záhada Yodovy řeči odkrytá je:
Yoda byl jen starým programátorem Forth. [patnáct]

  • Výše uvedený příklad zároveň poukazuje na unikátní vlastnost Forth: absenci seznamu parametrů v závorkách a možnost programovat v jejich rodném jazyce. Použití struktur slovní zásoby rodného jazyka umožňuje učinit program srozumitelným, což zvyšuje jeho spolehlivost. .
  • " Obrácená polská notace " aritmetických výrazů s vícenásobnými zásobníky.
  • Duální povaha kompilátoru Forth. Nelze jednoznačně říci, zda je Forth kompilátor nebo interpret. Lze jej téměř vždy použít ve dvou režimech, s výjimkou vzácných případů, jako je „cílová kompilace“ (překlad do strojového kódu programu pro systém s jinou architekturou).
  • Žádný typový systém . Stejně jako jazyky symbolických instrukcí nemá Forth vestavěný typový systém. Neexistuje způsob, jak zjistit, zda je v horní části zásobníku číslo se znaménkem, číslo bez znaménka, ukazatel na řetězec, znak nebo dvě čísla považovaná za jedno dlouhé číslo. Za kontrolu typu odpovídá programátor. V tomto případě se používají speciální sady slov (například zápis a čtení paměťových buněk se provádí pomocí slov !a @, a znaků - se slovy C!a C@), některé entity jsou umístěny na speciální hromádky (například hromádka čísel s plovoucí desetinnou čárkou , podle standardu ANSI FORTH 94; může být, může nebo nemusí být implementován pomocí hlavního zásobníku).

Tyto vlastnosti určují výhody a nevýhody jazyka Forth:

  • Zkušený programátor obeznámený s instrukční sadou a architekturou procesoru dokáže napsat „kernel“ systému Forth za pár dní.
  • Svoboda poskytovaná programátorovi vyžaduje silnou sebekontrolu. Vstupní práh pro programování ve Forth je nižší než u klasických programovacích jazyků, ale vyžaduje to zvyknout si a porozumět nejen možnostem a vlastnostem syntaxe Forth, ale také pochopení základní filozofie.
  • Forth nepodporuje žádné programovací paradigma a podporuje je všechny současně. Napsat sadu slov pro organizaci OOP ve Forth programu (a může jich být několik současně a budou spolu dobře vycházet) je mnohem snazší, než se rozhodnout, jaké vlastnosti jsou od této sady slov vyžadovány.
  • Rozdělení programu na mnoho malých slov vám umožní rychle a snadno je jednotlivě zkontrolovat, předat jim potřebné sady vstupních parametrů a kontrolovat, co zůstane na zásobníku. Ve skutečnosti to znamená, že abyste mohli otestovat nějakou programovou komponentu, nemusíte stahovat všechny závislé komponenty jako celek.
  • Většina implementací Forth vám umožňuje dekompilovat program. Výsledný text se od originálu liší jen málo.
  • Forth vám umožňuje implementovat jakoukoli programovací technologii dostupnou v jiných jazycích a systémech. Umožňuje také techniky, které jsou v jiných jazycích zakázány (například vlastní úpravy kódu). Programátorovi je svěřeno také odstranění negativních důsledků těchto technik vytvořením správného slovníku, který stimuluje kompetentní techniku ​​k jejich používání.
  • Velikost kódu Forth pro 16bitové systémy, když je program napsán správně, je někdy 10-20krát menší než kód zkompilovaný z programu C. U 32bitových systémů je tato mezera ještě větší. V operačních systémech může být celkový zisk stokrát nebo dokonce tisíckrát. Důvod je velmi jednoduchý – hotová úloha ve Forth má velikost několika bajtů, všechny pomocné rutiny jsou implementovány jako definice dostupné všem. Systém Forth se vejde do procesoru, do kterého se ostatní systémy v zásadě nevejdou.
  • Synchronizace procesů a vláken v multitaskingových systémech, přepínání kontextu, implementace přístupu k omezeným zdrojům jsou nejtěžší problémy při psaní OS. Pro podporu těchto funkcí jsou dokonce vytvořeny speciální instrukce v mikroprocesorech. Pro interpreta to není žádný problém, protože emuluje jakýkoli procesor a všechny potřebné instrukce.

Možná, co skutečně brzdí vývoj Fortu, je „těžké dědictví“, které vzešlo z nízkokapacitních strojů, pro které byl původně vytvořen. Norma ANSI FORTH 94 má například tyto vlastnosti:

  • Přenosný program musí předpokládat, že zásobník čísel s pohyblivou řádovou čárkou lze implementovat pomocí základního zásobníku. Naštěstí to není případ většiny moderních překladačů. Ale samotná přítomnost takové klauzule v normě vytváří určité nepříjemnosti. Při programování s aktivním použitím aritmetiky s pohyblivou řádovou čárkou je tato norma standardu tradičně ignorována.
  • Podobné pravidlo existuje pro zásobník řídicích toků. Všechno zde není tak jednoduché, protože často je to přesně to, co to je - během procesu kompilace je zásobník používán samotným kompilátorem. V drtivé většině případů to na program nemá žádný vliv, ale je třeba pamatovat na samotnou funkci. Pokud například chcete během kompilace vypočítat nějaké číslo mimo začátek definice a pak ho vložit do slova jako konstantu, budete muset použít nějaké řešení.
  • Definice mnoha slov v normě jsou příliš nízké. Například slovo 2*se nenásobí dvěma, jak napovídá jeho název, ale „posune bit číslo jedna na nejvýznamnější binární číslici a nejméně významný bit vyplní nulou“. Na většině moderních strojů je to samozřejmě totéž, ale už samotný fakt použití vlastností konkrétní architektury je alarmující. (Existují také jasnější standardní slova s ​​bitovým posunem LSHIFTa RSHIFT.)

Mnoho z těchto funkcí je způsobeno skutečností, že v době, kdy byl standard přijat, existovalo mnoho špatně kompatibilních systémů Forth, které byly založeny na dvou částečně odlišných standardech z roku 1979 a 1983.

Viz také

Dialekty Aplikace

Poznámky

  1. Projekt SP-Forth na SourceForge.net
  2. Projektová skupina Win32Forth . Získáno 18. srpna 2006. Archivováno z originálu 13. srpna 2006.
  3. CH Moore, ED spíše, DR Colburn. Evoluce Forth . ACM SIGPLAN Notices, Volume 28, No. 3. března 1993 / Konference Historie programovacích jazyků (duben 1993). Získáno 19. února 2010. Archivováno z originálu 22. srpna 2011.
  4. Nástroje pro vývoj a programování vestavěných systémů od FORTH, Inc. Získáno 19. února 2010. Archivováno z originálu 4. ledna 2010.
  5. 22. konference EuroForth . Datum přístupu: 19. února 2010. Archivováno z originálu 5. prosince 2008.
  6. DPANS'94 . Datum přístupu: 22. července 2007. Archivováno z originálu 30. června 2007.
  7. Dále . forth-standard.org . Získáno 2. května 2022. Archivováno z originálu dne 11. května 2022.
  8. Zdroje Adobe PostScript 3 . Získáno 2. prosince 2006. Archivováno z originálu 3. ledna 2007.
  9. Federico Biancuzzi, Shane Warden. Průkopníci programování. Konverzace s tvůrci hlavních programovacích jazyků = Masterminds of Programming: Konverzace s tvůrci hlavních programovacích jazyků. - Symbol-Plus, 2011. - S. 502. - 608 s. — ISBN 9785932861707 .
  10. MPE - MicroProcessor Engineering Limited . Získáno 19. února 2010. Archivováno z originálu 5. ledna 2010.
  11. Maynard, David S. David Maynard: Softwarový umělec . Získáno 27. června 2021. Archivováno z originálu dne 15. června 2021.
  12. Maher, Jimmy Starflight . Digitální antikvariát (28. října 2014). Získáno 23. 5. 2017. Archivováno z originálu 25. 4. 2017.
  13. EuroForth: Evropská konference Forth . Datum přístupu: 24. ledna 2010. Archivováno z originálu 16. června 2010.
  14. ForthWiki - ForthOS . Získáno 1. února 2006. Archivováno z originálu 30. srpna 2005.
  15. Uživatelský původ Aquatix . Získáno 12. srpna 2012. Archivováno z originálu 9. února 2014.

Literatura

  • Baranov S. N., Kolodin M. Yu. Fenomén Fort // Systémová informatika. - Novosibirsk: VO "Nauka". Sibiřské nakladatelství, 1995. - Vydání. 4 . - S. 193-291 . — ISBN 5-02-030678-9 .
  • Baranov S. N., Nozdrunov N. R. Jazyk Forth a jeho implementace. - L .: Mashinostroenie, 1988. - 157 s. - (počítač ve výrobě). — 100 000 výtisků.  — ISBN 5-217-00324-3 .
  • Leo Brody. Myšlení dále . — ISBN 0-9764587-0-5 . Archivováno 16. prosince 2005 na Wayback Machine
  • Brody L. Kurz programování na začátku = Starting Forth. Úvod do jazyka a operačního systému Forth pro začátečníky i profesionály / Per. z angličtiny; úvodní slovo I. V. Romanovský. - M. : Finance a statistika, 1990. - 352 s. - 40 000 výtisků.  - ISBN 5-279-00252-6 .
  • Brody L. Způsob myšlení - Fort .
  • Burago A. Yu., Kirillin V. A., Romanovsky I. V. Fort je jazyk pro mikroprocesory. - Společnost "Znalosti", organizace Leningrad, 1989. - 36 s. - (Na pomoc lektorovi). - 26 000 výtisků.
  • Dyakonov V.P. Forth-systémy programování osobních počítačů. - M. : Nauka, 1992. - 352 s. — ISBN 5-02-014460-6 .
  • Kelly M., Spies N. Programovací jazyk Fort / Per. z angličtiny. - M . : Rozhlas a komunikace, 1993. - 320 s. — ISBN 5-256-00438-7 .
  • Semjonov Yu. A. Programování ve Forth jazyce. - M . : Rádio a komunikace. — 240 s. — 50 000 výtisků.  — ISBN 5-256-00547-2 .
  • Townsend K., Foght D. Návrh a softwarová implementace expertních systémů na osobních počítačích / Per. z angličtiny. V. A. Kondratenko, S. V. Trubitsyna. - M. : Finance a statistika, 1990. - 320 s. - ISBN 5-279-00255-0 (SSSR) ISBN 0-8306-2692-1 (USA).
Časopisové publikace

Odkazy

Standard Zdroje v ruském jazyce Sbírky spojení na další zdroje