2008-09-22 5 views
23

Я понимаю, что Parrot - это виртуальная машина, но я чувствую, что не полностью понимаю ее идею.Что такое попугай?

Как я понимаю, это виртуальная машина, предназначенная для обработки нескольких языков. Это верно?

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

Что конкретно делает попугай, что делает его таким большим делом?

ответ

13

Parrot - интерпретатор байт-кода (возможно, с JIT на следующем этапе). Подумайте о Java и ее виртуальной машине, за исключением того, что Java (на данный момент) больше ориентирована на статические языки, а Parrot ориентирован на динамические языки с самого начала.

Также см. Отличный ответ Коди! Настоятельно рекомендуется.

+0

Другим импортом Отметим, что Parrot основан на регистрации на основе стека, в отличие от JVM и CLR. Это теоретически может упростить оптимизацию, поскольку у нас гораздо больше опыта работы с системами на основе регистров. – 2008-09-22 23:07:56

+0

Cody: Вы должны опубликовать это, чтобы я мог +1 ваш комментарий. :-) – 2008-09-22 23:09:18

+0

На самом деле попугай имел jit, для систем x86, по крайней мере, какое-то время. – 2008-09-23 03:07:30

21

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

Parrot основан не на стеках, а на основе регистров. Это означает, что разработчики компилятора могут более легко оптимизировать способ распределения регистров для данного фрагмента кода. Кроме того, компиляция из байт-кода Parrot для машинного кода может теоретически быть быстрее, чем код на основе стека, поскольку мы запускаем системы на основе регистров и имеем для них гораздо больше опыта.

36

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

Попугай начался в мире Perl, и многие из людей, работающих на нем, являются опытными людьми Perl. Вместо использования текущего Perl-интерпретатора, который показывает свой возраст, Parrot позволяет Perl иметь такие функции, как распределяемые предварительно скомпилированные модули (которые все остальные имели в течение длительного времени) и более умный сборщик мусора.

8

Другие дали отличные ответы, поэтому мне остается объяснить, что означает «динамические» языки.

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

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

Другая особенность заключается в том, что динамические языки обычно упрощают преобразование типов, например, в perl и javascript, если вы используете строку в виде числа, она автоматически преобразуется в число.

Parrot предназначен для упрощения и ускорения таких операций и обеспечения оптимизации без знания информации о типе во время компиляции.

2

Адрес Official Parrot Wiki.

Информацию и ссылки можно найти здесь.

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

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

Parrot VM также предоставит поддержку других языков для многих мощных функций Perl 6 (см. Official Perl 6 Wiki для получения дополнительной информации Perl 6).

Parrot обеспечит взаимодействие между модулями разных языков, так что, например, другие языки могут воспользоваться тем, что станет огромной версией CPAN Perl 6 (обширным архивом модулей Perl 5, который Perl 6 сможет доступ через предстоящий Perl 5.12).

1

Честно говоря, я не знал, что это было большой сделкой. Он прошел долгий путь, но просто не видит много пользы. Основной целевой язык еще не придет, и он потерял огромную долю разума среди профессионалов отрасли. Между тем, другие решения, такие как .Net и проекты, такие как Jython, показывают нам, что здесь и сейчас можно выбить любую воспринимаемую рекламу.

1
  • Parrot будет что Java предназначен для, но никогда не достигается - виртуальная машина для всех ОС и платформ
  • Parrot будет реализовывать идеи, лежащие Common Language Runtime в Microsoft для любого динамического языка и по-настоящему кросс-платформенные
  • поверх всего Parrot есть и будет свободным и открытым исходным кодом
  • Parrot станет стандартом де-факто для программирования с открытым исходным кодом с динамическими языками