Может Ruby, PHP, или Perl создает предварительно скомпилированный файл для кода как Python?

Это то, что вы ищете?

alert(document.doctype.publicId);
20
задан nopole 12 May 2013 в 06:09
поделиться

11 ответов

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

YARV всегда компилируется в байт-код перед выполнением кода, однако обычно это делается только в памяти . Есть способы выгрузить байт-код на диск. Однако в настоящий момент нет возможности прочитать его в . Это изменится в будущем: ведется работа над верификатором байт-кода для YARV, и как только это будет сделано, байт-код можно будет безопасно загрузить в виртуальную машину, не опасаясь повреждения. Кроме того, разработчики JRuby указали, что они готовы реализовать эмулятор виртуальной машины YARV внутри JRuby , после стабилизации формата байт-кода YARV и верификатора, чтобы вы могли загрузить байт-код YARV в JRuby. (Обратите внимание, что эта версия устарела .)

Rubinius также всегда компилируется в байт-код, и он имеет формат для скомпилированных файлов ( .rbc ] файлов, аналогичных файлам JVM .class ) и говорится о формате архива байт-кода (файлы .rba , аналог файлов JVM .jar ). Есть шанс, что Rubinius может реализовать эмулятор YARV, если развертывание приложений в виде байт-кода YARV когда-нибудь станет популярным. Кроме того, разработчики JRuby указали, что они готовы реализовать эмулятор байт-кода Rubinius внутри JRuby , если байт-код Rubinius станет популярным способом развертывания приложений Ruby. (Обратите внимание, что эта версия устарела .)

XRuby - это чистый компилятор, он компилирует исходный код Ruby прямо в байт-код JVM (файлы .class ). Вы можете развернуть эти файлы .class , как и любое другое приложение Java.

JRuby начинал как интерпретатор, но в нем есть как JIT-компилятор, так и AOT-компилятор ( jrubyc ), который может компилировать исходный код Ruby в байт-код JVM (файлы .class ). Кроме того, ведется работа по созданию нового компилятора, который может компилировать (с аннотациями типов) код Ruby в байт-код JVM , который на самом деле выглядит как класс Java и может использоваться из кода Java без препятствий.

Ruby.NET - это чистый компилятор, который компилирует исходный код Ruby в байт-код CIL (PE .dll или . exe файлов). Их можно развернуть так же, как и любое другое приложение CLI.

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

BlueRuby автоматически преобразует исходный код Ruby в BRIL (промежуточный язык BlueRuby), который по сути представляет собой сериализованное дерево синтаксического анализа. (Подробнее см. Blue Ruby - виртуальная машина Ruby в SAP ABAP (PDF).)

Я думаю (но я определенно не уверен), что есть способ получить Cardinal для вывода архивов байт-кода Parrot . (На самом деле, Cardinal компилируется только в PAST, а затем его берет на себя Parrot,

31
ответ дан 29 November 2019 в 22:38
поделиться

For hysterical raisins, Perl 5 looks for .pmc files ahead of .pm files when searching for module. These files could contain bytecode, though Perl doesn't write bytecode out by default (unlike Python).

Module::Compile (or: what's this PMC thingy?) goes into some more depth about this obscure feature. They're not frequently used, but...

The clever folks who wrote Module::Compile take advantage of this, to pre-compile Perl code into... well, it's still Perl, but it's preprocessed.

Among other benefits, this speeds up loading time and makes debugging easier when using source filters (Perl code modifying Perl source code before being loaded by the interpreter).

11
ответ дан 29 November 2019 в 22:38
поделиться

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

Компиляция Perl «точно в срок» достаточно быстра, что в большинстве случаев это не имеет значения . Одно место, где это имеет значение, - это среда CGI, для которой предназначен mod_perl .

13
ответ дан 29 November 2019 в 22:38
поделиться

Не для PHP, хотя большинство настроек PHP включают в себя Кэш байт-кода , который будет кэшировать скомпилированный байт-код, так что при следующем запуске скрипта скомпилированная версия запускается. Это значительно ускоряет выполнение.

Я не знаю, как реально получить байт-код через командную строку.

6
ответ дан 29 November 2019 в 22:38
поделиться

Для Perl вы можете попробовать использовать B :: Bytecode и perlcc . Однако оба они являются экспериментальными. И Perl 6 скоро выйдет (теоретически), он будет на Parrot и будет использовать другой байт-код, так что тогда все это будет несколько спорным.

5
ответ дан 29 November 2019 в 22:38
поделиться

вот несколько примеров волшебных слов для командной строки

perl -MO=Bytecode,-H,-o"Module.pm"c "Module.pm"
3
ответ дан 29 November 2019 в 22:38
поделиться

Согласно третьему изданию Programming Perl , это можно аппроксимировать экспериментальными способами.

2
ответ дан 29 November 2019 в 22:38
поделиться

For PHP, the Phalanger Project compiles down to .Net assemblies. I'm not sure if thats what you were looking for though.

1
ответ дан 29 November 2019 в 22:38
поделиться

Если вы используете Zend Guard в своих сценариях PHP, он по существу предварительно компилирует сценарии в байтовый код, который затем может быть запущен механизмом PHP, если расширение Zend Optimizer загружен.

Итак, да, Zend Guard / Optimizer позволяет использовать предварительно скомпилированные скрипты PHP.

1
ответ дан 29 November 2019 в 22:38
поделиться

Ruby 1.8 на самом деле вообще не использует байт-код (даже для внутреннего использования), поэтому этап предварительной компиляции отсутствует.

0
ответ дан 29 November 2019 в 22:38
поделиться

Кто-нибудь рассматривал возможность использования байт-кода LLVM вместо еще одного байт-кода, заданного пользователем?

1
ответ дан 29 November 2019 в 22:38
поделиться