Байт-код по сравнению с интерпретируемым

Я советую вам использовать ORM (Простота в использовании для начинающих) Попробуйте: Сиквелизировать ИЛИ Книжная полка

отметьте этот пост [ 112]

8
задан Whaledawg 10 February 2009 в 22:54
поделиться

6 ответов

Есть ли на самом деле какие-либо основные "интерпретаторы" в эти дни, которые на самом деле не компилируют их код? (Или к байт-коду или к чему-то подобному.)

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

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

1
ответ дан 5 December 2019 в 14:06
поделиться

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

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

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

3
ответ дан 5 December 2019 в 14:06
поделиться

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

Увеличение скорости является таким образом потенциально довольно существенным - не, только делают Вы пропускаете целые этапы lexing/parsing во времени выполнения, но у Вас также есть больше возможности применить оптимизацию и генерировать лучший машинный код.

7
ответ дан 5 December 2019 в 14:06
поделиться

Кроме того, много "классических" интерпретаторов также включает фазу закона/синтаксического анализа наряду с выполнением.

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

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

Но если Вы рассматриваете, скажем, классический ОСНОВНОЙ интерпретатор, они обычно никогда не хранят необработанный текст, скорее они хранят маркируемую форму и воссоздают текст программы, когда Вы действительно "ПЕРЕЧИСЛЯЕТЕ". Здесь код байта намного более сыр (у Вас действительно нет виртуальной машины здесь), но Ваша казнь добирается для пропуска части обработки текста. Это все сделано, когда Вы вводите строку и совершаете нападки, ВХОДЯТ.

1
ответ дан 5 December 2019 в 14:06
поделиться

Это согласно Вашей виртуальной машине. Некоторые Ваши более быстрые виртуальные машины (JVM) приближаются к скорости кода C. Таким образом, как быстро Ваш интерпретируемый код работает по сравнению с C?

Не думайте, что при преобразовании интерпретируемого кода в ByteCode, он выполнит столь же быстрый Java (около скоростей C), были годы продолжения повышения производительности, но необходимо видеть значительное повышение скорости.

Emacs был портирован в байт-код с увеличенной производительностью. Мог бы быть достойный внимания Вам.

0
ответ дан 5 December 2019 в 14:06
поделиться

Я никогда не замечал сценарий Vim, который был достаточно медленным для замечания. Принятие сценария, прежде всего, называет встроенный, собственный код, операции (regexes, блочные операции, и т.д.), которые реализованы в ядре редактора, даже 10x, ускорение 'связующей логики' в сценариях было бы незначительно.

Однако, профилирование является единственным способом быть действительно уверенным.

0
ответ дан 5 December 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: