Что такое нативный код
Перейти к содержимому

Что такое нативный код

  • автор:

Нативный код

Машинный код (также употребляются термины собственный код, или платформенно-ориентированный код, или родной код, или нативный код — от англ. native code ) — система команд (язык) конкретной вычислительной машины (машинный язык), который интерпретируется непосредственно микропроцессором или микропрограммами данной вычислительной машины.

Каждая модель процессора имеет свой собственный машинный язык, хотя во многих моделях эти наборы команд сильно перекрываются. Говорят, что процессор A совместим с процессором B, если процессор A полностью «понимает» машинный код процессора B. Если процессор A знает несколько команд, которых не понимает процессор B, то B несовместим с A.

«Слова» машинного языка называются машинными инструкциями. Каждая из них описывает элементарное действие, выполняемое процессором, такое как «переслать байт из памяти в регистр». Программа — это просто длинный список инструкций, выполняемых процессором. Раньше процессоры просто выполняли инструкции одну за другой, но новые суперскалярные процессоры способны выполнять несколько инструкций за раз. Прямой поток выполнения команд может быть изменён инструкцией перехода, которая переносит выполнение на инструкцию с заданным адресом. Инструкция перехода может быть условной, выполняющей переход только при соблюдении некоторого условия.

Также инструкции бывают постоянной длины (у MISC-архитектур) и диапазонной (у x86 команда имеет длину от 8 до 120 битов).

См также

  • Язык ассемблера
  • Система команд

Wikimedia Foundation . 2010 .

  • Нативное программное обеспечение
  • Натиск на Восток

Полезное

Смотреть что такое «Нативный код» в других словарях:

  • Исполняемый код — Эта статья о системе команд в целом; об инструкциях см.: Код операции (информатика). Машинный код (также употребляются термины собственный код, или платформенно ориентированный код, или родной код, или нативный код от англ. native code) система… … Википедия
  • Платформенно-ориентированный код — Эта статья о системе команд в целом; об инструкциях см.: Код операции (информатика). Машинный код (также употребляются термины собственный код, или платформенно ориентированный код, или родной код, или нативный код от англ. native code) система… … Википедия
  • Родной код — Эта статья о системе команд в целом; об инструкциях см.: Код операции (информатика). Машинный код (также употребляются термины собственный код, или платформенно ориентированный код, или родной код, или нативный код от англ. native code) система… … Википедия
  • Сравнение языков программирования — Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей. Условные обозначения … Википедия
  • Интерпретируемый язык программирования — язык программирования, в котором исходный код программы не преобразовывается в машинный код для непосредственного выполнения центральным процессором (как в компилируемых языках), а исполняется с помощью специальной программы интерпретатора. В… … Википедия
  • Машинная инструкция — Эта статья о системе команд в целом; об инструкциях см.: Код операции (информатика). Машинный код (также употребляются термины собственный код, или платформенно ориентированный код, или родной код, или нативный код от англ. native code) система… … Википедия
  • Машинный язык — Эта статья о системе команд в целом; об инструкциях см.: Код операции (информатика). Машинный код (также употребляются термины собственный код, или платформенно ориентированный код, или родной код, или нативный код от англ. native code) система… … Википедия
  • Мобильная игра — Часть серии … Википедия
  • Игры для мобильных устройств — … Википедия
  • OCaml — Objective Caml Семантика: мультипарадигменный: функциональный, объектно ориентированный, императивный Автор(ы): INRIA Релиз: 4.00.1 (5 октября … Википедия
  • Обратная связь: Техподдержка, Реклама на сайте
  • �� Путешествия

Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.

  • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
  • Искать во всех словарях
  • Искать в переводах
  • Искать в ИнтернетеИскать в этой же категории

Как вызвать нативный код?

Нативным (или машинным) кодом называется скомпилированный бинарный код. В него компилируется, например, код на C++. Java приложение может работать на любой платформе именно потому, что оно не компилируется в бинарник – вместо этого его байткод выполняется на виртуальной машине. Но порой нужно обратиться к готовой программе на другом языке, или воспользоваться специальными возможностями ОС.

Если бинарный код поставляется в виде библиотеки (.dll в Windows, .so в Unix), у вас есть два варианта:

JNI (Java Native Interface) – стандартный фреймворк взаимодействия с бинарным кодом. С ним можно в Java исходнике объявить метод без тела, а реализацию брать из бинарного файла. Простой пример использования читайте на хабре.

JNA (Java Native Access) – сторонняя open-source библиотека, ставшая стандартом де-факто. Медленнее чем JNI, но гораздо проще в использовании. В отличие от JNI не требует кодогенерации и написания вспомогательной обвязки. Несколько примеров вызова из Java кода функций бинарных библиотек можно найти на википедии.

Когда нативный код исполняемый (.exe в Windows, файл с правом x в Unix), можно запустить его отдельным процессом, как было описано ранее. Но если вы разрабатываете этот бинарный код самостоятельно, то лучше сэкономить на создании отдельного процесса, и выбрать вариант сборки в библиотеку.

Что такое нативный код?

В переводе с английского Native = Родной. И смотря в каком контексте это встречается. Если например писать приложение на Flash под Android и iOS то это считается не нативное приложение. А если же писать два приложения. Одно на Android NDK для Android и iOS SDK для iOS то эти приложения можно счтитать нативными. Понятие нативный код — код который поставляется разработчиками чего-либо. Как например весь код в Java SDK под Android считается нативным. Все библиотеки третих разработчиков уже нет. Ну как то так 🙂

6 авг 2013 в 10:31

@fori1ton, спасибо. Вы мне открыли глаза 🙂 Стока времени заблуждений. Но в тоже время код можно считать нативным по отношению к виртуальной машине?

6 авг 2013 в 10:47

@Bimawa, обычно так не делают. Есть нативнй — исполняемый на процессоре, и ненативный — исполняемый в виртуальной машине. Разве что если на Java написать виртуальную машину и запускать в ней какой-то код, то это будет ненативный код для JVM, а код самой виртуальной машины можно будет считать нативным по отношению к JVM. Но это уже изврат.

6 авг 2013 в 10:53
@fori1ton, спасибо! @nMike и Вам тоже )
6 авг 2013 в 10:55

Если говорить о window (по крайней мере об NT платформе — 2000, xp, 7,8), то в этом случае .NET — никакой не нативный. Более того, приложения, которые используют win api — также не являются нативными. Нативные только те, которые используют специальное Native API.

6 авг 2013 в 11:18

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

Понятие нативный код — код который поставляется разработчиками чего-либо. Как например весь код в Java SDK под Android считается нативным. Все библиотеки третих разработчиков уже нет.

Бред. Нативный код — код, компилируемый в машинные инструкции и выполняемый непоредственно процессором устройства. Любой код на Java не нативен по определению, так как выполняется на виртуальной машине. Нативный код могут писать как разработчики платформы, так и третьи разработчики (при помощи упомянутого Android NDK).

Отслеживать
ответ дан 6 авг 2013 в 10:41
23.4k 3 3 золотых знака 50 50 серебряных знаков 70 70 бронзовых знаков

@fori1ton, возможно я не до конца понял Ваш ответ, но IMHO утверждение Любой код на Java не нативен по определению, так как выполняется на виртуальной машине. несколько спорно, если вспомнить о такой полузабытой штуке, как PicoJava (аппаратная интерпретация Java байт-кода). — А по существу ответа, что нативным называется код, который исполняется аппаратно, я согласен (хотя иногда трудно провести границу между чистой аппаратурой, микропрограммами, гипервизором и эмуляцией некоторых команд системным ПО).

6 авг 2013 в 20:27
@avp: а ещё JIT-компиляция.
6 авг 2013 в 23:34

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

7 авг 2013 в 6:55

@KoVadim, да, и это очень напоминает JIT компиляцию, только не для байт-кода, а для машинных инструкций.

7 авг 2013 в 7:15

В одном слове «нативный» (от англ. native, «родной») недостаточно информации. Необходимо уточнение: родной для кого?

  • Для JVM родной код — байт-код, родной язык — Java (и другие).
  • Для Windows родной код — Portable Executable, родной язык — C++, Delphi и др.
  • Для процессора x86 родной код — инструкции x86, язык — ассемблер.

и т.п. Многие современные приложения выполняются на «слоеном пироге» из платформ: например, написанное на Java приложение выполняется на JVM, которая в свою очередь может выполняться под (или над?) Windows, которая выполняется на процессоре x86. Каждый слой имеет свой нативный код. Код из другого слоя для него не будет нативным, например, для Windows Java-код ненативный.

Родной язык — язык, для которого есть компилятор в родной код (для данной платформы).

Отслеживать
ответ дан 7 ноя 2015 в 21:55
Sergey Slepov Sergey Slepov
490 3 3 серебряных знака 8 8 бронзовых знаков
Бредовый ответ. Это достаточно общеизвестное понятие, чтобы в нём было достаточно информации.
7 ноя 2015 в 22:38
@Qwertiy в целом верно, если убрать последний абзац
14 ноя 2017 в 10:08
@Qwertiy, можно конкретней, с чем именно вы несогласны?
14 ноя 2017 в 16:18
@rjhdby, перечитал последний абзац. Чем он вам не понравился?
14 ноя 2017 в 16:19
@SergeySlepov тем, что я с ним в корне не согласен
14 ноя 2017 в 16:49

Обратимся к Wiki

In computing, software or data formats that are native to a system are those that the system supports with minimal computational overhead and additional components. This word is used in such terms as native mode or native code.

Something running on a computer natively means that it is running without any external layer requiring fewer software layers. For example, in Microsoft Windows the Native API is an application programming interface specific for Windows NT kernel, which can be used to give access to some kernel functions, which cannot be directly accessed through a more universal Windows API.

Нативный для среды исполнения код/язык/АПИ/Формат данных и т.д. — это такой, который понимается средой исполнения по умолчанию, без сложных надстроек. Абсолютно четкого определения нет — есть некое «общепринятое» понимание, которое может разниться от человека к человеку.

Для Windows, например, нативным является исполняемый код в формате .exe (или .com ) файла, который работает непосредственно с Win API. Для Unix систем нативным являются бинарные файлы (а, так-же, shell-скрипты внезапно), для JVM нативным является .jar (не только) файл. Т.е. если совсем просто, то нативный код — это тот, который вы скормили установленной из коробки среде исполнения(дабл клик по .exe файлу в Windows) и он исполнился, не ругаясь, что ему не хватает библиотек или фреймворков.

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

PS На ум пришла хорошая аналогия. Уровень знания иностранного языка определяется экзаменами по нему с выставлением оценки: A1,A2,B1,B2,C1,C2. Но есть и еще один уровень владения языком — native. Означает он что человек с детства живет в данной языковой среде, говорит на нем и думает(!) на нем. Уровень native не говорит о грамотности человека, зачастую native хуже знает правила языка, чаще ошибается в грамматике и пунктуации, чем С2, но он для него РОДНОЙ.

Что значит «нативный»? Объясняем простыми словами

Пишем про дизайн и искусство. Всё, что вы хотели знать о настоящем, прошлом и будущем визуальной культуры.

Термин «нативный» встречается и в дизайне, и в айти. Он означает одно и то же? Или в каждой области подразумевается своё значение?

Простыми словами объясняют, что такое «нативный», эксперт в дизайне Артём Кожевников и эксперт в разработке Николай Соцкий.

Артём Кожевников

Дизайн-директор диджитал-агентства бета.

Артём Кожевников о «нативном» на дизайнерском

Когда дизайнеры работают над приложениями или страницами в вебе, будь то сервис или концептуальный сайт с уникальной графикой и сторителлингом, они проектируют графический интерфейс — то, с чем непосредственно взаимодействует человек внутри страницы или приложения. А также — составляют сценарии пользовательского опыта: как всё будет устроено и как станет работать.

Между этими двумя задачами есть значительная разница. Когда интерфейс нарисован, его можно увидеть и оценить в статике. А вот процесс взаимодействия можно понять лишь в динамике, пользуясь продуктом.

И то и другое — статичный интерфейс и динамичный процесс — может быть нативным и ненативным.

Что такое «нативный» вообще

Нативный, если простыми словами, означает «родной». И в таком значении мы используем слово «нативный» гораздо чаще, чем думаем. Например, когда говорим «родной шнурок от iPhone» — мы как раз имеем в виду оригинальный, подходящий, нативный провод из системы устройств Apple, обычно приобретённый в одной коробке с телефоном.

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

Будем рассматривать это свойство графики, интерфейсов и процессов в разрезе какого-то одного условного проекта.

Что такое «нативный» в графике

  • Если иллюстрации, графика или motion в проекте выполнены в одном стиле, то можно сказать, что по отношению к этому стилю они нативны.

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

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

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

Когда графика не выглядит нативной

Снова рассмотрим понятие родства в двух отношениях.

  • Графика и иллюстрации могут быть ненативны по отношению сами к себе в рамках одного проекта. Это сразу бросается в глаза: картинки не дружат между собой и вставлены будто наугад. Это разрушает визуальную целостность проекта.

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

Что такое нативный в интерфейсах

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

В веб-дизайне, дизайне приложений и сервисов принято объединять элементы интерфейса в дизайн-системы. В таком случае любой элемент интерфейса может быть как нативен по отношению к стилю дизайн-системы, так и ненативен по отношению к нему.

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

В целом, на этом скриншоте весь интерфейс состоит из нативных элементов дизайн-системы Material Design.

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

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

Что такое «ненативный» в интерфейсах

Бывает так, что дизайнеры не следуют правилам дизайн-системы, и в новых интерфейсах возникают рассогласованные по стилю элементы. В таком случае элементы интерфейса будут ненативны по отношению к применяемой дизайн-системе и не будут выглядеть как родственники. Это проблема: ненативность затрудняет пользовательский опыт и плохо влияет на ощущения от продукта.

Что такое нативный и ненативный пользовательский опыт или процесс

Если кратко, то нативный пользовательский опыт — это известный, родной сценарий того, как ведёт себя интерфейс при взаимодействии с ним.

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

Например, веб-страница может скроллиться вверх, а не вниз. Или ссылка будет работать не по клику, а по выделению, или просто по наведению курсором на неё.

Итого

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

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

Николай Соцкий

CEO агентства мобильной разработки InstaDev. Преподаёт мобильную iOS-разработку в Skillbox.

Николай Соцкий о «нативном» на айтишном

Когда про приложения говорят «нативный», имеют в виду английское слово native. Буквальный перевод — «родной», в нашем случае — родной для конкретной мобильной платформы.

Что такое мобильная платформа?

В данный момент есть только две значимые мобильные платформы — iOS и Android. У каждой из них есть:

  • Свои особенности по процессорам и поддерживаемой периферии.
  • Свои операционные системы, в честь которых и названы платформы.
  • Свои инструменты для создания приложений — IDE, интегрированная среда разработки. Базовым для Android является Android Studio, а для iOS — Xcode.
  • Свои наборы библиотек для работы с пользовательским интерфейсом и функциями устройства — геолокацией, управлением экраном, громкостью звука, камерой и так далее.
  • Свои языки программирования. Основной для Android — это Kotlin, а для iOS — Swift.

Что такое нативные приложения?

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

Основные библиотеки для построения UI — это UIKit, SwiftUI, Jetpack Compose. А для работы с возможностями геолокации используются Core Location и LocationManager.

Какая альтернатива есть у нативных приложений?

Если нативные приложения выделили в отдельную группу, значит, есть альтернатива. В чём она заключается?

Альтернатива нативным — это приложения, построенные на кросс-платформенных фреймворках.

Основные кросс-платформенные фреймворки сейчас — это:

  • Flutter,
  • Kotlin Multi Platform,
  • ReactNative,
  • Xamarin.

Суть всех кросс-платформенных фреймворков в том, чтобы упростить разработчику задачу делать одно и то же приложение на обе основные мобильные платформы. А ещё некоторые из кросс-платформенных фреймворков используют для создания web-приложений, работающих в браузере.

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

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

За удобство приходится платить. У кросс-платформенной разработки есть минусы:

  • Приложения могут работать медленнее, чем нативные.
  • Поддерживаются не все возможности нативных библиотек.
  • Есть ограничения на UI.

В итоге

Нативные приложения — это приложения, разработанные для конкретной мобильной платформы с использованием родного для неё способа разработки.

Нативные программисты — те, кто умеет такие приложения делать.

Альтернатива нативной разработке — кросс-платформенная. Она позволяет увеличить скорость работы, но имеет и свои ограничения.

Больше интересного про дизайн в нашем телеграм-канале. Подписывайтесь!

Читайте также:

  • Что такое маска? Объясняем простыми словами
  • Что такое фрейм простыми словами
  • Что такое модуль простыми словами
  • Кто такой Flutter-разработчик и что он должен уметь
  • Android-разработчик: что умеет, сколько получает, как им стать

Расположение элементов интерфейса: их композиция и правила этого композиционного построения.

Правила дизайн-системы создаются командой дизайнеров по ходу проекта. Целостная дизайн-система обычно возникает вокруг законченного продукта и публикуется как источник знаний для тех дизайнеров, которые хотят что-то в продукт добавить.

Курс

Профессия Графический дизайнер

Вы с нуля получите востребованную профессию на стыке творчества и IT. Научитесь работать в популярных графических редакторах — от Illustrator до Figma. Добавите в портфолио плакаты, логотипы, дизайн упаковки и другие сильные проекты.

Сможете начать зарабатывать уже с 4-го месяца курса.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *