В Python, если я хочу выдать приложение без источников, я могу скомпилировать его в байт-код .pyc, есть ли способ сделать что-то подобное в Ruby?Можно ли скомпилировать Ruby в байтовый код, как в Python?
ответ
Не с интерпретатором МРТ, нет.
Некоторые новые ВМ обрабатываются там, где это находится на столе, но в настоящее время они широко не используются (или даже готовы к использованию).
Хотя Ruby's 1.9 YARV VM является компилятором байтового кода, я не верю, что он может вывести байт-код на диск. Возможно, вы захотите посмотреть на альтернативный компилятор, Rubinius, я считаю, что у него есть эта способность. Следует отметить, что файлы pic-байт-кода (и я представляю себе эквивалент ruby) можно легко «декомпилировать».
Я написал 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, даже делая все это и нанимая некоторых из самых умных криптографов и математиков на планете, не гарантирует успех.
Единственное реальное решение не является техническим, а социальным один: как только вы написали свой код, это автоматически полностью защищены законом об авторском праве, без вас сделать одну единственную вещь. Вот и все. Ваш код защищен.
Короткий ответ "ДА",
rubini.us проверка
Это позволит решить вашу проблему.
Вот как компилировать код Ruby:
Если вы используете JRuby, вы можете скомпилировать код на Ruby в Java .class файлы (включая ваши вещи Rails), чтобы выполнить их (открытый) jdk из коробки!
Вы можете даже скомпилировать полный материал в .war файл, чтобы развернуть его на Apache Tomcat или Jboss с помощью инструмента под названием «сверчок»
- 1. Можно ли скомпилировать код Windows в Linux?
- 2. Можно ли скомпилировать ассемблерный код в MSVC++?
- 3. Можно ли скомпилировать код C в код Javascript?
- 4. Можно ли скомпилировать c-код с помощью python?
- 5. Можно ли скомпилировать код внутри виртуальной машины?
- 6. Можно ли скомпилировать программу, написанную на Python?
- 7. Как скомпилировать многострочный код python
- 8. Можно ли скомпилировать машинный код в Java без внешней программы?
- 9. Можно ли скомпилировать код Matlab в самостоятельный exe?
- 10. Может ли python distutils скомпилировать код CUDA?
- 11. Компилировать код hhvm в байтовый код и удалять исходные файлы
- 12. Можно ли «скомпилировать» потоковые выражения в C++?
- 13. Как скомпилировать код python 3.5 с Mingw?
- 14. Есть ли способ скомпилировать протокол буферов в чистый код Python?
- 15. Можно ли перенести код Ruby с контроллера в файл .js.rjs?
- 16. Можно ли предварительно скомпилировать jsp в eclipse?
- 17. Можно ли заставить JIT скомпилировать сборку и получить код asm?
- 18. Можно ли скомпилировать позже JDK?
- 19. Как преобразовать байтовый массив python в QByteArray?
- 20. Зацикливание через 8-байтовый шестнадцатеричный код в python
- 21. Можно ли скомпилировать код сборки с оптимизацией, предоставляемой gcc/g ++?
- 22. Можно ли использовать переменную как код в python
- 23. Можно ли использовать Ruby и Python вместе?
- 24. Можно ли скомпилировать код WP7 Beta с помощью Tuples?
- 25. Можно ли скомпилировать код, написанный для Arduino на iOS?
- 26. Можно ли скомпилировать код Objective-C на ПК?
- 27. Можно ли скомпилировать код C++ с помощью gcc?
- 28. Все ли объект в python, как ruby?
- 29. Как скомпилировать C++ в переносимый код LLVM
- 30. Как скомпилировать Perl-код в программе C?
Есть ли влияние Performace/затраты, связанные с не байт генерация кода? –
@ Myth17: Теоретически да, но на практике это почти полностью пренебрежимо мало. –
Запуск Ruby на iPhone не является одной из целей MacRuby - Отсюда и название ** Mac ** Ruby. Для разработки iOS существует [RubyMotion] (http://www.rubymotion.com/), который разрабатывается многими из тех же людей. – anthropomorphic