~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 0F7616E364E20BF3128DFE18058AF4EC__1712016240 ✰
Заголовок документа оригинал.:
✰ Bytecode - Wikipedia ✰
Заголовок документа перевод.:
✰ Байткод — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Intermediate_code ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/0f/ec/0f7616e364e20bf3128dfe18058af4ec.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/0f/ec/0f7616e364e20bf3128dfe18058af4ec__translat.html ✰
Дата и время сохранения документа:
✰ 15.06.2024 02:43:45 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 2 April 2024, at 03:04 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Байткод — Википедия Jump to content

Байт-код

Из Википедии, бесплатной энциклопедии
(Перенаправлено из промежуточного кода )

Байт-код (также называемый переносимым кодом или p-кодом) [ нужна цитата ] ) — это форма набора команд , предназначенная для эффективного выполнения программным интерпретатором . В отличие от человекочитаемого [1] исходный код , байт-коды — это компактные числовые коды, константы и ссылки (обычно числовые адреса), которые кодируют результат синтаксического анализа компилятора и выполнения семантического анализа таких вещей, как тип, область действия и глубина вложенности программных объектов.

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

Поскольку инструкции байт-кода обрабатываются программным обеспечением, они могут быть сколь угодно сложными, но, тем не менее, часто похожи на традиционные аппаратные инструкции: машины с виртуальным стеком являются наиболее распространенными, но машины с виртуальными регистрами . также были построены [2] [3] Различные части часто могут храниться в отдельных файлах, подобно объектным модулям , но динамически загружаться во время выполнения.

Исполнение [ править ]

Программа с байт-кодом может быть выполнена путем анализа и непосредственного выполнения инструкций по одной. Этот вид интерпретатора байт-кода очень портативен. Некоторые системы, называемые динамическими трансляторами или транслируют байт-код в машинный код JIT-компиляторами, при необходимости во время выполнения . Это делает виртуальную машину аппаратно-зависимой, но не теряет переносимости байт-кода. Например, код Java и Smalltalk обычно хранится в формате байт-кода, который затем обычно компилируется JIT для преобразования байт-кода в машинный код перед выполнением. Это приводит к задержке перед запуском программы, когда байт-код компилируется в машинный код, но значительно повышает скорость выполнения по сравнению с непосредственной интерпретацией исходного кода, обычно примерно на порядок (в 10 раз). [4]

Из-за преимущества в производительности сегодня многие реализации языков выполняют программу в два этапа: сначала компилируют исходный код в байт-код, а затем передают байт-код виртуальной машине. Существуют виртуальные машины на основе байт-кода для Java , Raku , Python , PHP , [а] Tcl , mawk и Forth (однако Forth редко компилируется с помощью байт-кодов таким способом, а вместо этого его виртуальная машина более универсальна). Вместо этого реализация Perl и Ruby 1.8 работает путем обхода представления абстрактного синтаксического дерева, полученного из исходного кода.

Совсем недавно авторы V8 [1] и Дарт [7] поставили под сомнение представление о том, что для быстрой и эффективной реализации виртуальной машины необходим промежуточный байт-код. Обе эти реализации языка в настоящее время выполняют прямую JIT-компиляцию из исходного кода в машинный код без посредника в виде байт-кода. [8]

Примеры [ править ]

(  дизассемблировать   '  (  лямбда   (  x  )   (  напечатать   x  ))) 
 ;   разборка для (LAMBDA(X) 
 ;   2436F6DF: 850500000F22 ТЕСТ EAX, [#x220F0000] ;   точка входа для анализа без аргументов 
 ;   E5: 8BD6 MOV EDX, ESI 
 ;   E7: 8B05A8F63624 MOV EAX, [#x2436F6A8] ;   #<объект FDEFINITION для PRINT> 
 ;   ЭД: B904000000 MOV ECX, 4 
 ;   F2: FF7504 НАЖМИТЕ DWORD PTR [EBP+4] 
 ;   F5: FF6005 JMP DWORD PTR [EAX+5] 
 ;   F8: CC0A ПЕРЕРЫВ 10 ;   ловушка ошибок 
 ;   FA: 02 БАЙТ #X02 
 ;   ФБ: 18 БАЙТ #X18 ;   НЕВЕРНЫЙ-АРГ-ОШИБКА-СЧЕТА 
 ;   FC: 4F БАЙТ #X4F ;   ЭКХ 
Скомпилированный код можно анализировать и исследовать с помощью встроенного инструмента отладки низкоуровневого байт-кода. Инструмент можно инициализировать из оболочки, например:
>>>  import   dis   # "dis" - Дизассемблер байт-кода Python в мнемонику. 
  >>>  дис  .   dis  (  'print("Привет, мир!")'  ) 
 1 0 LOAD_NAME 0 (печать) 
 2 LOAD_CONST 0 ("Привет, мир!") 
 4 CALL_FUNCTION 1 
 6 RETURN_VALUE 

См. также [ править ]

Примечания [ править ]

  1. ^ В PHP 8 реализована компиляция «точно в срок» , [5] [6] и раньше, хотя он не был включен в версии по умолчанию, были такие опции, как HHVM . Для более старых версий PHP: хотя коды операций PHP генерируются каждый раз при запуске программы и всегда интерпретируются, а не компилируются «точно в срок» .

Ссылки [ править ]

  1. ^ Перейти обратно: а б «Динамическая генерация машинного кода» . Google Inc. Архивировано из оригинала 05 марта 2017 г. Проверено 21 февраля 2023 г. {{cite web}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
  2. ^ «Реализация Lua 5.0» . (Примечание. Здесь используется виртуальная машина на основе регистров.)
  3. ^ «Дальвик ВМ» . Архивировано из оригинала 18 мая 2013 г. Проверено 29 октября 2012 г. (Примечание. Эта виртуальная машина основана на регистрах.)
  4. ^ «Байт-код против машинного кода» . www.allaboutcomputing.net . Проверено 23 октября 2017 г.
  5. ^ О'Финни, Мэтью Вейер. «Изучение нового JIT-компилятора PHP» . Зенд от Perforce . Проверено 19 февраля 2021 г.
  6. ^ «PHP 8: JIT — stackter.io» . шитье.io . Проверено 19 февраля 2021 г.
  7. ^ Лойч, Флориан. «Почему не виртуальная машина с байт-кодом?» . Google . Архивировано из оригинала 12 мая 2013 г.
  8. ^ «Миф о JavaScript: JavaScript нуждается в стандартном байт-коде» . 2ality.com .
  9. ^ Г., Адам Ю. (11 июля 2022 г.). «Беркли Паскаль» . Гитхаб . Проверено 8 января 2022 г.
  10. ^ «CLHS: Функция РАЗБОРКА» . www.lispworks.com .
  11. ^ «Настройка производительности и советы» . lispookbook.github.io .
  12. ^ «Реализация языка программирования Icon» (PDF) . Архивировано из оригинала (PDF) 5 марта 2016 г. Проверено 9 сентября 2011 г.
  13. ^ «Внедрение Icon и Unicon в сборнике» (PDF) . Архивировано (PDF) из оригинала 9 октября 2022 г.
  14. ^ Пол, Матиас Р. (30 декабря 2001 г.). «Внутренняя структура KEYBOARD.SYS» . Группа новостей : comp.os.msdos.programmer . Архивировано из оригинала 9 сентября 2017 г. Проверено 17 сентября 2016 г. […] Фактически формат в основном одинаков в MS-DOS 3.3–8.0, PC DOS 3.3–2000, включая русские, литовские, китайские и японские выпуски, а также в Windows NT, 2000 и XP […] . Есть незначительные различия и несовместимости, но общий формат с годами не изменился. […] Некоторые записи данных содержат обычные таблицы […] Однако большинство записей содержат исполняемый код , интерпретируемый каким-то интерпретатором p-кода во время * исполняния *, включая условные переходы и тому подобное. Вот почему драйвер KEYB занимает такой огромный объем памяти по сравнению с драйверами клавиатуры с табличным управлением, которые можно выполнить за 3–4 КБ, получая тот же уровень функций, за исключением интерпретатора. […]
  15. ^ Мендельсон, Эдвард (20 июля 2001 г.). «Как отобразить евро в MS-DOS и Windows DOS» . Отображение символа евро в полноэкранном режиме MS-DOS (включая полноэкранный режим DOS в Windows 95 или Windows 98). Архивировано из оригинала 17 сентября 2016 г. Проверено 17 сентября 2016 г. […] Матиас [Р.] Пол […] предупреждает, что IBM PC DOS версия драйвера клавиатуры для использует некоторые внутренние процедуры, которые не распознаются драйвером Microsoft , поэтому, если возможно, вам следует использовать версии IBM для обеих клавиш KEYB. .COM и KEYBOARD.SYS вместо смешивания версий Microsoft и IBM […] (Примечание. Под «процедурами» здесь подразумеваются некоторые дополнительные байт-коды в файле IBM KEYBOARD.SYS, которые не поддерживаются версией драйвера KEYB от Microsoft.)
  16. ^ «Патент США 6 973 644» . Архивировано из оригинала 5 марта 2017 г. Проверено 21 мая 2009 г.
  17. ^ Спецификации Microsoft C Pcode . п. 13. Multiplan был скомпилирован не в машинный код , а в своего рода байт-код, который запускался интерпретатором , чтобы сделать Multiplan переносимым на самое разнообразное оборудование того времени. Этот байт-код отличает машинный формат с плавающей запятой для вычислений и внешний (стандартный) формат, который представляет собой двоично-десятичный формат (BCD). Инструкции PACK и UNPACK преобразуются между ними.
  18. ^ «Установка и администрирование R» . cran.r-project.org .
  19. ^ «Обработчик байт-кода SQLite» . Архивировано из оригинала 14 апреля 2017 г. Проверено 29 августа 2016 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 0F7616E364E20BF3128DFE18058AF4EC__1712016240
URL1:https://en.wikipedia.org/wiki/Intermediate_code
Заголовок, (Title) документа по адресу, URL1:
Bytecode - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)