Портовање

Из Википедије, слободне енциклопедије

У софтверском инжењерству, портовање је процес прилагођавања софтвера, тако да извршни програм може бити креиран за рачунарско окружење које је различито од оног за који је првобитно пројектовано (нпр. другачији процесор, оперативни систем, или библиотеке трећег лица). Овај термин се такође користи када се софтвер или хардвер мења како би био употребљив у различитим срединама. 

Софтвер је преносив када су трошкови портовања на нову платформу знатно мањи од цене његовог писања од нуле. Што је цена портовања програма нижа у односу на цену имплементације, софтвер се сматра више преносивим.

Етимологија[уреди]

Термин "Порт" је изведен из италијанског портаре, што значи "да носе". Када код није компатибилан са одређеним оперативним системом или архитектуром, код мора бити "пренешен" на нови систем. 

Термин се обично не примењује у процесу прилагођавања софтвера који ће покретати са мање меморије на истом процесору и оперативном систему, нити се примењује на поновном писању изворног кода на другом језику (тј. језик конверзије или превода). 

Програмери често тврде да је софтвер који они пишу преносив, што значи да је мало напора потребно да би се прилагодио новој средини. Количина напора која је стварно потребна зависи од неколико фактора, укључујући меру у којој се оригинално окружење (изворне платформе) разликује од новог окружења (циљне платформе), искуство оригиналних аутора у знању који програмски језик да конструишу и треће лице библиотека је неуобичајено да буде преносиво, а количина напора уложена од стране оригиналних аутора је само коришћење преносивих конструкција (платформе специфичних конструкција често дају јефтиније решење). 

Историја[уреди]

 Број значајно различитих процесора и оперативних система који се користе на десктопу данас је много мањи него у прошлости. Доминација x86 архитектуре значи да се већина десктоп софтвера никада не користи на другом процесору. У том истом тржишту, избор оперативних система је ефективно смањен на три: Мајкрософт Виндоус, OS X и BSD Јуникс/Линукс. Међутим, у уграђеном систему тржишта, преносивост остаје значајан проблем.

Међународни стандарди, попут оних које је прогласио ИСО, у великој мери олакшавају портовање наводећи детаље рачунарског окружења на начин којим се смањује разлика између различитих платформи стандарда у складу. Писање софтвера који остаје у границама утврђеним овим стандардима представља практичан, иако нетривијалан напор. Портовање таквог програма између две платформе за стандардизацију-компатибилну (као што су POSIX.1) може бити само питање учитавања изворног кода и рекомпајлирање на новој платформи. Међутим, практичари често сматрају да су потребне разне мање корекције, због суптилне разлике платформи. Већина стандарда пати од "сиве зоне" у којој разлике у тумачењу стандарда доводе до малих варијација са платформе на платформу. 

Такође постоји све већи број алата за олакшавање портовања, као што је ГНУ Компајлер Колекција, који обезбеђује доследне програмске језике на различитим платформама, и Аутоматска подешавања, која аутоматизује откривање мањих варијација у окружењу и прилагођавање софтвера сходно томе, пре компилације. 

Компајлери за неке програмске језике високог нивоа(нпр. Ајфел, Естерел) добијају преносивост од излаза изворног кода у неком другом високом нивоу међујезика (као што је Ц) за које платформе су доступни многи компајлери. 

Две активности везане за (али се разликују од) портовање су емулиране и косо-састављене 

Портирање компајлера[уреди]

Уместо превођења директно у машинском коду, модерни компајлери преводе на машински независан средњи код у циљу унапређења преносивости компајлера и минимизирања напора дизајна. Средњи језик дефинише виртуелну машину која може да изврши све програме писане у средњем језику (машина дефинисана са језиком и обрнуто).[1] Упутства средњих кодова су преведена на еквивалентним машинама кода секвенци од генератора кода за креирање извршног кода. Такође је могуће да прескоче генерацију машинског кода самим спровођењем виртуелне машине у машински код. Ова имплементација виртуелне машина се зове преводиоц, зато што пише у кодексу упутства средњег кода један по један и после сваког читања извршава еквивалентну секвенцу машинског кода (интерпретатор) на читању средњих инструкција директно.[2]

Коришћење средњег кода повећава преносивост компајлера, јер само машина зависи код ( тумач или генератор кода) компајлер сам по себи треба да користи на циљној машини. Остатак компајлера може да се увезе као средњи код и онда даље обрађује портовањем кода генератора или тумача, чиме се производи компајлер софтвера или директно извршење средњег кода на преводиоцу. Независни део машина може бити развијен и тестиран на другој машини (домаћин машина). То у великој мери смањује напоре дизајна, јер је потребно да се независни део машина развија само једном да створе преносни средњи код.[3]

Тумач је мање сложен и самим тим лакши за портовање од генератора кода, зато што није у стању да уради кодове оптимизације због ограниченог програмског кода (само види једну инструкцију у времену и потребан вам је низ да уради оптимизацију). Неки тумачи су изузетно једноставни за портовање, зато што дају само минималне претпоставке о скупу инструкција о основном хардверу. Као резултат, виртуелна машина је чак једноставнија од циљаног процесора.[4]

Писање извора компајлера у потпуности у програмском језику компајлер би требало да преведе , чини следећи приступ , познатији као бутстраповање комплајлера, изводљив на циљаној машини: 

  1.  Портовање преводиоца. Ово треба да буде кодирано у асемблеру кода, користећи већ постојећу асемблер на мету.
  2.  Прилагодите извор генератора кода на нову машину.
  3.  Покрените прилагођени извор помоћу преводиоца са изворног кода генератора као улаз. Ово ће генерисати машински код за генератор кода.

Тежи део кодирања оптимизације рутине се врши помоћу језика на високом нивоу уместо језика асемблер мете

 Према дизајнерима БЦПЛ језика , код који се тумачи (у случају БЦПЛ) је компактнији од машинског кода ; типично за фактор два према један. Интерпретатор кода међутим ради десетак пута спорије него код састављен на истој машини.[5]

 Дизајнери програмског језика Јава покушавају да искористе компактност преведеног кода, јер у Јава програму мора да се пренесе преко Интернета пре извршења да би могло да се почне на мети Јава виртуелне машине.

Портовање видео игара[уреди]

Портовање је такође термин који се користи када дизајн видео игре је заснован на једној платформи, било да је аркада, конзола за видео игре или персонални рачунар, претварајући покретање на другој платформи. Раније "портовање" видео игара често није било право портовање, него прерађене верзије игара. Међутим , многе игре 21. века су развијене користећи софтвер који може да избаци код за једну или више конзола као и за ПС, без потребе за стварном променом оператера. 

 Многе ране портовања претрпела су значајне проблеме у погледу квалитета играња, јер компјутери увелико разликују. Рецензије су се жалиле на портовање Епл 2 серије игара попут краш, крамбл и чомп које не користе супериорне Атари 8 - битне функције.[6] Лорд Бритиш изјавио је 1984. да Оригин систем развио компјутерске игрица за Епл 2 први пре портовања њих на Комодор 64 и Атари , јер касније машине спрајтоване и друге софистициране функције су портовале њих на Епл " далеко теже, можда чак и немогуће. Епл верзија никада неће бити урађена" .[7] Други су радили другачије. Озарк Софтскејп је, на пример , написао М. У. Л. Е. за Атари прво, зато што је преферирао развој за напредније рачунаре, уклањањем или мењањем функција као што је потребно током портовања. Таква политика није увек била могућа; Дани Бунтен је изјавио да "М. У. Л. Е. не може да се уради за Аппле ".[8]

 Аркаде савршених видео игрица су оне које су пренесене из верзије аркада на другу платформу , као што су конзоле или рачунара, без икаквих измена рада у игри. То значи да графика, звук и играње, заједно са осталим карактеристикама игре (укључујући и грешке), су идентичне верзије аркаде

" ( Конзола ) портовања " је игра која је првобитно направљен за конзолу (као што је Вии или Иксбокс 360), пре идентичне верзије створене где се може играти на личном рачунару или било која друга конзола. Овај термин је широко коришћен од стране заједнице игара. Процес портовање игре из конзоле на ПС се често сматра негативним због виших нивоа перформанса које рачунари обично недовољно користе, делимично због конзоле хардвера током њиховог рада (са играма се развијају за конзоле спецификације), док рачунари постају моћнији и хардвер се развија, али и због пренетих игара понекад се лоше оптимизују за рачунаре, или споро портују. 

Види још[уреди]

Референце[уреди]

  1. Tanenbaum (1984). стр. 3.
  2. Tanenbaum (1984). стр. 2.
  3. Richards,Whitby-Strevens 1984, Section 7.1 - Introduction. стр. 124, explains compiler portability using intermediate code.
  4. Richards,Whitby-Strevens 1984, Section 7.4 - The bootstrapping process and INTCODE. стр. 133, explains the role of the INTCODE interpreter.
  5. Richards,Whitby-Strevens 1984, Section 7.4.3 - Example. стр. 136, gives an example translation of a BCPL program into INTCODE for the interpreter.
  6. Stanton, Jeffrey; Wells, Robert P. Ph.D.; Rochowansky, Sandra; Mellid, Michael Ph.D., ed. (1984).
  7. "The CGW Computer Game Conference".
  8. Bunten, Dan (December 1984).

Литература[уреди]