Portimine (inglise keeles porting) on tarkvaraehituse protsess, mille eesmärk on kohendada tarkvara nii, et see saavutaks teatavas programmis kasutatavas arvutuskeskonnas erineva tulemuse sellest, milleks selle programmi arvutuskeskkond algselt mõeldud oli (kaasaskantavus). Antud terminit kasutatakse ka siis, kui riistvara või tarkvara muudetakse vastavalt keskkonnale, et seda oleks võimalik seal kasutada.[1][2] Tarkvara on kaasaskantav siis, kui selle portimise kulud uuele platvormile on oluliselt madalamad kui nullist kirjutamise kulud. Mida madalamad on tarkvara kohendamise kulud, võrreldes selle rakendamise maksumusega, seda porditavamaks (kaasaskantavamaks) peetakse tarkvara.

Etümoloogia

muuda

Mõiste "port" on tuletatud ladina keelest portāre, mis tähendab "vedama".[3] Kui koodi ei ole võimalik ühildada konkreetse operatsioonisüsteemi või arhitektuuriga, siis tuleb kood "vedada" uude süsteemi. Seda terminit ei rakendata üldiselt protsessidele, kus tarkvara kohendatakse selleks, et viimane kasutaks vähem mälu protsessoril või operatsioonisüsteemil. Samuti ei kasutata seda ka lähtekoodi ümberkirjutamisel mõnda teisse programmeerimiskeelde. Enamik tarkvaraarendajaid väidab, et nende kirjutatud tarkvara on kaasaskantav ehk tarkvara uude keskkonda kohendamiseks on vaja vähe vaeva näha. Tegelik pingutuste suurus sõltub mitmetest teguritest, alustades sellest, kui palju erinevad algne ja uus keskkond üksteisest, lõpedates tarkvaraarendaja eelneva kogemusega.

Ajalugu

muuda

Tänapäeval kasutatav CPU-de ja operatsioonisüsteemide arv on tunduvalt väiksem kui minevikus. Domineerivaks on x86 arhitektuur, mis tähendab, et enamus töölaua tarkvara ei pea kunagi portima erinevale CPU-le. Samal turul on ka operatsioonisüsteemide valik koondunud kolmeks suureks osaks: Microsoft Windows, macOS ja Linux. Turg, kus kaasaskantavus tekitab veel olulisi probleeme, on mobiiliturg. Laialdaseks alternatiiviks on seal tekkinud ARM.

Aina rohkem leidub tööriistu, mille abil saab hõlbustada kohendamist, nagu näiteks GNU Compiler Collection, mis võimaldab järjepidevaid programmeerimiskeeli erinevatel platvormidel. Teiseks tööriistaks on Autotools, mis automaatselt tuvastab keskkondade erinevusi ja kohendab tarkvara sellele vastaks.

Teisaldatavad kompilaatorid

muuda

Otseselt masinkoodi tõlkimise asemel tõlgivad tänapäevased kompilaatorid masinsõltuvaks vahekoodiks, et parandada kompilaatori teisaldatavust ja minimeerida kavandamisega seotud jõupingutusi. Vahekeel määratleb virtuaalmasina , mis suudab täita kõiki käske, mis on kirjutatud vahekeeles.[4] Vahekeele koodi juhised tõlgitakse koodi generaatori poolt samaväärseteks masinkoodi jadadeks, et saaks luua käivitatava koodi. On võimalik vahele jätta masinkoodi genereerimine, kui implementeerida koodi tõlk või JIT virtuaalmasinale.[4] Koodi tõlk on enda olemuselt lihtsamini ülesehitanud ning seetõttu lihtsamini kaasaskantav kui koodi generaator, sest ta ei suuda koodi optimeerida enda piiratud vaate tõttu (näeb ainult ühte käsku korraga, vaja läheb jada, et koodi optimaalselt optimeerida). Mõningaid koodi tõlke on äärmiselt lihtne portida, sest nad teevad minimaalseid oletusi nende aluseks oleva riistvara käskude komplekti kohta. Tulemusena on virtuaalne masin veelgi lihtsam kui sihtprotsessor.

Kui soovitakse kirjutada kompilaatori allikad täielikult programmeerimiskeeles, mille kompilaator on mõeldud tõlkima, siis kasutatakse järgnevat lähenemisviisi, mida kutsutakse kompilaatori alglaadimiseks:

  • Pordi endale tõlk. Viimane tuleks kodeerida monteerimiskoodis,sihikuna kasutades juba olemasolevat monteerijat.
  • Kohendada koodi generaatori allikas uue masinaga.
  • Käivitada kohendatud allikas, kasutades tõlki koos koodi generaatori allikaga kui sisend. See genereerib masinkoodi koodi generaatori jaoks.

Videomängude teisaldamine

muuda
 
Mäng, mis on hiljuti porditud personaalarvutile.

Portimise terminit kasutatakse ka videomängude valdkonnas. Näiteks on kindel mäng mõeldud jooksma teatud platvormil. Kui seda mängu teisendada nii, et seda saab kasutada ka teisel platvormil, kutsutakse seda videomängude portimiseks. Aastaid tagasi mõeldi videomängude “portimise” all mängude ümbertegemist, aga tänapäeval on mängud arendatud tarkvaraga (C++) nii, et platvormide vahelist portimist praktiliselt tegema ei pea. Algselt kannatasid paljud porditud mängud kvaliteedi probleemide küüsis, sest arvutid erinesid tohutult.[5] “Konsooli port” on mäng, mis on originaalis mõeldud mängukonsoolile (Xbox 360), kuid hiljem kohendatud nii, et seda oleks võimalik mängida ka personaalarvuti peal. See termin on arvutimängurite kommuunides laialdaselt levinud. Konsoolilt portimise protsessi tagasiside on sageli olnud negatiivne, sest personaalarvutid suudavad riistvara arenedes mänge jooksutada palju kõrgemate seadistuste peal, aga vahel on kohendatud mängud kehvasti või laisalt optimeeritud.

Vaata ka

muuda

Viited

muuda
  1. D.E Whitten; P.A.D Demaine (Märts, 1975). "A machine and configuration independent Fortran: Portable Fortran". EEE Transactions on Software Engineering. Vaadatud Detsember 21, 2019. {{netiviide}}: kontrolli kuupäeva väärtust: |aeg= (juhend)CS1 hooldus: mitu nime: autorite loend (link)
  2. ".. discusses .. portability of .. Fortran". Vaadatud 21. detsembril 2019.
  3. "Origin: Of multiple origins. Partly a borrowing from French. Partly a borrowing from Latin. Etymons: French porter; Latin portāre. ... 1. trans. To carry, bear, or convey; to bring". Oxford English Dictionary (OED Online). Vaadatud 21. detsembril 2019.
  4. 4,0 4,1 "Porting". Vikipeedia. 30. oktoober 2019. Vaadatud 21. detsembril 2019.
  5. Dan Bunter (detsember 1984). "Dispatches / Insights From the Strategy Game Design Front". Computer Gaming World. p. 40. Vaadatud 21. detsembril 2019.