Портирование - Porting


Из Википедии, свободной энциклопедии

В программной инженерии , портирование это процесс адаптации программного обеспечения с целью достижения той или иной форме исполнения в вычислительной среде, отличной от той , что данная программа (предназначена для такого исполнения) был первоначально разработан для (например , другой процессор , операционная система , или третья сторона библиотека ). Термин также используется , когда программное обеспечение / аппаратные средства изменены , чтобы сделать их пригодными для использования в различных средах.

Программное обеспечение является портативным , когда стоимость его переноса на новую платформу, значительно меньше , чем стоимость написания ее с нуля. Чем ниже стоимость переноса программного обеспечения, относительно его стоимости реализации, тем более портативной она называется.

Этимология

Термин «порт» является производным от латинского portāre , что означает «нести». Если код не совместим с конкретной операционной системы или архитектуры , код должен быть «осуществляется» на новую систему.

Термин обычно не применяется к процессу адаптации программного обеспечения для работы с меньшим объемом памяти на том же процессоре и операционной системы, а также не применяется к перезаписи исходного кода в другом языке (то есть преобразования языка или перевода).

Разработчики часто утверждают , что программное обеспечение , они пишут это портативное , что означает , что небольшое усилие требуется , чтобы адаптировать его к новым условиям. Количество усилий фактически необходимо , зависит от нескольких факторов, в том числе степени , в которой исходная среда ( исходная платформа ) отличается от новой среды ( целевая платформа ), опыт первоначальных авторов в зная, язык программирования , конструкцию и третьей стороны библиотечные вызовы вряд ли будут портативны, и количество усилий , вкладываемые первоначальными авторами только с помощью переносных конструкций (платформы конкретных конструкций часто обеспечивают более дешевое решение).

история

Число существенно различных систем процессоров и операционных , используемых на рабочем столе сегодня гораздо меньше , чем в прошлом. Преобладание x86 архитектуры означает , что большинство настольных ПК никогда не портированы на другой процессор. В том же рынке, выбор операционных систем фактически был сокращен до трех: Microsoft Windows , MacOS и Linux . Однако, в встраиваемых систем и мобильных рынков, портативность остается серьезной проблемой, с ARM является широко используемой альтернативой.

Международные стандарты, такие как обнародованные ISO , значительно облегчают перенос путем уточнения деталей вычислительной среды таким образом , что помогает уменьшить различия между различными стандартами соответствующих требованиям платформ . Написание программного обеспечения , которое остается в пределах , определенных этими стандартами представляет собой практическое хотя и нетривиальным усилия. Портирование такой программы между двумя совместимыми со стандартом платформами (такими как POSIX.1 ) может быть просто вопросом загрузки исходного кода и перекомпиляции его на новой платформе. Тем не менее, практикующие часто обнаруживают , что различные мелкие исправления необходимы, из - за тонкие различия платформы. Большинство стандартов страдают от «серых зон» , где различие в интерпретации стандартов приводит к малым изменениям с платформы на платформу.

Там также существует все большее количество инструментов для облегчения портирования, таких как GNU Compiler Collection , которая обеспечивает последовательные языки программирования на различных платформах, и Autotools , которая автоматизирует обнаружение незначительных изменений в окружающей среде и адаптирует программное обеспечение соответственно перед компиляцией ,

Составители для некоторых языков программирования высокого уровня (например , Eiffel , Esterel ) получить портативность путем вывода исходного кода в другом высоком уровне промежуточного языка (таких как  C ) , для которых компиляторы для многих платформ , как правило , доступны.

Два мероприятия , связанное с (но отличным от) портирований являются эмулировать и кросс-компиляция .

Портирование компиляторы

Вместо того , чтобы переводить непосредственно в машинный код , современные компиляторы переводят к машине независимого промежуточного кода с целью повышения переносимости компилятора и свести к минимуму усилия по проекту. Промежуточный язык определяет виртуальную машину , которая может выполнять все программы , написанные на промежуточном языке (машина определяется его язык , и наоборот). Промежуточные указания кода переводятся в эквивалентные последовательности машинного кода с помощью генератора кода для создания исполняемого кода . Кроме того , можно пропустить генерацию машинного кода, фактически реализует интерпретатор или JIT для виртуальной машины.

Использование промежуточного кода повышает переносимость компилятора, потому что только машина зависимый код (интерпретатор или генератор кода) компилятор сам должен быть перенесен на целевую машину. Остальная часть компилятора может быть импортированы в качестве промежуточного кода , а затем дополнительно обрабатывают с помощью перенесенного генератора кода или переводчика, таким образом производя программное обеспечение компилятора или непосредственно выполнение промежуточного кода на переводчике. Машина независимая часть может быть разработана и испытана на другую машину (The хост - машине ). Это значительно сокращает усилия по проекту, так как машина независимая часть должна быть разработана только один раз для создания портативного промежуточного кода.

Переводчик является менее сложным и, следовательно, легче переносить, чем генератор кода, так как он не в состоянии сделать код оптимизации из-за ограниченного зрения программного кода (он видит только одну инструкцию за один раз, и вам нужна последовательность, чтобы сделать оптимизация). Некоторые переводчики очень легко в порт, потому что они только делают минимальные предположения о наборе команд базового оборудования. В результате, виртуальная машина даже проще, чем целевой процессор.

Запись источников компилятора полностью на языке программирования компилятора предполагается перевести, делает следующий подход, более известный как компилятор самозагрузка , осуществимый на целевой машине:

  1. Порт переводчик. Это должно быть закодировано в ассемблере , используя уже имеющийся ассемблер на цели.
  2. Адаптировать источник генератора кода для новой машины.
  3. Выполнить адаптированный источник с помощью переводчика с источником генератора кода в качестве входных данных. Это будет генерировать машинный код для генератора кода.

Трудная часть кодирования подпрограммы оптимизации делается с помощью языка высокого уровня вместо языка ассемблера цели.

По словам проектировщиков BCPL языка, интерпретируемый код (в случае BCPL) является более компактным , чем машинный код; как правило , с коэффициентом два к одному. Интерпретируемый код , однако работает примерно в десять раз медленнее , чем скомпилированный код на той же машине.

Проектировщики языка программирования Java пытаются воспользоваться компактности истолковано кода, поскольку программа Java может должны быть переданы через Интернет , прежде чем выполнение может начаться цели виртуальной машины Java .

Портирование видеоигр

Переносимость также термин , используемый , когда видео игры , предназначенной для запуска на одной платформе, будь то аркада , игровую приставку или персональный компьютер , преобразуется работать на другой платформе. Ранее видеоигры «порты» часто не были истинными портами, а переработан версии игр. Тем не менее, многие видео 21 - го века игры разрабатываются с использованием программного обеспечения (часто в C ++ ) , который может выходной код для одного или нескольких консолей, а также для ПК без необходимости фактического портирования (вместо полагающегося на общем портировании отдельных компонентов библиотеков ).

Многие ранние порты понесли значительные проблемы с качеством игры , поскольку компьютеры значительно отличались. Гэрриот заявил в 1984 году в Origins Game Fair , что Origin Systems разработала компьютерные игры для серии Apple II первый затем портированы их Commodore 64 и Atari 8-битном , так как последняя машина спрайты и другие сложные функции сделали перенос из них в компании Apple " гораздо труднее, может быть , даже невозможно». Отзывы жаловались на порты , которые пострадали от «Яблока conversionitis», сохранив «паршивый звук и черно-бело-зелено-фиолетовых график» в компании Apple; после заявления Гэрриот, в когда Дэн Bunten спросил «Atari и Commodore людей в аудитории, вы счастливы с Apple , переписывает?» зрители кричали «Нет!» Гэрриот ответил, «[иначе] версия Apple , никогда не будет сделано. С точки зрения издателя зрения , что это не деньги мудрым».

Другие работали по- разному. Озакр Softscape , например, писал MULE для Atari первых , потому что он предпочел разработать для самых современных компьютеров, удаление или изменение функций по мере необходимости в процессе портирования. Такая политика не всегда возможно; Bunten заявил , что «MULE не может быть сделано для компании Apple», и что не-Atari версии Семь городов золота уступали.

Когда игра упоминаются как «аркад совершенным», это означает , что игра была перенесена из аркадной версии на другую платформу, например , в качестве консоли или компьютера, без каких - либо существенных изменений в выработки игры. Это означает , что графика, звук и геймплей , наряду с другими характеристиками игры ( в том числе ошибки), является верной аркадной версией. Это термин в основном используется профессиональными критиками , а иногда, но не всегда, значит игра 100% идентичны. Это обычно означает , что различия могут быть незначительными (например, более длительное время загрузки), или просто , что порт , возможно, был один , который сохранился опыт оригинальной игры больше всего.

«(Консоль) порт» это игра , которая изначально была сделана для консоли (например , как Wii или Xbox 360 ) до одинаковой версии создается которые могут быть воспроизведены на персональном компьютере или любой другой консоли. Этот термин широко используется в игровом сообществе. Процесс портирования игры с консоли на ПК часто рассматриваются негативно из - за более высокие уровни производительности , что компьютеры обычно имеют быть малоиспользуемыми, частично из - за утешать оборудование фиксируются на протяжении всей их пробега (с играми , которые разрабатываются для консольных спецификации), в то время как компьютеры становятся все более мощными , как аппаратное обеспечение развивается, но и из - за перенесенные игры иногда быть плохо оптимизированы для ПК, или лениво портированы. В то время как в целом аналогичны, архитектурные различия могут существовать , например , как использование единой памяти на консоли.

Смотрите также

Заметки

Рекомендации

  • Мартин Ричардс и Колин Уитби-Strevens (1984): BCPL, язык и его компилятор. ISBN  0-521-28681-6 .
  • Таненбаум (1984): Структурная компьютерная организация десятая печать. ISBN  0-13-854605-3 .