Lehenengo belaunaldiko konputagailuak makina-lengoaiaz programatzen ziren. Bigarrenekoak mihiztadura-lengoaiaz. Hirugarren eta laugarrenekoak goimailako lengoaiaz programatzen dira. Boskarren belaunaldikoak, berezko lengoaiatik gertuko lengoaiaz programatuko omen dira.
Beraz gaur eguneko konputagailu bat programatzeko, goimailako lengoaiaren bat (BASIC, FORTRAN, COBOL, PASCAL...) menperatu behar da eta lengoaia hori tresna bezala erabiliz, gure problemak ebazten dituzten programak idatziko ditugu. Dena den konputagailu jakin batean, eta areago mikro batean, ezin dugu edozein lengoaia erabili; gure konputagailuak bere Sistema Eragilean inplementatuta dituenetariko bat baizik.
Goimailako lengoaien erabilpenak ez digu makina-lengoaiaz eta batez ere mihiztadura-lengoaiaz (assembler) aritzea baztertzen. Aukera hauek gainera, (mihiztadura-lengoiarena behinik behin) batzutan oso egokiak dira.
Mihiztadura-lengoaia (ASSEMBLER) eta goimailako lengoaiak noiz eta zertarakø erabili behar diren azaltzea da artikulu honen helburua.
Konputagailu batek zuzenean exekutatzen edo egikaritzen dituen aginduak, makina-lengoaiaz idatzita daudenak dira. Makina-lengoaiako aginduak CPUko Kontrol-Unitateak ezagotzu eta egikari erazten ditu. Agindu hauek konputagailuari atxekitzen zaizkio eta nahiko sinpleak dira; bakoitzak eragiketa aritmetiko edo logiko arrunt bakar eta adierazten du. Makina-lengoaiaz agiduak kode bitarren adierazten dira; 0 eta 1 ikurren bidez hain zuzen ere.
Bitarrean programatzea oso astuna gertatzen da, beste eragozpenak alde batera utzita. Horregatik lengoaia sinbolikoak sortu ziren; lehendabizi mihiztadura-lengoaiak eta gero goimailakoak.
Lengoaia sinbolikoz idatzitako programak ezin daitezke zuzenean egikaritu. Makina-lengoaiaz idatzitako programak soilki exekita daitezke zuzenean. Eragozpen hau gainditzea da itzultzaileen helburua.
Programa itzultzaile batek, lengoaia sinbolikoz idatzitako programa datu gisa hartzen du eta egikaritzapenaren ondorioz makina-lengoaiaz idatzitako programa baliokidea sortzen du. Beraz, lengoaia sinbolikoz programatzen dugunean egiten dugun programa ezin daiteke zuzenean egikaritu, exekutatu baino lehen itzulpen-prozesu bat burutu behar da eta.
Horregatik esaten genuen konputagailu batean ezin dela edozein lengoiatan programatu; lengoaia batean programatzeko bere itzultailearen beharra dagoelako. Programa itzultzaileak makina-lengoaiaz idatzirik daude eta Sistema Eragilearen osagai dira, hau da, erabiltzaileek ezi dituzte programatu behar eta konputagailuak dakarren software lagungarriaren zati nagusienetariko bat osatzen dute.
Programazio-lengoaiatik makinak zuzenean ulertzen duen beste lengoaia batera, hau da, makina-lengoaiara, automatikoki itzultzen duen programari, itzultzaile deritzo. Itzultzaileetan mota desberdinak bereizten dira; beste aldetik mihiztatzaileak, mihiztadura-lengoaiazko programak itzultzeko eta bestetik konpiladoreak eta interpretatzaileak goimailako lengoaiak itzultzeko.
Konpiladoreek programa bat itzultzen dutenean, makina-lengoaiazko programa baliokidea (objektu-programa deritzana) lortzen dute, objektu programa hori egikaritzeko prest geratuz (ikus 1. irudia).
Aldiz, interpretatzaileek iturburu-programa ez dut eosorik itzultzen, baizik eta aginduz agindu irakurri, itzuli eta egikaritu egiten dute. Beraz ez dagozkie 2. fase independente (itzulpena eta egikaritzapena); biak bateratu egiten bait dira (ikus 2. irudia).
Goimailako lengoaia bat itzultzeko, konpiladore bat edota interpretatzaile bat erabil daiteke. BASIC, PASCAL eta beste batzuren kasuetarako biak, konpiladorea eta interpretatzailea, eskaini ohi dira. Itzultzailea oso konplexu eta luzea gertatzen denean interpretatzaile moduko inplementazioa ez da komenigarria. Izan ere programa egikaritzeko, interpretatzaileak denbora guztian momorian egon behar bait du, zati handiegia beretzat hartuz. Beraz, lengoaia konplexuetarako gehinetan konpiladoreak erabiltzen dira. Horrexegatik COBOL edo FORTRANerako interpretatzailerik ez dago, konputagailu arruntetan behinik behin.
Itzultzeko bi aukerak daudenean, zein aukeratu?, interpretazioa ala konpilazioa?
Galdera honi erantzun baino lehenago bakoitzaren erabilpenak sortzen dituen bi diferentzia nagusiak aztertu behar dira:
Orduan, aurreko galderari erantzuteko, ondoko bi kasuak bereiztu behar dira: Programa berri bat garatzeko, interpretatzaile bat erabiltzea da egokiena, zeren zuzenketek sortutako dituzten probak berehala egin bait daitezke. Programa probatuta dagoenean eta ondo funtzionatzen duenean, hobe da lortzea konpiladorearen bidez objektu-programa baliokidea eta ondoko egikaritzapen guztietan objektu-programa erabiltzea; horrela exekuzio-denbora laburragoa izan da, itzulpen beharrik ez dago eta.
Beraz, lengoaia jakin baterako bi aukerak daudenean garapen-fasean onena interpretatzilea erabiltzea da, baina programa ondo dagoela egiaztatu eta gero. Konpiladorearen bitartez objektu-programa lortuko da esplotazio-fasean erabiltzeko.
Dena dela, askotan ez dago aukeran; sistema Eragileak bakar bat eskaintzen bait du. Mikro gehienetan interpretzailea besterik ez da eskaintzen BASIC lengoaiarako. Mihiztadura-lengoaia itzultzen duten programei, mihiztatzailea (ASSEMBLY) deitzen zaie, konpiladore antzekoak izan arren. Mihiztatzaileek, dagokien ituruburu-lengoaia mihiztadura-lengoaia denez gero, ezaugarri berezi bat dute: itzulpena oso azkar egiten dute iturburu-agindu bakoitzetik makina-agindu bakar bat lortzen bait dure. Beraz itzulpen-prozesua konpiladoreena baino askoz errazagoa da.
Lengoaia jakin batean itzultzaile-mota bata ala beste erabiltzeak berez dakartzan diferentzietatik kanpo, programazio-lengoaia bakoitzak bere ezaugarriak ditu eta ezaugarri horiek lengoaion erabilpenak mugatzen dituzte.
Hasteko, programazio-lengoaiak bi motatan sailka litezke: goi-mailako lengoaia eta mihiztadura-lengoaiak ondoren bi mota horien ezaugarriak alderatzen dira:
Arrazoi berdinarengatik goimailako lengoaiaz idatzitako programak ulergarriago eta irakurgarriagoak dira mihiztadura-lengoaiaz idatzitakoak baino.
a) eta b) pasarteetako ezaugarriak goimailako lengoiaien erabilpenaren alde daude eta c) eta d) pasarteetakoak aurka. Labur esanda, goimailako lengoaien erabilpenak programa unibertsalagoak, errazagoak, fidagarriagoak eta ulergarriagoak sortzen ditu, baina exekuzio denboran motelagoak eta memori hartze handiagokoak.
Aipatutako ezaugarri batzuk, adibide batez aztertuko ditugu. Adibidean, lehenengo mila zenbaki lehenak kalkulatu ondoren 1000.a idatzen duen programa azaltzen da hiru lengoaia desberdinez: mihiztadura-lengoaiaz, FORTRANez eta PASCALez (ikus 3. irudia). Hiru kasuetan algoritmo berberari jarraitu zaio eta baita programazio-tankerari ere (programazio egituratu izenekoari), VAX 750 izeneko minikonputagailuan inplementatuak izan direlarik.
Adibidea arakatuz, mihiztadura-lengoaiaz idatzitako programaren aginduak ez dira ulertzen, VAX 11 konputagailuaren mihiztadura-lengoaia ezagutzen ez bada. Beste bienak berriz, uler daitezke edozein konputagailutako FORTAN edo PASCAL jakinez gero.
Mihiztadura-lengoaiaz idatzitako programan, aginduak banan-banan ulertzen badira ere, oso zaila gertatzen da osotasunean ulertzea eta aldaketaren bat egitea. Beste bietan aldiz, PASCALezkoan batez ere, programaren ulergarritasuna askoz ere handiagoa da.
Aurreko c) pasartean adierazitako ezaugarriak argiagoa erakustearren, adibidek 3 programak itzuli eta egikaritu egin dira, 1. taulan agertzen diren emaitzak lortuz.
1. taula aztertuz, goimailako lengoaiak erabiliz memori hartze handoagoko eta motelago diren programak sortzen direla ikus daiteke. Horregatik, kasu honetan goimailako lengoaiez idatzitako programetako aginduek hartzen duten memori zatia %50 handiagoa da, (gutxi gorabehera), mihiztadura-lengoaiazko programari dagokiona baino, datuetarako %100era iristen delarik. Exekuzio-denborari begira, mihiztadura-lengoaiazko programa %50 azkarragoa da FORTRANezkoa baino eta %100 PASCALezkoarekin alderatuz. Neurri hauek nahiko orokorrak gertatzen dira nahiz eta adibide honetako memori hartzearen kasuan alde handiegia egon.
Orokorrean goimailako lengoaiaz egindako programak mihiztadura-lengoaiazkoak baino %50 motelagoak eta handiagoak direla esan daiteke.
Aurreko ezaugarriak ikusi eta aztertu ondoren, galdera nagusiari erantzuteko ordua iritsi zaigu. Noiz erabili mihiztadura-lengoaia eta noiz goimailako bat?
Erantzuna bistakoa da orain. Kasu gehienetan goimalako lengoaiak erabiliko dira eta mihiztadura-lengoaia ondoko bi kasu hauetan soilki.
Dena dela, goimailako lengoaia erabiltzen dugunean zein lengoaia aukeratu? Galdera honi erantzutea ez da artikulu honen helburua, baina erabaki hau hartzeko ondoko hiru ezaugarri hauek hartuko dira kontutan
1. taulan konpara daiteke PASCALezko programa bati dagokion abiadura eta FORTRANezko bati dagokiona. PASCALezkoa %25 motelagoa da, baina 3. irudian ikus daitekeenez, PASCALezko programa hobeto irakurtzen da FORTRANezkoa baino. Gainera PASCAL konpiladoreak askoz ere egiaztapen gehiago egiten du eta ondorioz erroreak lehenago aurkitzen dira frogetarako denbora laburtuz.
Hemen aipaturiko lengoaiak konbentzionalak dira, hau da agintzaileak; ez dira aipatu gaur egun garapen handia duten lengoaia funtzionalak (LISP eta antzekoak) eta erazagutzaileak (PROLOG).
Ez dira aipatu aplikazio zehatzetarako garaturiko lengoaiak ere (GPSS estadistikarako, SIMULA simulaziorako, etab.)
Programazio-lengoaia aukeratzeko orduan, ondoko erizpide hauek hartu behar dira kontutan: