Linux E X P R E S

Facebook

Programování v jazyku Simula 67

simula.png

Poměrně neznámý, ale zajímavý a progresivní jazyk Simula 67 se specializuje na oblast profesionálního zpracování podnikových a vědeckých dat na sálových počítačích, především na diskrétní numerické simulace. Kniha Programování v jazyce Simula 67 pochází z pera velezkušené dvojice Z. Benda a J. Staudek. Oba autoři patřili na poli zpracování podnikových dat a teorie příslušných jazyků mezi naše čelní experty již v sedmdesátých letech.


Simula 67 je výsledkem úsilí vytvořit jazyk, jenž by svými vlastnostmi výrazně usnadňoval popis chování rozsáhlých dynamických systémů formou modelu, formou snadno implementovatelnou na univerzálním počítači. V souladu s moderním trendem maximálního přiblížení výpočetních prostředků běžnému uživateli, který zná spíše řešený problém než principy operací jakéhokoli procesu pro zpracování informací, se v Simule 67 klade důraz na maximální čitelnost zdrojových kódů, na snadnost a výraznost zobrazení struktur modelovaného problému.

Vyjadřovací prostředky lze libovolně rozšiřovat o pojmy vhodné svým zněním k vyjadřování modelovaných hierarchických struktur, operátorů, algoritmů apod. Stručně řečeno: Simula 67 se na rozdíl od svého předchůdce Simuly neorientuje výhradně na účely diskrétní simulace, ale usiluje o odstranění příliš úzkého pojetí údajových struktur a nezájmu o přihlížení ke konkrétním specifikům praktických problémů, jak je pohříchu časté v soudobých programovacích jazycích.

A skutečně mnohé z nejpoužívanějších programovacích jazyků zabředly do zájmů doby před dvaceti lety, kdy možnostem algoritmického zpracování dat se věnovali téměř jen kybernetici, matematici různých specializací a jiní akademičtí teoretici. Širší pohled Simuly 67 na problém, jak popsat strukturu a chování systému, však vedl k vytvoření jazyka s velmi bohatými výrazovými prostředky. Recenzovaná publikace konstatuje, že řada programovacích konstrukcí Simuly dnes nemá rovnocennou náhradu mezi ostatními programovacími jazyky.

Simula 67 je zatím nepříliš známa, což dvojice Benda a Staudek přičítá obtížné dostupnosti podporovaného hardwaru (viz níže). Intenzivně se však pracuje na úpravě Simuly 67 pro komplety sálových počítačů, s nimiž je možné se u nás běžně setkat. Podle optimistického odhadu autorů lze Simulu 67 zprovoznit v České a Slovenské republice na dvou počítačích, jednom v Praze a druhém v Bratislavě. Vzhledem k velmi neobvyklým, ba až výstředním požadavkům popisované verze Simuly 67 se nejen já domnívám, že v České ani Slovenské republice v současnosti žádná provozovaná sestava nedostačuje k spuštění tohoto zajímavého prostředí. Autoři doufají, že zatím alespoň teoreticky přiblíží zájemcům tento velmi progresivní jazyk.

Kniha se blíže zabývá provozem Simuly 67 na výpočetní soustavě značky CDC 3300 se systémovým softwarem zvaným MASTER, jejž výrobce Control Data Corporation instaluje na vyrobené CDC 3300. Tento zahraniční hardware je však velmi obtížné k nám importovat vzhledem k jistým právním komplikacím a jeho značné valutové ceně. Kniha čtenáře seznamuje  se základními principy systému CDC 3300, a to jen v nejnutnější míře, která je nezbytná pro sledování výkladu. Přítomny jsou i přílohy s přehlednými tabulkami popisující standardy (přípravu řídící štítky, seznam významů diagnostických zpráv, vnitřní reprezentaci vnější abecedy, alternativní reprezentace abecedy, doporučení normy ISO 646, děrování podle Hollerithova standardu...) nezbytné pro vyvolávání programového kódu v systému CDC 3300 a jiné úkony při ovládání CDC 3300. Ačkoli se produkty CDC nevyráběly, nevyrábí a zřejmě ani nebudou vyrábět ve velkých sériích, je konkrétní popis přínosný i pro uživatele obdobných produktů.



Simula 67 exceluje v diskrétních numerických simulacích, tedy úlohách následujícího typu. Na jednotlivé obslužné linky přicházejí požadavky vyžadující zpracování, čímž se mění stav systému. Stav libovolného popisovaného stavového systému je možné popsat vektorem stavových veličin. Na množině všech událostí v modelovaném systému existuje rozklad na ekvivalentní třídy událostí, kde každá třída událostí je v simulačním programu popsána posloupností příkazů, vyjadřujících změny hodnot reprezentací složek stavového vektoru při výskytu událostí daného typu.

Každému typu události tak odpovídá jistý podprogram události. Posloupnost programových událostí tvořící obraz činnosti modelovaného systému je reprezentován zvláštním seznamem, někdy nazývaným časová osa nebo kalendářní seznam. Pro účely práce s kalendářním seznamem Simula 67 implementuje pokročilou datovou strukturu, jíž je seznam reprezentován, a operace nad touto strukturou, které mimo jiné umožňují zefektivnit i manipulaci se zpracovávanými daty aplikace. Vše je čtenáři hezky přiblíženo mnoha názornými diagramy. Operacemi nad seznamem je možné snadno plánovat zpracování, odkládat jej, definovat časový krok či přistupovat k pomocným procedurám jako třeba k proceduře accum zjišťující úhrnnou hodnotu veličiny pomocí automatické numerické kalkulace časového integrálu.

Podobně univerzální přístup Simula 67 volí i v jiných oblastech, třeba každý vstup do externí paměti a výstup z externí paměti považuje za soubor. Stejným způsobem se spravují libovolné paměti s postupnou (sekvenční) organizací, ať již se jedná o kazety s archivačními magnetickými páskami nebo třeba o klaviaturu elektrického psacího stroje, a podobně nemusíme ani přihlížet ke konstrukčním specifikům u zařízení s přímou organizací, ať již počítač je osazen magnetickými bubny či magnetickými disky. Simula 67 též umožňuje generovat zvláštní dynamickou reprezentaci bloku instrukcí, který ji generoval, a může jej dokonce i přežít.

Tuto reprezentaci nazýváme objekt. Mezi všemi objekty generovanými v jediné statické definici bloku platí jistá relace ekvivalence, tyto objekty tvoří třídu. Operační část třídy se považuje za blok, ať již svou deklarací blokem je či není. Lokální proměnné a procedury bloku a formální parametry jsou deklaracemi atributů objektů této třídy. Popsány jsou i další přednosti Simuly 67 jako ultra rychlý generátor pseudonáhodných čísel. Pseudonáhodná čísla se generují násobením mocninou pětky a dělením součinu mocninou dvojky. Postup vykazuje vynikající statistické vlastnosti.

Kniha nezapomíná na výčet základních konstrukcí jazyka Simula 67. Pro větší jasnost se uvádí u každé syntaxe její definitorní vymezení zápisem v Backusově normální formě. Na rozdíl od výkladu mimořádností Simuly 67 je popis elementární konstrukcí spíše hutný, protože základní konstrukce Simula 67 vychází z notoricky známého jazyka Algol 60. U čtenářů se předpokládají základní znalosti obecných programovacích postupů a povědomí o syntaxi Algol 60, který je v profesionální sféře značně rozšířen.

Kniha je určená jak pro systémové programátory, kteří potřebují stvořit aplikačně orientovaný jazyk pro daný obor, tak pro jiné odborníky (matematiky, inženýry, ekonomy) s omezenými programátorskými znalostmi, kteří pak mohou použít přímo aplikační jazyk s pojmy blízkými jejich oboru.

Stručně o knize

Titul se překvapivě vyhýbá běžné IT terminologii (software, hardware, rozhraní, klíčové slovo, definice, zdrojový kód, konstruktor třídy...), zvolená originální terminologie není vždy konzistentní, často se objevují tajuplná sousloví (reediční funkce, lokální semikoprogram, procedura nulové systémové úrovně, operátory postupu...). Operátory postupu jsou konkrétně vyjmenovávány na straně 43 hned za aritmetickými operátory (sčítání, odčítání...), logickými a relačními. Mezi operátory postupu se řadí například cyklus for, klíčové slovo else a konstruktor třídy new.

Cykly while a until spadají mezi oddělovače společně třeba s desetinnou tečkou. Klíčové slovo end, jímž se uzavírá blok instrukcí, je řazeno mezi závorky. Toto členění působí značně svévolně. Navíc v tabulce je rovnítko uvedeno špatně mezi logickými i správně relačními operátory, což je jedna z několika matoucích tiskových chyb. V Simule 67 se logická ekvivalence značí trojitým rovnítkem , nikoli znakem =. Studium knihy je značně znesnadněno nezvyklou terminologií, konvencemi a tiskovými chybami. Dvě stě padesát stran knihy jsem přečetl jen se značnými obtížemi.

Titul vyšel v prvním výtisku překvapivě vysokým nákladem 4 700 výtisků. Ač pevnými deskami působí reprezentativněji než běžné brožované IT tituly, kvalita vyhotovení knihy je překvapivě nevalná. Stránky jsou výrazně nažloutlé a omšelé, tiskařská čerň na několika místech prosákla skrz list. Vzhledem k velmi nízké ceně bych tyto nedostatky knize odpustil. Cena činí velmi příjemných 31 Kčs. Bohužel publikace v současnosti není k mání ani u dobrých knihkupců, protože již je delší dobu beznadějně vyprodána.

Dnešní aprílová retro recenze se týkala učebnice vydané roku 1978 nakladatelstvím SNTL a sepsané zřejmě již 15. 11. 1975 (datum uvedené v úvodu), tedy před čtyřiceti lety. Recenzi jsem složil z velké části z citací knihy.

Co se tenkrát dělo?

Deset československých událostí.

  • Prezident Svoboda je ze zdravotních důvodů odvolán. Nastupuje prezident Husák. Exprezident Novotný umírá.
  • V Tvorbě uveřejňuje své prohlášení spisovatel Bohumil Hrabal, a opět začíná publikovat. Alexej Pludek, jeden z nejúspěšnějších normalizačních prozaiků, vydává druhý díl své kvazihistorické trilogie pojmenovaný Rádce velkých rádžů. Václav Havel dopisuje hru Vernisáž.
  • Oba programy Československé televize plně podporují barevné vysílání.
  • Je popravena osminásobná vražedkyně Olga Hepnarová, která úmyslně vjela nákladním autem do davu. Podobně rozsáhlou masovou vraždu spáchá až za čtyřicet let Zdeněk Kovář, šílený uherskobrodský střelec.
  • Naši hokejisté v přátelském utkání hokejisty USA deklasují výsledkem 15:1.
  • V brněnské teplárně vybuchuje uhelný prach. Výbuch a následný požár zabíjí osmnáct lidí.
  • Československo s třiceti čtyřmi dalšími státy v Helsinkách podepisuje Závěrečný akt Konference o bezpečnosti a spolupráci v Evropě.
  • Slaví se třicáté výročí osvobození.
  • V Mostě posouvají kostel Nanebevzetí Panny Marie o 841 metrů.
  • Většina čtenářů tohoto článku se ještě ani nenarodila.

Deset událostí v informačních technologiích.

  • Zakladatel společnosti Seznam.cz a internetový miliardář Ivo Lukačovič slaví kulaté narozeniny. Je mu přesně jeden rok.
  • Je zakládána společnost Microsoft.
  • Chystá se výroba osobního počítače Apple I a schyluje se k založení Applu, který oficiálně vzniká na apríla 1976.
  • Na utažské univerzitě vyvinuly optický software řešící problém osvětlení. Martin Newell definuje model Konvice z Utahu. Nechá propočítat vzhled modelu, čímž vzniká první fotorealistické znázornění virtuální scény.
  • Kenneth Appel a Wolfgang Haken si uvědomují, že tzv. Problém čtyř barev lze řešit jednoduchým testováním možných modelových situací. Možných situací je pro člověka příliš mnoho, aby sepsal kompletní důkaz a aby korektnost celého důkazu po sobě zkontroloval. V roce 1975 Appel a Haken píší program, který provádí strojový důkaz. V roce 1976 publikují řešení. Poprvé byla strojově rozhodnuta otevřená matematická hypotéza.
  • Švédsko překvapivě uděluje politický azyl uprchlému marxistickému ideologu E. N. Kolmanovi, jenž nese značnou vinu na zaostávání SSSR v oblasti výpočetní techniky a na rozvratu ruské matematické školy. Za Stalina se vehementně věnoval boji s novými ,,buržoazními pavědami" a odhalování třídních nepřátel mezi předními ruskými matematiky. Za Chruščova propagoval svérázně pojímanou ,,kybernetiku“, kterou chápe de facto jako vysoce ideologickou humanitní vědu odvislou od marxistických dogmat (viz např. úvodní referát  ve sborníku Kybernetika ve společenských vědách, 1965).
  • Don Daglow vyvíjí první RPG hru Dungeon.
  • Společnost Cray staví první superpočítače Cray-1, které celkově překonaly svou dobu. Cray se v následujících letech stává hegemonem trhu se superpočítači. Seymour Roger Cray se všeobecně považuje za nejvýznamnějšího architekta superpočítačů a otce tohoto průmyslu.
  • V prosinci 1974 se objevuje první osobní počítač Altair 8800. Prodej několika tisíc kusů během roku 1975 předčí očekávání.
  • V USA vzrůstá zájem o počítačový šach, když první počítačové mistrovství světa opanuje sovětský program Kaissa. Zájem přiživuje i očekávaný, leč neuskutečněný zápas o titul mistra světa mezi Američanem Fischerem a Rusem Karpovem.

O Simule 67

Simula 67 pochází z roku 1967. (Recenzovaná kniha se týká pozdější verze jazyka. Popisují se v ní i cykly while a until, které původní Simula 67 postrádala.) Novátorská Simula 67 měla pro vývoj programování zcela klíčový význam, protože byla historicky prvním objektově orientovaným jazykem. Za návrh jazyka Simula 67 byla oběma tvůrcům Olemu Johanu Dahlovi a Kristenu Nygaardovi udělena prestižní Turingova cena, přezdívaná Nobelova cena za informatiku.

Výčty na stranách 243 až 247, jež vypočítávají celé prostředí Simuly 67, obsahují celkem 148 položek. Simula 67 je pidiprostředí, jehož úplná reimplementace by zkušenému vývojáři zabrala jen několik dní. Za novějším objektovým jazykem C++ Simula 67 značně pokulhává. Chybějí v ní pointerová aritmetika, přetypovávání proměnných, destruktory funkcí, makra, možnost definování nových typů, výjimky... V Simule 67 nelze vytvářet platformě nezávislý zdrojový kód. Primitivní kompilátor Simuly 67 neprovádí žádné optimalizace. Také vysoké hardwarové nároky spojené s potřebou garbage collectoru degradovaly užitnou hodnotu jazyka.

Odstranění garbage collectoru a zavedení explicitně volaných destruktorů bylo zásadní inovací pozdějších objektově orientovaných jazyků, což v naší éře programování aplikací pro výkonnou elektroniku, kdy objektové jazyky jsou většinou vybaveny plnohodnotným garbage collectorem (Java, Python, C#...) či alespoň čítačem referencí (Objective-C, GObject/Vala), zní poněkud paradoxně.

Simula 67 nabízí tyto vlastnosti:

  • Objektově orientované programování (třídy, objekty, definování nových tříd, podtřídy, garbage collector, dědičnost, virtuální funkce, členské funkce, odkazy na třídy, prázdná reference...).
  • Seznamy a osm funkcí pro práci se seznamy a několik funkcí kalendářního seznamu.
  • Podpora vstupně-výstupních zařízení.
  • Podpora textových řetězců, včetně konverze čísla na řetězec a naopak.
  • Všechny výrazové prostředky Algolu.
  • Předávání argumentů funkcí hodnotou, jménem a u některých typů i odkazem.
  • Tři goniometrické funkce a přirozený logaritmus.
  • Jedenáct jednoduchých funkcí generátoru pseudonáhodných čísel.
  • Celočíselný typ integer a desetinný typ real, typ pravdivostní hodnoty boolean pro klasickou aristotelovskou logiku, typ text a pole proměnných. (Nepodporuje-li počítač aritmetiku reálných čísel, je typ real celočíselný.)
  • Návěští a ukládání návěští jako hodnot (analogie k nestandardnímu C++ operátoru &&).

Na zavrženou Simulu 67 navazuje jazyk Beta.

Diskuze (0) Nahoru