Кроссплатформенность

Кроссплатформенность (межплатформенность) — способность программного обеспечения работать с несколькими аппаратными платформами или операционными системами.

Обеспечивается благодаря использованию высокоуровневых языков программирования, сред разработки и выполнения, поддерживающих условную компиляцию, компоновку и выполнение кода для различных платформ. Типичным примером является программное обеспечение, предназначенное для работы в операционных системах Linux и Windows одновременно.

Кроссплатформенность
Swing выглядит одинаково на всех ОС.
Кроссплатформенность
Mozilla Firefox, использующий XUL, оформляет окна в стиле ОС (в данном случае — Linux).

Кроссплатформенные языки программирования

Кроссплатформенными можно назвать большинство современных высокоуровневых языков программирования. Например, Си, C++, Free Pascal, FreeBASIC, PureBasic — кроссплатформенные языки на уровне компиляции, то есть для этих языков есть компиляторы под различные платформы. Это позволяет — при надлежащем качестве кода — не переписывать основной движок программы, меняются только особые системозависимые части.

Не менее важны для кроссплатформенности стандартизованные библиотеки среды выполнения. В частности, стандартом стала библиотека языка Си (POSIX). Из крупных кроссплатформенных библиотек — Qt, GTK+, FLTK, STL, Boost, OpenGL, SDL, OpenAL, OpenCL.

Существуют кросс-компиляторы — компиляторы, генерирующие исполняемый код для платформы, отличной от той, на которой запущен сам компилятор.

Кроссплатформенные среды исполнения

PHP, Perl, Python, Tcl и Ruby — кроссплатформенные интерпретируемые языки, их интерпретаторы существуют для многих платформ.

Среды исполнения ActionScript Virtual Machine, Java Virtual Machine и .NET также кроссплатформенны, однако на их вход подаётся не исходный текст, а промежуточный код. Поэтому программы, написанные на ActionScript, Java и C#, можно запускать под разными операционными системами без предварительной перекомпиляции.

Кроссплатформенный пользовательский интерфейс

На разных операционных системах и средах — независимо от того, как технически достигнута работа в них — стандартные элементы интерфейса имеют разные размеры. Поэтому простое жёсткое позиционирование элементов интерфейса невозможно — в другой операционной системе (среде) они могут «налезать» друг на друга, «расплываться», «пьянеть». Существует несколько подходов:

  1. Единый стиль, общий для всех операционных систем, программы выглядят одинаково под всеми системами. Так работают интерфейсные библиотеки Java наподобие Swing.
    • Плюс: можно жёстко расставлять элементы управления на манер Delphi, оригинальный стиль.
    • Минус: системе приходится иметь свои экранные шрифты, и стиль отличается от стиля ОС.
  2. Самоадаптирующийся (адаптивный) интерфейс, подстраивающий сетку под реальные размеры элементов управления. Типичные примеры — Qt, wxWidgets, XUL.
    • Плюс: стандартный стиль операционной системы, очень быстрый и «скинующийся» под Windows XP, Vista и Windows 7, и некоторая автоматизация локализации.
    • Минус: чтобы собрать самоадаптирующуюся (адаптивную) сетку, требуется квалифицированный программист, а также затруднена плотная компоновка.
  3. Гибридный подход реализован в GTK+.
    • Плюс: шрифты можно брать из системы, а не «тащить» свои, а также некоторая автоматизация локализации.
    • Минус: берёт все недостатки от первых двух подходов. Стиль отличается от стиля операционной системы, затруднена плотная компоновка.

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

Условная компиляция

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

Например, браузер Mozilla Firefox имеет разные комплекты значков под разные операционные системы.

Прикладные программы

Большое количество прикладных программ также являются кроссплатформенными. Особенно это качество выражено у программ, изначально разработанных для Unix-подобных операционных систем. Важным условием их переносимости на другие платформы является совместимость платформ с рекомендациями POSIX, а также существование компилятора GCC для платформы, на которую осуществляется перенос.

Операционные системы

Современные операционные системы также часто являются кроссплатформенными. Например, операционные системы с открытым исходным кодом (в частности: NetBSD, Linux, FreeBSD, AROS) могут работать на нескольких различных аппаратных платформах. Наиболее часто это: x86, m68k, PowerPC, Alpha, AMD64, SPARC. («Эльбрус ОС» есть не что иное как глубоко доработанный для платформы «Эльбрус». Но существует «Эльбрус ОС» также доступна и для платформ «Эльбрус-SPARC», представляющей собой реализацию платформы SPARC от МЦСТ, и платформы х86.) Первый выпуск Microsoft Windows NT 4, вышедший в 1996 году, поддерживал четыре платформы (x86, Alpha, MIPS и PowerPC), в дальнейших версиях Windows NT осталась только поддержка платформы х86. Современная Microsoft Windows может работать как на платформе Intel x86, так и на Intel Itanium. (Точнее, для Itanium есть только версии Windows 2000/XP, Windows 2003 и Windows 2008, после чего поддержка Itanium была свёрнута.) Операционная система NetBSD считается самой наиболее многоплатформенной, — она портирована на большинство ныне существующих платформ.

Среды разработки

Ряд IDE, в том числе Free Pascal, Lazarus, Qt Creator, работают на разных операционных системах: Linux, Windows и других.

Эмуляция

Если программа не предназначена для исполнения (запуска) на определённой платформе, но для этой платформы существует эмулятор платформы, базовой для данной программы, то программа может быть исполнена в среде эмулятора.

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

Примечания

Ссылки

Tags:

Кроссплатформенность Кроссплатформенные языки программированияКроссплатформенность Кроссплатформенные среды исполненияКроссплатформенность Кроссплатформенный пользовательский интерфейсКроссплатформенность Условная компиляцияКроссплатформенность Прикладные программыКроссплатформенность Операционные системыКроссплатформенность Среды разработкиКроссплатформенность ЭмуляцияКроссплатформенность ПримечанияКроссплатформенность СсылкиКроссплатформенностьLinuxWindowsАппаратная платформа компьютераВысокоуровневый язык программированияОперационная системаПрограммное обеспечение

🔥 Trending searches on Wiki Русский:

СингапурДжомолунгмаАргентинаПушкин, Александр СергеевичВознесенский, Андрей АндреевичФоден, ФилСпециальная военная операцияКраснодарБекхэм, ДэвидПресли, ЭлвисПоза 69ЛиберализмБулгаков, Михаил АфанасьевичОстрые козырькиСписок государств — членов НАТОИскандер (ракетный комплекс)Алаудинов, Апти АроновичDune (игра)Маша и МедведьЗолотая ОрдаНагиев, Дмитрий ВладимировичСписок стран по индексу человеческого развития100 самых влиятельных людей в истории (книга)ДубайЕва ЭльфиПирамида (пасьянс)Один день Ивана ДенисовичаТеракт на ДубровкеФонбетСписок городов РоссииAuto.ruГАЗель БизнесКовачич, МатеоМексикаНациональная хоккейная лигаГазель (автомобиль)Слишкович, ВладимирАстанаУоттс, НаомиКарабахский конфликтАлександр IТолстой, Пётр ОлеговичСолнечная системаАлонсо, ХабиМосковский КремльШекспир, УильямТрамп, ДональдНагорно-Карабахская РеспубликаАверин, Максим ВикторовичАкиньшина, Оксана СергеевнаЧеловек в футляреСемак, Сергей БогдановичЛига чемпионов УЕФА 2023/2024Мастер и Маргарита (фильм, 2024)Федеральная служба безопасностиТроцкий, Лев ДавидовичАтомные бомбардировки Хиросимы и НагасакиСтепанов, Виктор ФёдоровичСказкаКрымДети — жертвы пороков взрослыхСпаржаПётр IIIДюна (роман)Список фильмов кинематографической вселенной MarvelБишимбаев, Валихан КозыкеевичБродский, Иосиф АлександровичЛермонтов, Михаил ЮрьевичНурмагомедов, Хабиб АбдулманаповичМлечный ПутьТаблица математических символовGoogle ПереводчикБёрсенКеосаян, Тигран ЭдмондовичЦарукян, Арман НаировичЮгославия🡆 More