Mihiztadura-lengoaia eta goimailako lengoaiak: noiz eta zergatik
1986/12/01 Alegria Loinaz, Iñaki Iturria: Elhuyar aldizkaria
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.
Sarrera
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.
Itzultzaile-motak
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:
- Konpiladore bat erabiltzen denean, programa bat ondo baldin badago bere objektu-programa gorde egin daiteke, eta programa horren hurrengo egikaritzapenetan ez da programa itzuli behar. Aldiz interpretatzaile bat erabiliz, egikaritzapen guztietan itzuli behar da programa.
- Programa berri bat konpiladorearen bidez garatzen ari denean, programa probatzeko, lehendabizi osoa itzuliko da, gero egikaritu eta ateratako erroreak zuzendu ondorne aurreko urratsak errepikatu behar dira. Interpretatzailearen bidez egiten bada, programa egilearitu ahala alda daiteke eta momentu berean probatu, programa osoa itzultzen denbora galdu gabe.
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.
Lengoaiaren ezaugarriak
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:
- Mihiztadura-lengoaia makinari lotua dagoen bitartean, goimailako lengoaiak unibertsalak dira, hau da, goimailako lengoaia batez idatzitako programa bat konputagailu desberdinetan erabil daiteke ezer aldatu gabe edo aldaketa gutxi eginez. Mihiztadura-lengoaiaz idatzitako programa batek berriz, konputagailu jakin baterako bakarrik balio du.
- Konputagailuaren osagai edo eragiketa berezi batzuk maneiatzeko (batez ere sistemari deiak egiteko edo sistemaren pean dagoen informazioa eskuratu edo aldatzeko), beharrezkoa da mihiztadura-lengoaia erabiltzea. Kasu honetan, nahitaez erabili behar da mihiztadura-lengoaia.
Mihiztadura-lengoaiak makina-lengoaiarekin lotura handia du, eta beraz, programatik urrutiago dago goimailako lengoaia baino. Hortaz, programen eraikuntza askoz errazagoa gertatzen da goimailako lengoaia batez mihiztadura-lengoaiaz baino eta ondorioz akats edo errore gutxiago sortuko da goimailako lengoaia erabiliz.
Mihiztadura-lengoaiaz programatzen dugunean, jakin badakigu aginduak eta datuak nola inplementatzen diren makina-lengoaian edo behintzat sumatu egiten dugu. Aldiz, goimailako lengoaiak erabilitz, berauek unibertsalak direnez gero, ezin ditugu makina-lengoaia bakoitzaren xehetasunak eta abantailak erabili. Horren ondorioz, problema berbererako mihiztadura-lengoaiaz lortutako objektu-programa azkarragoa izango da eta memori hjartze txikiagoa edukiko du goimailako lengoaiaz lortutakoak baino.
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.
- Konputagailuaren zenbait osagai edota eragiketa berezi maneiatzen duen programa edo azpiprograma egiteko, kasu hauetan mihzitadura-lengoaiaren erabilpena ezinbestekoa delako (ikus d) pasartea).
Exekuzio-denbora edo memori hartzea kritikoa denean. Adibidez, goimailako lengoaia batez eraikitako programa bat memorian sartzen ez denean, mahiztadura-lengoaiaz egiten bada sartzeko posibilitatea dago. Denbora errealeko aplikazioetan exekuzio-denbora kritikoa da, beraz, programa osoa edo gehien erabiltzen diren azpirrutimak mihiztadura-lengoaiaz egiteak merezi du.
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
- Aplikazio-mota. Ez da berdin gestio-apliakzioa edo apliazio zientifikoa programatzea. Lehenengoetan kalkulu sinpleak eginaz oso datu-kopuru handiak maneiatzen diren bitartean, besteetan garrantzitsuena eta konplexuena kalkulua da. Hori dela eta, badaude kalkulu zientifikora zuzenduriko lengoaiak (FORTRAN, APL...) gestiora zuzendutakoak (COBOL, RPG,...), beste batzu bi alorretan erabiltzen badira ere (PL/1, BASIC, PASCAL).
- Metodologia . Azken urteotan softwarea egitean gero eta garrantzi handiagoa ematen zaio metodologiari. Eraginkortasuna erizpide nagusitzat hartu ordez, lengoaia batzuk metodologia oneko programen eraikuntzara zuzenduta daude, hau da, lengoaia hauen bidez programa fidagarriagoak, egituratuagoak, sinpleagoakf eta aldagarriagoak egin daitezke. Lengoaia hauen bidez software merkeagoa lortzen da, zeren eta frogatuta bait dago programa baten kostuaren erdia baino gehiago frogetan eta mantzentzean datzala. Mota honetako lengoaia bat, PASCAL da; gaur egun ikasteko egokiena; programatzeko metodologian ohitzen bait du ikaslea. BASIC lengoaiak berriz, ez du batere laguntzen programa egituratuak egitera eta lehenengo lengoaia bezala ikasten dutenek ohitura txar asko hartzen dute.
Eraginkortasuna . Lengoaia batzuk, diseinatu zirenean, kontzeptu hau jo zuten ideia nagusitzat. Horrelakoetan exekuzio-abiadurak, potentziak, efikaziak... du garrantzirik handiena. Hori dela eta, konpiladoreak nahiko handiak gertatzen dira eta ezin daitezke inplementatu konputagailu txikietan. Mota honetakoak dira COBOL, FORTRAN, eta PL/1 lengoaiak. Gaur egun, komertzialki lengoaia-mota hauek gehien erabiltzen dira.
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.)
Ondorioak
Programazio-lengoaia aukeratzeko orduan, ondoko erizpide hauek hartu behar dira kontutan:
- Problemak konputagailuaren arkitekturarekin eta Sistemarekin zerikusirik baldin badu, gehienetan mihiztadura-lengoaia erabili behar da nahitaez.
Memori hartzea edo exekuzio-denbora kritikoa bada, mihiztadura-lengoaia erabiltzea da egokiena.
Aurreko bi kasuak salbu, goimailako lengoaia erabiliko da eta aplikazio-mota kontutan hartuz erabaki beharko dugu zer kontzepturi ematen diogun garrantzirik handiena: eraginkortasunari ala metodologiari. Egokiena metodologia onari bultzatzen dion lengoaia eraginkorra aukeratzea litzateke, baina horrelakorik ez dago gaur egun. Dena dela, FORTRANeko azken bertsioek, metodologiari bultzatzen diote eta programa egituratuak lortzen dira eraginkortasuna galdu gabe.
Lengoaia aukeratu eta gero programak itzultzeko konpiladorea eta interpretazioa balego, frogetan azken hau erabiliko litzateke eta ondo dagoela egiaztatu eta gero konpiladorearen bidez lortutak objektu-programa erabiliko da esplotaziorako.
Gai honi buruzko eduki gehiago
Elhuyarrek garatutako teknologia