LINUX.ORG.RU
ФорумTalks

О байт-коде


0

1

Почему языки, компилируемые в байткод, не компилируют в нативные команды? Быстрее же будет.

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 1)

Excelsior JET и забудем об этом, ок?

wolfy
()

Потому что их компилируют в байт-код.

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

Грамотно (без грязных хаков) написанная программа, не использующая либы, гвоздями прибитые к какой-то одной ОС, сравнительно без проблем компилируется под любую архитектуру.

cvs-255 ★★★★★
() автор топика

Вон в жабе, говорят, джит в рантайме перекомпилит байткод в нативный, C# наверняка тоже самое. Для питона пилят пипи. Видать потому что это более сложно и не всем под силу. Ну и зависит также и от языка, видимо для динамическитипизируемых это сделать сложнее... :/

Bad_ptr ★★★★★
()

есть шансы на более широкое внедрение llvm - что куда ближе в нативности.

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

Видать потому что это более сложно и не всем под силу.

для этого есть llvm

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от Deleted

внятного ответа в гугле не нашлось

cvs-255 ★★★★★
() автор топика

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

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

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

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

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

компиляция делается 1 раз

cvs-255 ★★★★★
() автор топика

потому что это сложная задача

true_admin ★★★★★
()
Ответ на: комментарий от cvs-255

+1 Так и надо писать. Хотя не всегда возможно, т.к. если можно грязным хаком «выбить» 2х быстродействие, то имхо это оправдано часто

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

Код, который требует частого изменения. Там собственно всякие скриптоязыки и правят бал.

aidaho ★★★★★
()

Почему языки, компилируемые в байткод, не компилируют в нативные команды?

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

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

Архитектур много, а байткод один.

Не всегда. У стандартной реализации Lua, например, байткод платформенно-зависим (у LuaJIT нет такого недостатка)

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

интерпретация выходит быстрее работы нативного кода?

так быть не может, но интерпретация иногда может быть быстрее, чем JIT

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

И? А потом, когда будет подправлен код — ещё раз.

Не по 10 же раз на день перекомпилируешь уже отлаженную программу?

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

компиляция делается 1 раз

а если программа будет запущена один раз? ;)

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от cvs-255

работать быстрее

что будет работать быстрее? JIT компилирует байткод в нативные коды непосредственно во время запуска, единственное на что он таким образом влияет - скорость подъёма рантайма. ну так и сколько-нибудь серьёзное приложение на C или C++ потянет за собой неплохой рантайм

jtootf ★★★★★
()

вопрос аналитегам: а есть какие нибудь альтернативы байт-коду с подобной же переносимостью? и являются ли подобной альтернативой скриптовые ЯП ?

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

JIT компилирует байткод в нативные коды непосредственно во время запуска

Я где то предлагал JIT?

cvs-255 ★★★★★
() автор топика

Байткод — гораздо более высокоуровневая штука, чем код процессора.

PolarFox ★★★★★
()
Ответ на: комментарий от cvs-255

Я где то предлагал JIT?

покажи мне современный язык, компилируемый в байткод, и при этом без JIT в какой-нибудь из реализаций

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

Да хоть там 10 раз JIT, если я скомпилирую зараннее 1 раз и буду запускать потом полученный бинарник, работать он будет быстрее, чем если байткод будет обрабатываться интерпретатором.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от jtootf

покажи мне современный язык, компилируемый в байткод, и при этом без JIT

Python. Думаю, что Ruby и Perl.

в какой-нибудь из реализаций

Реализации с JIT никем не используются.

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

Утверждение, кстати, спорное для излишне динамических языков. Вот жабку можно было бы не глядя компилировать.

PolarFox ★★★★★
()
Ответ на: комментарий от cvs-255

если

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

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

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

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

В чём разница — потратить N тактов на интерпретирование M единиц байткода или скомпилировать эти же M единиц в те же самые N тактов?

PolarFox ★★★★★
()
Ответ на: комментарий от cvs-255

Для приближенных к железу языков вроде С оно верно. С питоном уже такой фокус не проходит.

PolarFox ★★★★★
()

Почему языки, компилируемые в байткод, не компилируют в нативные команды?

Простота реализаци

Быстрее же будет.

Очень, очень сомнительно. В байт-код обычно компилируются динамически типизированные языки (да, Ява - исключение). Для таких языков «тупой» перевод в машинный код не дает выигрыша, а «умный» перевод стал практически применимым только сегодня (да, спасибо галерке за напоминание о Strongtalk).

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

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

ты, кажется, вообще не представляешь себе что такое JIT

если я скомпилирую зараннее 1 раз и буду запускать потом полученный бинарник

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

jtootf ★★★★★
()
Ответ на: комментарий от cvs-255

А программа, распространяемая в байт-коде, не требует для этого перекомпиляции :)

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

На то есть веские причины. PyPy не поддерживает Си-расширения CPython, Perl5 с JIT просто не существует, Ruby... он просто не нужен %)

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