Portering

Portering (engelsk term ) , i informatikk , er en prosess med transponering, noen ganger til og med med modifikasjoner, av en programvarekomponent , rettet mot å la den brukes på en annen plattform enn den originale. En port lages når programvaren er tilpasset på en eller annen måte, ikke når kildekoden er fullstendig omskrevet til et annet programmeringsspråk .

Portabilitet er egenskapen til en programvare (derfor kalt portabel ) at den enkelt kan porteres, med en mye lavere innsats enn det ville koste å gjenskape de samme funksjonene fra bunnen av på nye plattformer. Noen ganger indikerer portabilitet på en mest mulig generell måte uavhengigheten i utførelsesfasen fra plattformen som brukes.

To aktiviteter relatert til, men atskilt fra, portering er emulering og krysskompilering eller krysskompilering .

Beskrivelse

Portering kan være en kompleks og kostbar aktivitet ; dette avhenger av den teknologiske "avstanden" mellom kildemiljøet og målmiljøet, av typen programvarekomponent som skal "bringes" og av verktøyene den ble bygget med.

En programvarekomponent sies å være bærbar hvis det er mulig å portere den (spesielt hvis den er enkel og rimelig med tanke på arbeidsressurser); i denne forstand kan portabilitet betraktes som et spesielt tilfelle av gjenbruk av programvare . Ekstremtilfellet er det der en programvarekomponent kan gjenbrukes på forskjellige plattformer uten at dette involverer noen modifikasjon , og i dag har vi en tendens til å bruke begrepet portabilitet i denne siste betydningen, som på maskinvare- eller systemfeltet også kalles interoperabilitet .

I dagens scenario, der datamaskiner av alle slag er i stand til å kommunisere og utveksle data og programmer via Internett , er portabilitet ofte en avgjørende faktor i valg av teknologier, metoder og verktøy for programvareproduksjon. Samtidig spiller tydeligvis fremveksten av standarder som de som er kunngjort av ISO og ANSI (f.eks. angående datalagringsformater eller programmeringsspråk ), og den påfølgende konvergensen av teknologier og informasjonssystemer med hensyn til i det minste noen aspekter av deres funksjon. til fordel for programvareportabilitet generelt.

Det finnes et stort antall verktøy som hjelper portering, for eksempel GCC , som lar deg kompilere forskjellige språk under forskjellige arkitekturer, og autoconf , som før kompilering automatiserer søket etter de små forskjellene som kan hindre deg i å kompilere kilde og tilpasser programmet deretter.

Årsaker

Porteringsoperasjonen , dvs. opprettelsen (skrivingen) av en port, kan være nødvendig på grunn av forskjellene mellom CPU -ene , de forskjellige grensesnittene ( Applikasjonsprogrammeringsgrensesnitt API) til operativsystemene , maskinvaremangfoldet eller på grunn av subtile inkompatibiliteter implementeringen av programmeringsspråket på målmiljøet (det som programmet skal kompileres på). I tillegg til de mest kjente årsakene, kan portering forespørres når programmereren mener at kildekoden ikke er nøye valgt, og følgelig ikke er egnet for det tiltenkte formålet.

Eksempel

Selv om det er mange nyanser i betydningen som tilskrives begrepet "portabilitet" i forskjellige sammenhenger, er minst to verdt å understreke: dataportabilitet og programportabilitet .

Dataportabilitet

Det avhenger av formatet som dataene er lagret i filen . For eksempel regnes en tekstfil som er lagret som en sekvens av ASCII- koder generelt som bærbar, ettersom denne typen koding nå er (nesten) universelt adoptert av datamaskinprodusenter.

Programportabilitet

Portabiliteten til programmer avhenger i hovedsak av programmeringsspråket som brukes. Noen språk kan ikke betraktes som bærbare (dvs. de tillater ikke skriving av bærbare programmer) av den enkle grunn at for noen miljøer er det ingen språktolk eller kompilator ; eller fordi kompilatorene eller tolkene som er tilgjengelige i forskjellige miljøer har noen mer eller mindre subtile forskjeller i syntaksen de aksepterer eller i semantikken de tilskriver noen konstruksjoner; slik at et program som fungerer riktig på én maskin kan vise mer eller mindre alvorlige funksjonsfeil, eller til og med mislykkes i å kompilere , på en annen.

Dette siste problemet kan løses ved å publisere en språkstandard , eller en beskrivelse av den så presis og entydig som mulig, eventuelt administrert av et "autoritativt" organ som har som oppgave å bekrefte at kompilatorer og tolker følger denne beskrivelsen. Et kjent eksempel i denne forstand er C-språket , hvorav de ga en standard først ANSI og deretter ISO . Følgelig er C-programmer bærbare i den forstand at de kan kompileres i ethvert miljø (takket være den vanlige API -en), og oppnår åpenbart forskjellige maskinspråkprogrammer , men viser semantisk ekvivalent oppførsel.

Merk at selv om C og C ++ er bærbare språk, utgjør mangfoldet av kompilatorene til de to programmeringsspråkene en rekke portabilitetsproblemer. Bare det faktum å ha et program i C eller i C++ garanterer ikke dets portabilitet, og derfor er det ofte nødvendig å gjøre en ekstra innsats for å overvinne forskjellene mellom de to systemene og mellom kompilatorene.

En mer radikal form for portabilitet tilbys av tolkede språk, åpenbart under forutsetning av at det finnes tolker for de ulike interessekretsene, og at disse tolkene viser tilsvarende oppførsel (f.eks. i samsvar med en standard). I dette tilfellet krever portering av et program ikke engang rekompilering. Dette er for eksempel tilfellet med Java ; Java-programvare kan kjøres i alle miljøer der den såkalte Java virtuelle maskinen er installert (nærmere bestemt JRE, Java Runtime Environment , som kan lastes ned gratis fra Oracle-nettstedet). Et annet aspekt ved Java-portabilitet er det som gjør det mulig å sette inn små Java-programmer ( applets ) på nettsider som er ment å vises av forskjellige nettlesere som kjører på helt forskjellige maskiner.

Relaterte elementer