A Simula programozási nyelv

Bevezetés

A Simula születése

Az első Objektum-Orientált Programnyelvet (OOL), a Simula 67-et, Ole Johan Dahl és KristenNygaard mutatta be hivatalosan 1967 májusában az Osló mellett megrendezett IFIP TC 2 Working Conference on Simulation Languages konferencián. 30 év egy emberi és számos számítógépgenerációt jelent, mégis, annak ellenére, hogy már ilyen régóta használják, minden mai modern programozói tevékenység azokon az OOP-s szabályokon alapszik, melyek először a Simula definíciójában jelentek meg. És ami még fontosabb, a Simula olyan máig sem teljesen kihasznált képességekkel is rendelkezik, melyeket talán meg sem értünk, nem csak az általános programozói közönség, hanem az OOP-s közösség tagjai sem.

Alapok

Simula I = Processzorientált diszkrét szimulációs nyelv, amely az ALGOL 60-ra épült. (1964 - 1965) Simulation language
Simula 67 = Általános célú objektumorientált nyelv beépített osztályokkal láncolt listák kezelésére (Simset rendszerszintű osztály) és diszkrét processzorientált szimulációra (Simulation rendszerszintű osztály). (1967 - 1971)
Simula = Simula 67 (A "67" szám már nincs használatban, mivel a Simula I-et már régóta nem használják)

A Simula környezet fő részei és interfészei

A Simula 67 magasszintű programozási nyelv, ugyanis tartalmaz olyan fogalmakat és utasításokat, amelyek lehetővé teszik a számítási folyamatok formális leírását, és olyan eszközöket ad, amelyek megkönnyítik a kis- és közepes méretű feladatok szakértői segítség nélküli megoldását.

Története

1952-től Kristen Nygaard Operációkutatás témakörben tevékenykedik, ami magában foglalta a szimulációs modellek írását is. Probléma: hogy lehetne egységes fogalmi rendszerbe foglalni az összetett létező világot. A Simula a kezdetektől fogva célzottan egyrészt rendszerleírás, másrészről programozási nyelv.

1960-ban az ALGOL 60 rekurzív blokkos mechanizmusra épül, rendelkezik minden lényeges vezérlési struktúrával. A Simula-t egy előfeldolgozós csomagként tervezik az ALGOL 60-hoz.

1962-ben Ole-Johan Dahl és Kristen Nygaard találkoznak az oslói Norwegian Computing Center (NCC)-ben. Előterjesztik az első formális nyelvi tervezetet a müncheni IFIP 62 Világkonferencián.

1962-ben az UNIVAC által támogatja a Simula projectet, aminek eredményeképp elkészítik az UNIVAC 1107-et 1963-ban.

1963-ban az ALGOL szigorú veremmechanizmusa és a Simula kifinomult szimulációs lehetőségei összeegyeztethetetlennek tűnnek, ezért elvetik a preprocesszor ötletét, a Simula önálló ALGOL alapú nyelvvé válik.

1963-ban Ole-Johan Dahl új memória lefoglalási sémán dolgozik, amely a szabad tárterületek egy kétdimenziós listáján alapszik.

1964-ben az eredeti ötlet, miszerint a passzív ügyfelek aktív komponensek hálózatán keresztül lépkednek (aktivációs megközelítés) korlátozó tényezővé válik. Másik, járhatóbb útként adódik, hogy aktív ügyfelek mozogjanak passzív hálózaton át. Ez egy általános, egységes processzkoncepcióhoz vezet: rendszer = egymásra ható, kvázipárhuzamos processzek halmaza.

1964-ben megjelenik a Simula fordítók első prototípusa, amely decemberben már működőképes az NCC UNIVAC 1107-esén, májusban megjelenik a dokumentáció.

1965. Az első évben a Simulát az operációkutatás számos problémájához munkába állítják.

1965-66-ban használnak Simula I-et Svédországban, Németországban, az USA-ban (Burroughs B5500) és a Szovjetunióban (URAL 16).

1965-ben Tony Hoare az ALGOL közlönyben publikálja a rekord osztálykoncepciót. Alapos megfontolás után Nygaad és Dahl elfogadják ezen elveket, de ekkor még hiányzik néhány általános irányelv.

1966. Megjelenik a prefixálás ötlete. A processzeket (később az objektumokat) két rétegre osztjuk: prefix réteg és főréteg. Megjelenik a alosztály ötlete. Nygaard és Dahl egy általános célú magasszintű programozási nyelven kezdenek el dolgozni.

1967 (Május). Dahl és Nygaard hivatalosan bejelentik a Simula 67-et az IFIP TC 2 Working Conference on Simulation Languages konferencián az Osló melletti Lysebu-ban.

1967 (Június). Definiálják a Simula 67 szabványt, melyet Általános Alapszabványnak (Common Base Standard) neveznek el.

1968. A Simula Standards Group (SSG, Simula Szabványügyi Csoport) első összejövetele. Miután elfogadták Bjorn Myhrhaug által készített sztringkezelést és I/O-t, a Simula-t formálisan véglegesítik.

1973. Megalakul az Association of Simula Users (ASU, Simula Felhasználók Egyesülete). A Simulát ebben az évben már több mint 250 helyen használják.

Simula megvalósítások:

1969 CDC 3300, 3600 (Norvégia Oslói Egyetem, NDRE)
1971 UNIVAC 1100 (NCC)
1972 IBM 360/370 (NCC)
1972 CII 10070, IRIS 80 (Franciaország)
1973/74 CDC 6000 (Franciaország, Hollandia), CDC Cyber70 (NDRE)
1975 DEC 10 (Svédország)

Az alapkoncepció

Célok

A nyelv megszületésekor a jelentősebb már meglévő magasszintű nyelvek, mint például a FORTRAN, az ALGOL 60 vagy a COBOL alkalmasak voltak kis és közepes méretű feladatok megoldására. Az új nyelv feladata az volt, hogy komplex, és erősen interaktív, pl. nagyméretű szimulációs feladatokat szolgáló programokat lehessen benne írni.

Ez az alábbi követelményeket támasztotta a nyelvvel szemben:

Megvalósítás

A Simula 67 nyelv részhalmazként tartalmazza az ALGOL 60 általános célú programozási nyelv legnagyobb részét. Az ALGOL 60 kiindulási nyelvként való felhasználásának oka, hogy alapszerkezete kiterjeszthető. A szerzők úgy érezték, hogy a Simula 67 kevésbé lenne vonzó, ha az alapja egy új algoritmikus nyelv lenne. Azért az ALGOL 60-ra esett a választás, mert ennek a nyelvnek már kiterjedt felhasználói bázisa volt. Az ALGOL 60-ban a részekre bontási mechanizmus megvalósítására a blokkszerkezet használható. A benne definiált fogalmak és mennyiségek lokálisak, azaz teljesen függetlenek a program többi részétől (<--> részekre bontás). A blokk az összegyűjtött adatstruktúráival és a hozzájuk kapcsolódó algoritmusokkal, a tevékenységek formális leírására szolgáló minta. Végrehajtáskor létrejön egy példánya. A számítógépben a blokkpéldány a szükséges végrehajtási információk és lokális változók tárolására fenntartott memóriaterület formájában valósul meg. A blokkpéldány, a blokk (minta) olyan szövegszerű másolataként is elképzelhető, amelyben a lokális változók azonosítják a blokkpéldány által lefoglalt memóriaterületet. A blokkpéldány fogalmának bevezetése elvezet a különböző feltételek mellett létrejött blokkpéldányok kölcsönhatásainak kezeléséhez, például a rekurzív hívások esetében. Az osztály a blokkfogalom kiterjesztésének tekinthető, amelyben a blokk olyan objektum osztályhoz tartozik, mely objektumok mindegyike ugyanazon mintához illeszkedő (futás közbeni) blokkpéldány. A blokkfogalom kiterjesztése a class deklarációban, valamint a hozzá rendelhető kölcsönhatásokban nyilvánul meg, mint az objektumhivatkozás (pointer), távoli elérés, kvázi párhuzamos működés, és a blokkok egymás után fűzése (öröklődés).