Moduuli-2

Moduuli-2
Kieliluokka pakollinen , jäsennelty , modulaarinen , tietojen ja menetelmän piilottaminen
Esiintyi 1978
Tekijä Niklaus Wirth
Tyyppijärjestelmä staattinen , vahva
Tärkeimmät toteutukset

ETH Zurich (luonut Niklaus Wirth ), Gardens Point , p1 ,

Alkuperäinen XDS-x86 , gm2 (GNU Modula-2)
Murteet PIM2, PIM3, PIM4, ISO
Vaikutettu Pascal , Mesa , ALGOL , Simula-67
vaikutti Modula-3 , Oberon , Ada , Fortran 90 , Lua , Zonnon , Modula-GM

Modula-2 (Modula-2) on yleiskäyttöinen ohjelmointikieli , joka on Niklaus Wirthin vuonna 1978 kehittämä Pascalin kehitys .

Kielen kehittämisen tavoitteet ja periaatteet

Modula-2-kielen kehitti Niklaus Wirth luodakseen järjestelmäohjelmiston Lilith-tietokoneelle ., jonka kehitys alkoi vuonna 1977 Institute for Informaticsissa Zürichissä . Tämä määrittää monet sen ominaisuudet. Kieli suunniteltiin alun perin teollisuusjärjestelmän ohjelmointityökaluksi, jonka avulla voit kirjoittaa luotettavia, ymmärrettäviä ja ylläpidettäviä ohjelmia. Samaan aikaan kielen, vaikka se pysyy korkean tason kielenä , jossa on vahva kirjoitus ja tuki kaikille luotettaville ohjelmointityökaluille, pitäisi kuitenkin mahdollistaa pääsy suoraan laitteistoon, luoda erityisiä järjestelmäohjelmia , kuten keskeytyskäsittelijöitä ja laiteajureita , sekä tukea. rinnakkaisten vuorovaikutteisten prosessien ohjelmointi .

Modula-2:n välitön esi-isä oli kieli Modula , jonka Wirth loi 1970-luvun alkupuoliskolla Pascaliin perustuen . Tärkein lisäys, joka näkyy kielen nimessä, oli kyky jakaa ohjelma moduuleiksi - erillisiksi koodinpätkiksi, jotka ovat vuorovaikutuksessa eksplisiittisesti kuvattujen rajapintojen kautta. Myös syntaksi suunniteltiin uudelleen ja rinnakkaisohjelmointityökaluja lisättiin. Modulan ainoa kokeellinen toteutus ilmestyi vuonna 1975 . Moduulia voidaan pitää alkuperäisenä versiona, eräänlaisena Modula-2:n "alfaversiona", syntaktisesti nämä kaksi kieltä ovat hyvin läheisiä. Lisäksi Wirthin mukaan Modula-2 sai vaikutteita Mesa -kielestä., kehitetty Xerox PARCissa .

Yleiset ominaisuudet

Modula-2-kieli on rakenteellinen , modulaarinen ohjelmointikieli , jonka syntaksi perustuu Pascal-kieleen, mutta jota on tarkistettu ja parannettu huomattavasti. Sen tärkeimmät ominaispiirteet on esitetty alla.

Kieli on rakenteeltaan yksinkertainen - siinä on vain 40 varattua sanaa (vertailun vuoksi Adassa on 63 ); virallinen "Language Report", joka sisältää kattavan kuvauksen Modula-2:sta, kestää 40 sivua ( PL / 1 :n lyhennetyn version täydellinen kuvaus kestää noin 200 sivua).

Syntaksiominaisuudet

Helpoin tapa kuvata Modula-2:n ominaisuuksia on verrata sitä Pascal-kieleen. Tärkeimmät erot moduulien käyttöönoton ja hallittujen kuvausten vientimekanismien lisäksi ovat seuraavat.

IF THEN ehto ELSIF- lauseet THEN ehto ELSIF- lauseet THEN ehto ... ELSE- lauseet END- lauseet

Tämä eliminoi yhdistelmälauseiden BEGIN-ENDja IF-lausekkeiden "tikkaita" jatkuvan käytön monivaiheisessa kuntotestauksessa.

  • Silmukat WHILEja FORtarjoavat myös rungon lausejoukosta ja päättyvät varattuun sanaan END.
  • Lisätty ehdoton silmukka LOOP-END .
  • Sekä menettelyt että funktiot ilmoitetaan avainsanalla PROCEDURE.
  • Lisätty ennalta määritetty BITSET- bittikenttä .
  • Ehdoton hyppy - operaattori GOTO on poistettu kielestä .
  • Proseduurityyppi on lisätty, mikä mahdollistaa menettelyjen ja funktioiden määrittämisen muuttujiin. Myöhemmin tämä ominaisuus sisällytettiin Pascaliin, jossa se ei alun perin ollut saatavilla.

Murteet

Modula-2:ssa on kaksi päämurtetta. Ensimmäinen - PIM (Niklaus Wirthin kirjan "Ohjelmointi Modula-2:ssa" otsikon jälkeen, jossa annettiin yksityiskohtainen kuvaus kielestä ja tärkeimmistä järjestelmäkirjastoista) on olemassa kolmessa pääversiossa, jotka ilmestyivät peräkkäin ja eroavat toisistaan ​​​​vähän vähän. . Toinen suuri murre on ISO , jonka Kansainvälinen standardointijärjestö on standardoinut. Tärkeimmät erot murteiden ja kielen alkuperäisen kuvauksen välillä on lueteltu alla.

  • PIM2 (1983)
    • Edellyttää EXPORT -direktiivin pakollista käyttöä määritelmämoduulissa.
    • SIZE - funktio on kirjastotoiminto, ja se on tuotava SYSTEM -moduulista .
  • PIM3 (1985)
    • Poistettiin EXPORT -direktiivi määritysmoduuleista. Muutos johtui siitä, että määritelmämoduulin koko sisältö viedään, joten VIENTI - käyttö on tarpeetonta.
    • SIZE - toiminto on ennalta määritetty (saatavilla missä tahansa ohjelman kohdassa ilman tuontia).
  • PIM4 (1988)
    • Selvensi negatiivisten operandien MOD -operaation käyttäytymistä .
    • Lisätty vaatimus, että kaikkien ARRAY OF CHAR -merkkijonojen on oltava nollapäätettyjä (ASCII NUL), vaikka merkkijono kattaisi koko taulukon.
  • ISO [1] (1996 ja 1998)
    • Lisätty tietotyypit COMPLEX ja LONGCOMPLEX .
    • Lisätty poikkeuksia.
    • Lisätty konstruktio FINALLY -moduulin lopetuskoodille .
    • Täysin standardoitu I/O-kirjasto.
    • On tehty selvennyksiä, jotka ovat poistaneet suurimman osan alkuperäisen kuvauksen epäselvyyksistä, tehty paljon pieniä korjauksia ja selvennyksiä.

Edut ja haitat

Voidaan ehdottomasti sanoa, että Modula-2-kielessä, vaikka se säilyttää Pascalin positiiviset ominaisuudet, on useita ominaisuuksia, jotka tekevät siitä paljon tehokkaamman kielen ja sopivan paremmin sekä järjestelmä- että sovellusohjelmointiin . Modula-2:n tärkeimmät edut nykyaikaisiin rakenneohjelmointikieliin verrattuna ovat seuraavat [2] :

  • Kielen määritelmän yksinkertaisuus ja lyhyys. Täydellinen syntaksimäärittely RBNF- merkinnöissä vie alle 3 sivua, täydelliset syntaksikaaviot  - 12 sivua, virallisen "kieliviestin" pituus on 40 sivua, mikä on melkein ehdoton vähimmäismäärä sellaiselle universaalille kielelle, jolla on tällaiset ominaisuudet. Vertailun vuoksi ada-kielen virallinen täydellinen määritelmä on 400 koneella kirjoitettua sivua.
  • Yksinkertainen, looginen ja yhtenäinen syntaksi, jossa ei ole ylimääräisiä rakenteita ja kirjoitusvirheitä aiheuttavia elementtejä. Modula-2 on ensimmäinen ohjelmointikieli, joka poistaa GOTO-käskyn .
  • Hyvin harkittu mekanismi ohjelman jakamiseksi käännösyksiköiksi (moduuleiksi), joissa on selkeästi kuvatut liitännät ja täysin kontrolloidut tuonnit, joiden avulla voit tuoda sekä kokonaisia ​​moduuleja että yksittäisiä elementtejä, joissa on mahdollisuus sekä hyväksyttyihin (moduulin nimellä) että määrittelemättömiin. tuotujen objektien nimien käyttö.
  • Syöttö-tulostustilojen ja useimpien vakiomenettelyjen ja toimintojen kielen poissulkeminen ja niiden siirtäminen kirjastoihin, jotka on suunniteltu vakiomoduuleiksi, mikä yksinkertaistaa kieltä ja kääntäjää ja antaa toteuttajalle täydellisen vapauden vakiomenettelyjen ja toimintojen suhteen. toteutettu.
  • Matalan tason ohjelmointimekanismien sisällyttäminen kieleen, mukaan lukien suoran muistin ja kirjoittamattomien tietojen ja osoittimien käsittely, mikä mahdollistaa useimpien matalan tason ohjelmien kirjoittamisen korkean tason kielellä, jotka perinteisesti kirjoitettiin assemblerillä, esim. kuljettajina ja keskeytyskäsittelijöinä .
  • Rinnakkaisohjelmoinnin peruskeinojen saatavuus, jotka on valittu siten, että varmistetaan niiden riittävä toteutus sekä fyysisesti moniprosessorialustoilla että aikajakoalustoilla.
  • Merkittävää kielen luomishetkellä oli proseduurityypin ulkoasu ja vastaavasti muuttujat, joille voidaan dynaamisesti osoittaa toimenpiteitä.

Kielen haittoja ovat mm.

  • Rinnakkaisten ohjelmointimekanismien heikkous , erityisesti rinnakkaisten prosessien vuorovaikutuksen organisointi. Näiden työkalujen toteutus on siirretty järjestelmäkirjastoihin, ja standardikirjasto sisältää vain yksinkertaisimmat rinnakkaisohjaustyökalut. Moduuli 2:n rinnakkaisohjelma, joka käyttää näitä rajoja ylittäviä samanaikaisuusohjaimia, menettää automaattisesti siirrettävyyden. [3]
  • Abstraktien tyyppien muistiin kartoittamista koskevien mekanismien puuttuminen . [3]
  • Paikallisten moduulien tuki hankaloittaa kääntäjää tarpeettomasti. Sisäkkäisten moduulien käytön syynä on rajoittaa laajuutta ja korostaa ohjelman tärkeimpiä osia synkronoinnin varmistamiseksi rinnakkaiskäsittelyn aikana, mutta ne voidaan toteuttaa muilla, yksinkertaisemmilla ja ilmeisemmillä tavoilla. [neljä]
  • Selkeä jako toteutusmoduuliin ja määrittelymoduuliin on kiistanalainen päätös. Se vaikeuttaa kääntäjän työtä ja pakottaa ohjelmoijan synkronoimaan eri tiedostojen muutokset. Voidaan huomata, että Modula-2:n jälkeläisessä - Oberon - tällaisesta erottelusta luovuttiin, sen sijaan yhdessä ohjelmamoduulissa viedyt elementit (jotka muodostavat moduulin käyttöliittymän) on yksinkertaisesti merkitty erityisellä tavalla. [neljä]

Voidaan myös huomata, että moduulista 2 puuttuu useita sen luomishetkellä tunnettuja ja suosittuja ominaisuuksia, jotka voidaan katsoa sekä kielen etujen että haittojen ansioksi tietyn kriitikon näkökulmasta riippuen:

Käyttö

Neuvostoliitossa ensimmäiset Modula-2- kääntäjät ilmestyivät vuosina 1982-83 SM-4- ja Elektronika-60-tietokoneille. Kääntäjä BESM-6:lle kehitettiin Neuvostoliiton tiedeakatemian laskentakeskuksessa ( V.A. Serebryakov , V.G. Lyuty, A.N. Bezdushny) [5] . Samalla kehitettiin ohjelmointiteknologioita ja luotiin ensimmäiset Module-2:een perustuvat sovellettavien ohjelmien paketit. Tällaista työtä tehtiin erityisesti MEPhI :n kybernetiikan tiedekunnassa . Neuvostoliiton tiedeakatemian Siperian sivuliikkeen laskentakeskuksen VNTK "START" kehitti sarjan Kronos -prosessoreita , joissa oli laitteistotuki Modula-2-ohjelmointikielelle.

Yleisesti voidaan sanoa, että Modula-2 ei saanut ominaisuuksiltaan ansaitsemaansa jakelua ja tunnustusta. Kieli saavutti tietyn suosion Euroopan akateemisessa ympäristössä, oli melko suosittu Neuvostoliiton ohjelmoijien keskuudessa, mutta ei voinut painaa edeltäjäänsä: Pascal-kielen uudet toteutukset, jotka sisälsivät moduulien organisointivälineet , ja myöhemmin - objektiohjelmointi . työkalut , ohitti aina Modula-2:n suosiossa. Lilith-järjestelmä, jota varten Modula-2 luotiin, ei saanut laajaa suosiota eikä voinut auttaa Modula-2:ta etenemään.

Borland Internationalin halpojen ja nopeiden Pascal-kääntäjien erittäin laaja valikoima näytteli rooliaan . Mielenkiintoista on, että Turbo Modula-2 -kääntäjä CP/M OS:lle ei ollut pelkästään Borlandin luoma, vaan se tuli jopa myyntiin Pohjois-Amerikassa ja Länsi-Euroopassa. Yrityksen johto, ensisijaisesti Philippe Kahn , päätti kuitenkin luopua tämän järjestelmän kehittämisestä, jotta se ei luo kilpailijaa erittäin menestyneelle Turbo Pascalille . Tämän päätöksen seurauksena Borlandin varatoimitusjohtaja Nils Jensen, yksi yrityksen perustajista, jätti Borlandin kehitystiiminsä kanssa vuonna 1987 ja osti oikeudet Turbo Modula-2:een. Hänen luoma JPI -yritys (Jensen & Partners International) julkaisi TopSpeed-tuotemerkin alla kokoelman kääntäjiä x86-perheprosessoreille: Assembler, Modula-2, Pascal, C/C++, Ada.

Tällä hetkellä Modula-2-kielellä ohjelmoidaan osana GLONASS -projektia laukaistettujen satelliittien ohjelmistoja [7] . Vuoden 2010 lopussa GNU Modula-2 -kääntäjä sisällytettiin virallisesti GCC -kokoelmaan [8] .

Jälkiläiset kielet

  • Modula-3  on Modula-2:n jatkokehitys, jonka DEC ja Olivetti Firms ovat kehittäneet yhdessä Wirthin konsultointituella.
  • Oberon  on Wirthin vuonna 1988 kehittämä Modula-2:n jatkokehitys. Oberon käyttää automaattista muistinhallintaa roskien keräämisessä , se muutti myös useita ominaisuuksia, joita kirjoittaja piti epäonnistuneina Modula-2:n käyttökokemuksen perusteella. Lisätty taloudellisesti toteutettu objektialijärjestelmä. Oberonista puolestaan ​​tuli kokonaisen kielen esi-isä: Oberon-07 , Oberon-2 , Component Pascal ( Component Pascal ), Active Oberon , OberonScript .
  • Zonnon  on Jürg Gutknechtin luoma kieli, joka perustuu Modula-2:een ja Active Oberoniin, johon on lisätty useita uusia elementtejä, sekä alkuperäisiä että lainattuja muista kielistä.
  • Alma-0  - Alma-0 on lisätty (moniparadigman) versio Modula-2:n pakottavasta kielestä.
  • Parallaxis [9]  on Thomas Brownlen vuonna 1989 kehittämä strukturoitu ohjelmointikieli rinnakkaiseen dataohjelmointiin (SIMD-järjestelmät). Kieli perustuu sarjamoduuliin Modula-2, mutta sitä on laajennettu ei-erillisillä rinnakkaisilla rakenteilla.

Suorien jälkeläisten lisäksi monet muut kielet ovat perineet Modula-2:sta tavalla tai toisella syntaksia ja yleistä arkkitehtuuria. Modula-2:n vaikutuksen mainitsivat tällaisten pienten samankaltaisten kielten, kuten esimerkiksi Lua ja Go , luojat . Modula-2:n (ja suuremmassa määrin sen jälkeläisen Oberon-kielen) vaikutus voidaan jäljittää Java-, C#- ja myöhäis Pascal-murteissa, kuten Object Pascal ja Delphi.

Muistiinpanot

  1. ISO/IEC 10514-1:1996
  2. Wirt N. Ohjelmointi Modula-2-kielellä. M.: Mir, 1987;
  3. 1 2 Kurochkin V. M. Kirjan käännöstoimittajan esipuhe: Wirth N. Ohjelmointi Modula-2-kielellä. M.: Mir, 1987.
  4. 1 2 Niklaus Wirth. "Moduluksesta Oberoniin" . InfoArt (1998). Haettu 25. lokakuuta 2010. Arkistoitu alkuperäisestä 19. syyskuuta 2011.
  5. Lyhyt johdatus järjestelmämatematiikan laitokseen. CC RASin tuki . Haettu 30. marraskuuta 2019. Arkistoitu alkuperäisestä 11. syyskuuta 2019.
  6. Koltashev A. A.  Modula-2 Venäjän avaruudessa Arkistokopio 11. huhtikuuta 2011 Wayback Machinessa
  7. GNU Modula-2 -sivu . Haettu 9. lokakuuta 2009. Arkistoitu alkuperäisestä 5. lokakuuta 2009.
  8. Englanninkielinen kirja: Bräunl: Parallel Programming , Prentice-Hall, 1993
    Englanninkielinen kirja: Bräunl: Parallel Image Processing , Springer-Verlag, 2001
    Saksankielinen kirja: Bräunl: Parallele Programmierung , Vieweg-Verlag, 1993
    Saksankielinen kirja: Bräunl , Addarbeisondver -Wesley, 1995
    Saksalainen kirja: Bräunl: Massiv parallele Programmierung mit dem Parallaxis-Modell , Springer-Verlag, Informatik-Fachberichte, 1990
    Venäläinen kirja: Bräunl: Parallel Programming , Vyschshaya Shkola Publishers, Kiev, 1997

Kirjallisuus

Linkit