Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > Компиляторы, интерпретаторы и тд.


Автор: Gunslinger 25.1.2007, 19:28
Чем отличаются интерпретируемые языки от языков виртуальных машин (историю про байт-код можно не рассказывать)? У обоих кросплатформенность, программы обоих не запустятся, если не будет предварительно установлен либо интерпретатор, либо виртуальная машина (в отличие от компиленой программы). Виртуальные машины ставятся на смартфоны и прочее умное мобильное железо... А тут вижу, питон также ставится под эти девайсы. Так в чем разница? Конкуренты ли эти виды?

Автор: Void 25.1.2007, 22:02
Для начала надо определиться с понятием виртуальной машины.
Байт-код, кстати, применяется во многих языках, считаемых интерпретируемыми, в том же Питоне, например. И интерпретатор Питона с полным правом может считаться стековой виртуальной машиной.
Может быть, имелся в виду JIT?

Автор: Sartorius 25.1.2007, 22:07
 ИМХО VM - тот же интерпретатор. Ну и что, что блоками в native переводит. Суть одна и та же - native получаем по ходу выполнения.

Автор: DrDred 26.1.2007, 11:40
За VM-based языки
- возможность JIT-оптимизации -> большая скорость выполнения
- большая часть работы интепретатора уже сделана -> значит скорость больше, памяти меньше
- скрипт, предварительно скомпиленный в байт-код уже как минимум не содержит синтаксических ошибок
- если язык статически типизированный, то получили проверки типов при компиляции.

Автор: Gunslinger 26.1.2007, 20:00
Цитата(Sartorius @ 25.1.2007,  22:07)
ИМХО VM - тот же интерпретатор. Ну и что, что блоками в native переводит. Суть одна и та же - native получаем по ходу выполнения.

Что же, получается вирт.машина и интерпретатор одно и тоже? 

Под вирт.машиной имел ввиду сановскую яву... Хотя дот нет - это тоже вирт.машина (мелкософтовское детище-конкурент сановской vm, насколько я понимаю).

Автор: Gunslinger 28.1.2007, 17:50
посмотрел в википедии, вроде разобрался. У интерпретаторов и виртуальных машин все больше общего.

Автор: regis 1.2.2007, 11:25
На самом деле, такой уж четкой грани -- просто нет.
Дело в том, что практически все интерпретируемые языки осуществляют псевдокомпиляцию того, что они выполняют, в некоторую внутреннюю форму. Это, конечно, значительно повышает эффективность выполнения. Более того, большинство интерпретируемых языков умеет эту промежуточную форму программы сохранять, чтобы не выполнять эту работу при каждом запуске. Python сохряняет компилированные модули в файлы ".pyc", Ruby, кажется, тоже умеет, и Perl 6, скорее всего, будет делать нечто подобное.
Так что все отличие современных скрипт-языков от Java/.Net -- в том, что компилятор и VM технически одно приложение, а процесс компиляции выполняется автоматически и незаметно для пользователя.

Автор: Зверек 1.2.2007, 12:12
Руби не умеет покуда.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)