2009-12-29 1 views

ответ

2

Не с интерпретатором МРТ, нет.

Некоторые новые ВМ обрабатываются там, где это находится на столе, но в настоящее время они широко не используются (или даже готовы к использованию).

3

Хотя Ruby's 1.9 YARV VM является компилятором байтового кода, я не верю, что он может вывести байт-код на диск. Возможно, вы захотите посмотреть на альтернативный компилятор, Rubinius, я считаю, что у него есть эта способность. Следует отметить, что файлы pic-байт-кода (и я представляю себе эквивалент ruby) можно легко «декомпилировать».

38

Я написал much more detailed answer to this question в вопросе "Can Ruby, PHP, or Perl create a pre-compiled file for the code like Python?"

Ответ: это зависит. Ruby Язык не имеет положений для компиляции байт-кода и/или запуска байт-кода. Он также не имеет спецификации формата байт-кода. Причина этого проста: она слишком ограничивала бы разработчиков языка, если бы они были вынуждены использовать конкретный формат байт-кода или даже байт-коды вообще. Например, XRuby и JRuby компилируются в байт-код JVM, Ruby.NET и IronRuby, компилируются в байт-код CIL, кардинал компилируется в PAST, SmallRuby компилируется в байт-код Smalltalk/X, MagLev компилируется в байт-код GemStone/S. Для всех этих реализаций было бы глупо использовать любой другой формат байт-кода, чем тот, который они используют в настоящее время, поскольку все они взаимодействуют с другими языковыми реализациями, использующими один и тот же формат байт-кода.

Simlar для MacRuby: он компилируется на собственный код, а не на байт-код. Опять же, использование байт-кода было бы глупо, поскольку одной из целей является запуск Ruby на iPhone, что в значительной степени требует наличия собственного кода.

И, конечно же, существует МРТ, которая является чистым интерпретатором скриптов AST-walk и, следовательно, не имеет формата байт-кода.

Это, как говорится, есть являются некоторые Руби Реализации которые позволяют компиляции с и загрузки из байт-кода. Рубиний позволяет это, например. (Действительно, имеет иметь такую ​​функциональность, так как его Рубиновый компилятор написан на Ruby, и, таким образом, компилятор должен быть составлен в Rubinius байткод первых, для того, чтобы решить Catch-22.)

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

Но, конечно, оба они имеют свои собственные форматы байткода и не понимают друг друга (ни тинирб, ни RubyGoLightly, ни ...) Кроме того, ни один из этих форматов не понимается JVM или CLR, наоборот.

Однако, все указывает на то, что, как указывает Марк, вы всегда можете полностью преобразовать байтовый код, особенно в таких случаях, как CPython, PyPy, Rubinius, YARV, tinyrb, RubyGoLightly, где формат байт-кода был конкретно чтобы быть очень близким к исходному языку.

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

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

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

+0

Есть ли влияние Performace/затраты, связанные с не байт генерация кода? –

+0

@ Myth17: Теоретически да, но на практике это почти полностью пренебрежимо мало. –

+0

Запуск Ruby на iPhone не является одной из целей MacRuby - Отсюда и название ** Mac ** Ruby. Для разработки iOS существует [RubyMotion] (http://www.rubymotion.com/), который разрабатывается многими из тех же людей. – anthropomorphic

0

Если вы используете JRuby, вы можете скомпилировать код на Ruby в Java .class файлы (включая ваши вещи Rails), чтобы выполнить их (открытый) jdk из коробки!

Вы можете даже скомпилировать полный материал в .war файл, чтобы развернуть его на Apache Tomcat или Jboss с помощью инструмента под названием «сверчок»

https://rubygems.org/gems/warbler/

Смежные вопросы