Що це означає, що програмне забезпечення працює рідним чином?


27

Мені було цікаво, що це означає, що програмне забезпечення працює рідним чином. Що ж таке таке програмне забезпечення і як воно відрізняється від програмного забезпечення, яке не працює рідним чином? Як я можу дізнатися, чи буде певна частина програмного забезпечення запускатися на моєму комп'ютері? Чи існує ймовірність появи програмного забезпечення на моєму комп'ютері, який запускається автоматично?


2
"рідний" означає, що він призначений для роботи на будь-якій платформі / осі, на якій він працює
yuritsuki

Мені ні ... здається, що модераторам важко читати питання ...

5
@faB Ви розумієте, що в закритті питання не було залучено модератора?
slhck

Я визнаю, що назва запитання змусила мене подумати про різницю між запуском "програми" під "операційною системою" або самого процесора (наприклад, прямий доступ до апаратних засобів).
Breakthrough

Це не те, що це питання погано як така, але це не добре для цього сайту. Як свідчать відповіді, це не те, на що можна відповісти чисто і має ряд аргументів, що оточують його, що робить його закриття цілком доречним відповідно до FAQ.
afrazier

Відповіді:


43

Програмне забезпечення є рідною для платформи, якщо вона була розроблена для роботи на цій платформі.

Платформа зазвичай відноситься до операційної системи, але вона також може бути застосована до таких пристроїв, як Nintendo Game Boy.

Використовуючи приклад Game Boy, він отримує програмне забезпечення з картриджів. Ці картриджі містять код, який запускається рідним чином на Game Boy.

Емулятори це шар, який дозволяє програмному забезпеченню, призначеному для однієї платформи, працювати на іншому. Наприклад, є емулятори, які можуть виконувати зображення картриджів Game Boy і дозволяють вам грати в ігри Boy Boy на комп'ютері або навіть на мобільному телефоні.

A шар сумісності нагадує емулятор. Коли 64-бітні комп'ютери та операційні системи стали основним, вони мали бути сумісними з існуючими 32-розрядними технологіями. Оскільки 64-розрядні та 32-розрядні архітектури дуже різні, часто потрібний шар сумісності для запуску 32-бітового програмного забезпечення на 64-бітних машинах. Для 64-розрядних версій Microsoft Windows Microsoft потребував написання шару сумісності, щоб 32-розрядні програми все ще працювали на новій 64-бітній системі. Ось чому деякі програми часто інсталюються в папку з назвою Program Files (x86), де x86 означає "32-бітний".

Шари сумісності, як правило, більш тісні з рідною системою, ніж емулятори. VirtualBox емулює апаратне забезпечення для операційних систем * і системи, які вона емулює, не мають дуже прямої взаємодії з хост-системою. WoW64 є шар сумісності тим, що дозволяє 32-розрядним програмам працювати на 64-розрядних Windows більш інтегрованим способом. WoW64 допомагає створювати програми сумісність а не наслідуючий в ізольованому середовищі.

A бібліотека перекладів є компонентом шарів сумісності. Всякий раз, коли бінарний код працює не вбудовано, бібліотека перекладів допомагає перенаправляти іноземні, неродні виклики на рідні виклики, які система може зрозуміти. Програми складання, написані для оригінальних TI-83, можуть бути не сумісні з новими калькуляторами TI-83/84 Plus, тому що деякі дзвінки, які мали сенс в архітектурі TI-83, більше не можуть бути дійсними в TI-83/84 +. Бібліотека перекладів (ймовірно, включена в оболонки типу MirageOS ) гарантує, що дзвінки на TI-83 перейдуть до нових, оновлених місць у калькуляторах TI-83/84 +.

Незалежний від платформи код написано мовою, яка є інтерпретується щось, що зазвичай працює рідним чином. Наприклад, PHP є мовою програмування, яка інтерпретується і виконується встановленим двійковим файлом PHP, який вже був скомпільований рідним чином для операційних систем Windows, Mac і Unix. Код PHP, який пишуть веб-скрипти, не залежать від платформи, дозволяючи коду працювати на декількох операційних системах, якщо для цих операційних систем встановлено PHP.


Різне

Виправлення

* Дякую, Майкл Кьорлінг , для ловити деякі питання с це відповідь .

Інший

Різниця між "рідним" і "неродним" є не чорно-білий . (Кредити більш яскравий )


3
Мінорний нітп: (це VirtualBox, а не VirtualBox, і) VirtualBox не емулює операційну систему, він імітує обладнання . Таким чином, ви можете встановити будь-яку операційну систему, яка вам подобається, у VirtualBox (з урахуванням обмежень віртуалізації) або навіть написати власну з нуля.
a CVn

1
Рідний також часто передбачає, що він використовує набір основних бібліотек і API для базової платформи, які можуть зробити розбіжності трохи нечіткими. Існує досить багато людей, які не вважають .NET-додатки "рідними", як-от додатки Win32 API "рідні", а також деякі люди не вважають програму KDE, яка працює на робочому столі Gnome, "рідною".
afrazier

@afrazier: Це тому, що додатки .NET розроблені для роботи на "Common Language Runtime" і потребують шару сумісності для запуску в Windows. Або інший шар сумісності для запуску в Linux.
Ben Voigt

@Ben Voigt: Він як і раніше є першим учасником API, бінарники компілюються до коду x86 / amd64 (під час виконання CLR або заздалегідь з ngen), і фреймворк постачається з останніми версіями Windows. Це є частиною більшого аргументу, хоча і не дуже доречно тут.
afrazier

Virtual Box не є технічно емулятором, але віртуальним. Емулятор пропущених часів завжди емулював зовсім інше обладнання. Під віртуалізатором, OS & amp; Програмне забезпечення фактично запускається на хост-процесорі. Відмінність полягає в тому, що пристрої є віртуальними або імітуються. Це незначна технічна відмінність, що навіть веб-сайт Virtual Box вказує тут: virtualbox.org/wiki/Virtualization
Matt H

4

Рідний код зазвичай використовується як протилежний коду платформи. Якщо ви запускаєте вітчизняне програмне забезпечення, ви виконуєте компілірованний двійковий файл, а не, наприклад, скрипт, що не відповідає платформі, наприклад, javascript або байт-код Java. Скомпільований C або компільований C ++ є гарним прикладом рідного коду.


3

Є дивно пара можливих відповідей, але стандарт зазвичай це: код, складений з кодами операцій для процесора, і працює проти програмних бібліотек ОС, які завантажили комп'ютер. У цьому випадку більшість запущеного коду буде рідним кодом. Можливо, деякі контр-приклади розберуться.

Java не є рідним кодом. Він компілюється в проміжний байт-код, який потім запускається на конкретному наборі мікросхем. Java може дзвінка рідний код. Eclipse - чудовий приклад - для швидкості Java викликає деякі графічні виклики платформи.

Якщо ви працюєте ВИНО , емулятор API MS Windows, тобто не корінний код. Хоча ви виконуєте код, призначений для цього чіпсета (x86), ви не запускаєте код для операційної системи, яка її завантажила, але замінюєте бібліотеки. MAME запускає двійкові файли для різних процесорів і операційних систем.

Скрипти не є рідним кодом. Вони написані мовою більш високого рівня, яка потім повинна бути перетворена під час виконання до коду, який виконується на вашому процесорі.

Є кілька розмитих ліній. Ваш веб-браузер виконується як рідний код, але він також може запускати Java (скомпільований в байт-код) або Javascript (сценарій інтерпретується мовою).


.NET, VBA, XUL , IA-32 (принаймні, на процесорах AMD64), ...
a CVn

3

Це багато в чому залежить від контексту. Для мене "рідний" означає, що програма використовує функції та механізми, які надає операційна система, а не їхні власні. Це може стосуватися функцій інтерфейсу користувача (кнопок, вікон, діалогових вікон вибору файлів), а також функцій під капотом (наприклад, інтеграція з "Відкрити за допомогою ...").

Наприклад, у Windows рідне додаток використовує "WinAPI" для отримання тих же кнопок, смуг прокручування і т.д., як і інші програми. Вони поводяться точно так само в системних додатках (блокноті), як і в рідних сторонніх додатках.

Java-додатки часто використовують "Swing" і виглядають зовсім інакше, тому що вони використовують свої елементи управління, а не використовують системні. Перевага полягає в тому, що програма виглядає однаково на кожній ОС.

Іншим варіантом побудови графічного інтерфейсу є крос-платформний інструментарій типу "QT". QT попросить ОС намалювати елементи керування, тому вони повинні виглядати дуже рідно, незалежно від того, чи використовуєте ви Windows, OSX або Linux. Текстове поле QT буде виглядати так само, як і текстове вікно, однак це не є рідним, а лише емуляцією. Ви можете помітити невеликі відмінності в деталях (наприклад, контекстне меню, способи введення тощо).

Зверніть увагу, коли люди говорять "рідний", вони часто означають, що програма компілюється в машинний код, а не в проміжний код, який виконується у віртуальній машині (наприклад, Java і .NET). У наведених вище прикладах додаток WinAPI і QT використовують машинний код, тоді як програма Java компілюється в байт-код Java. Це використання є трохи проблематичним в даний час, тому що багато користувачів вважають, що добре виконане .NET-додаток є рідним для Windows - це просто. машинний код.

Аналогічно, я вважаю, що програма, яка використовує GTK, знає про структуру файлової системи Unix і, можливо, поставляється в пакунку .deb, яка є рідною для Ubuntu або Gnome. Є навіть перші сторони Gnome програми написані на JavaScript, що можна було б назвати рідним! Те ж саме відноситься і до Windows 8 "Метро" додатків, які можуть бути написані різними мовами, деякі зібрані, інші ні.


2

Щоб надати більш абстрактні терміни, це все одно, що дозволяти комусь вашому довірі виконувати програму на іншій мові.

  • Рідний означає, що ОС буде використовувати найшвидший, найпростіший діалект, який він знає, двійковий.

    Плюси: швидка, велика доступність мови, яка може розмовляти один з одним, оскільки вона до метала. Мінуси: безпека, складний API, обмежений можливостями ОС, і компілятори важко зробити, тому що програма, після її компіляції, звільняється в дику природу.

  • Не рідний, означає, що ваш код не буде виконаний безпосередньо ОС. Він може бути виконаний багатьма різними способами, головні з яких інтерпретуються і виконуються у віртуальній машині.

    Плюси: API практично змінюється, тому програмістам набагато простіше працювати (принаймні, коли вони дотримуються цієї мови). Мінуси: продуктивність (часто це м'яке зменшення, це рідко може стати проблемою), і не кожен дійсно буде використовувати цю мову, тому також може бути проблемою прийняти цю технологію. Безпека також може бути проблемою, але вона набагато менше контролюється. Чомусь.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.