LINUX.ORG.RU

Почему интерпретатор медленный?


0

2

Я не совсем понимаю, откуда берутся тормоза в интерпретаторе. Допустим у нас есть сторока

expression1 expression2;
где expression2 является аргументом (поступает на вход) expression1. Ведь если даже у нас интерпретация, expression2, сначала компилируется, потом выполняется, потом поступает на вход expression1, насколько я понимаю. А при компиляции, они скомпилируются за один раз.

Все равно же, все представляется в машинных кодах.

То есть, основные тормоза создаются тем, что при интерпретации у нас больше фаз исполнения? Это связано с пропускной способностью шин процессора? Или с другими особенностями железа? Или еще с чем-то?


Ответ на: комментарий от foo

А что является настоящей причиной?

То, что интерпретация медленнее исполнения машинного кода.

И, чтобы два раза не вставать: то, что ты написал в хедпосте - бессмысленная мешанина терминов.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Мне кажется, вот это:

То, что интерпретация медленнее исполнения машинного кода.

и есть бессмыслица. Компьютер кроме машинного кода ничего не умеет. В любом случае все в нем исполняется.

foo
() автор топика
Ответ на: комментарий от foo

Компьютер кроме машинного кода ничего не умеет.

Ты с ним хоть раз работал или только в рассказах фантастов читал про загадочный «компьютер»?

mashina ★★★★★
()
Ответ на: комментарий от tailgunner

Я малограмотный. Но если бы Вы понимали что-то, вероятно Вы могли бы объяснить внятно. А этого не видно.

foo
() автор топика
Ответ на: комментарий от mashina

Я, собственно имел в виду, что компилируется все в машкод, ниже, на уровне интерфейса программиста уже некуда.

foo
() автор топика
Ответ на: комментарий от tailgunner

Можно компилировать в байт-код, в AST, и даже вообще не компилировать.

Это не важно. Это все промежуточные звенья. Байткод, «вообще ничего» представлено в машкоде.

foo
() автор топика

потому-что условно надо сделать больше работы каждый раз, вместо того что бы сделать ее один раз, в этом есть свои плюсы и минусы, ну и я бы не назвал его «медленным» - смотря что им делать, в вебе так вообще это роли не играет, или в скриптах, а вот в рилтайме этот подход не ахти

umren ★★★★★
()
Ответ на: комментарий от tailgunner

А как вы себе представляете, Вы написали слово abc, ток с 134-го транзистора вошел в a перешел на b, затем на c, оттуда на 135-й? Так происходит?

foo
() автор топика
Ответ на: комментарий от mashina

Большое

Это не ответ какое конкретно?

foo
() автор топика
Ответ на: комментарий от tailgunner

вообще не компилировать.

То, что ты ни хрена не понимаешь, это еще простительно, тут дохрена таких, которые думают, что процессор слова понимает, но зачем ты влез в тему в которой не смыслишь со своими позорными рассуждениями?

anonymous
()
Ответ на: комментарий от anonymous

тут дохрена таких, которые думают, что процессор слова понимает

А что, на самом деле нет? Ооохх...

kravich ★★★★
()
Ответ на: комментарий от anonymous

но зачем ты влез в тему в которой не смыслишь со своими позорными рассуждениями?

Да вот соскучился по тебе - знал, что ты сразу придешь.

tailgunner ★★★★★
()

Сильно упрощая, программа транслируется в байт-код, который выполняется либо процессором, либо интерпретатором (байт код для проца и интерпретатора будет разный). Если программа требует, образно говоря, 10 простых операций, то при исполнении кода на железе, процессор выполнит всего 10 инструкций. А при исполнении кода интерпретатором, процессор выполнит код интерпретатора, который читает байт-код твоей программы, решает, как выполнять каждую инструкцию и только потом ее выполняет. То есть в этом случае для тех же 10 простых операций процессор в дополнение к этим 10 инструкциям выполнит еще 10*N инструкций кода интерпретатора, где N может быть достаточно большим. Поэтому исполнение кода интерпретатором занимает больше времени.

ddos3
()

Или еще с чем-то?

Циклы. Компилятор транслирует тело цикла один раз и потом исполняет уже оттранслированное. Интерпретатор транслирует на каждой итерации.

KRoN73 ★★★★★
()

Почему интерпретатор медленный?

Ты уточняй какой именно и в сравнении с чем. А так нормально ответить на такой расплывчатый вопросе нельзя.

mbivanyuk ★★★★★
()
Ответ на: комментарий от KRoN73

Циклы, сами по себе тут непричем. Любой код медленней. Циклы просто видно, потому-что много.

anonymous
()
Ответ на: комментарий от bhfq

Почему очередь из 10 человек длиннее очереди из 3 человек?

Ты не прав.
Очереди нет.
Людей нет.
Есть только один машкод.
И он одинаково быстр везде, всегда и всюду с тех пор, как пиндосы сбили UFO и создали первую ЭВМ на скоммунизденных оттуда полупроводниках.

Virtuos86 ★★★★★
()

Интерпретация сама по себе не медленная. Медленная динамическая типизация, которая идет в нагрузку к большинству «интерпретируемых» языков. Потому ламеры и путают все и разводят свои ламерские мифы про интерпретацию.

anonymous
()
Ответ на: комментарий от anonymous

Интерпретация сама по себе не медленная. Медленная динамическая типизация, которая идет в нагрузку к большинству «интерпретируемых» языков. Потому ламеры и путают все и разводят свои ламерские мифы про интерпретацию.

То есть, получается, что, если не будет динамической типизации, разницы в скорости вообще не будет?

foo
() автор топика
Ответ на: комментарий от foo

Если будет чисто статическая типизация, то jit-компилятор в интерпретаторе ничем не будет отличаться от aot-компиляторов для традиционно «быстрых» языков.

anonymous
()
Ответ на: комментарий от foo

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

А по теме - не думали ли вы что если промежуточных звеньев достаточно много, то они и замедляют процесс вычисления?

saibogo ★★★★
()
Ответ на: комментарий от foo

Он догоняет си только там, где может статически вывести ограничения для типов. А это редко где за пределами синтетических тестов встречается. Иначе же, грубо говоря, прежде чем сложить два числа он сначала потратит десятки тактов на то, чтобы проверить, не являются ли они строками или еще какой дрянью.

anonymous
()
Ответ на: комментарий от foo

Так не бывает. Или типы разруливаются динамически, или они известны статически - как в том же ассемблере или Форте, и все операции ожидают какие-то конкретные типы аргументов.

anonymous
()
Ответ на: комментарий от saibogo

Я не понимаю, к чему это Ваше замечание. Там предыдущий оратор утверждал, что код может быть исполнен процессором в неоткомпилированном виде, «как есть». Я хоть и не спец, но это сказки, однозначно. Процессор исполняет только машкод.

foo
() автор топика

Пока не будешь знать ответы на вопросы: Что такое транслятор?
Что такое интерпретатор?
Что такое компилятор?
В чем отличие машинного кода от байт-кода?
Разговаривать с тобой бессмысленно.

comp00 ★★★★
()
Ответ на: комментарий от anonymous

Ну а в тикле, например, там если все — строка, что там разруливать? И он, кстати, медленный достаточно. Ну и shell, туда же.

foo
() автор топика
Ответ на: комментарий от foo

Я хоть и не спец, но это сказки, однозначно.

Сам ты сказки. Хочешь сказать невозможно давать инструкции процессору без каких либо трансляций? Вы бредите, батюшка.

comp00 ★★★★
()
Ответ на: комментарий от comp00

Вы бы лучше на вопрос ответили, если Вы такой граматный специалист. Понторезов в этом треде и без вас хватает.

foo
() автор топика
Ответ на: комментарий от comp00

Ага, ну дай ему мама мыла раму сразу. Он поймет, я гарантирую это.

foo
() автор топика
Ответ на: комментарий от foo

А там каждый раз парсить строки надо. Это еще медленнее. Современные CPU легко складывают 8 float-ов за такт, сравни с сотней тактов на каждый dispatch в динамически типизированных языках.

anonymous
()
Ответ на: комментарий от comp00

А вот ты, стало быть, можешь четко сформулировать, чем компилятор от интерпретатора отличается? Вперед, с песнями! Повесели народ клоунадой!

anonymous
()
Ответ на: комментарий от foo

А смысл? Гугл, википедия, книжки уже не мейнстрим?
Ответ на вопрос «почему интерпретация медленнее?» очевиден, если знать что есть интерпретация и основную особенность выполнения команд. Наниматься к тебе в преподаватели и объяснять тебе курс по микропроцессорным средствам и компиляторам я не хочу: иди в ВУЗ там расскажут.

comp00 ★★★★
()
Ответ на: комментарий от comp00

Ну а ты типа такой тут пришел, и знаешь, что такое интерпретация. А проекции Футамуры вообще на завтрак ешь без соли.

anonymous
()

Мэн, при интерпретации выполняется машинный код не твоей программы, а машинный код интерпретатора. Для интерпретатора код программы - это всего лишь входные данные. Каждая команда при интерпретации требует гораздо больше операций. Например интерпретатор видит присваивание - это будет не запись в регистр, а запись во внутреннюю структуру данных интерпретатора (хеш-таблицу). И так далее. Можешь считать, что интерпретатор - это эмулятор некоторого железа.

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 1)
Ответ на: комментарий от comp00

Да ты и русским то толком не владеешь, как выясняется, архитектурщик хренов.

Ну лады, считай что соскочил, твоего позора никто не видел, все в этот момент о сущности интерпретации думали.

anonymous
()
Ответ на: комментарий от comp00

и основную особенность выполнения команд

Я чуть чаем не поперхнулся, LOL. И что это за основная особливость команд?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.