=head1 НАЗВАНИЕ Паррот FAQ - Часто задаваемые вопросы =head1 ВЕРСИЯ =over 4 =item Ревизия 0.3 - 13 Марта 2002 Преобразован в POD и добавлен "Почему мы не используем внешние утилиты или баблиотеки I?" =item Ревизия 0.2 - 03 Декабрь 2001 Добавлена секция "Паррот и Перл" и "Почему переобеспечение Перла". Включены Dan's Q&A пункты. =item Ревизия 0.1 - 03 Декабрь 2001 Заимствовано из статьи Simon Cozens, "Паррот: кросс-языковая архитектура виртуальной машины". =back =head1 ОБЩИЕ ВОПРОСЫ =head2 Что такое Паррот? Паррот это новый интерпретатор, предназначенный для поддержки наступаюшего языка Перл 6. Он разрабытывается как автономная виртуальная машина, которая может испролнять байт-код компилируемых динамически языков, таких как Перл 6, но и также Перл 5. Идеально, паррот может поддерживать другие динамически компилируемые языки, такие как Питон, Руби и Tcl. =head2 Почему "Паррот"? Имя "Паррот" связано с первоапрельской шуткой Simon Cozens L в которой Larry Wall и Guido van Rossum объявили о слиянии языков Перл и Питона. Тогда не было более тщательно обдуманной шутки чем эта, Simon потратил немного времени как инициативный разработчик Паррота. =head2 Является ли Паррот тем же, что и Перл 6? Нет. Паррот является реализаций, которая, как предпологается, будет использоваться для выполнения программ Перла 6. Определение языка Перл 6 в настоящие время (Декабрь 2001 года) начато Ларри Волом. Пока что истинная природа Перла 6 по прежднему не известна, она будет в значительной степени симулировать Перл таким, каким мы знаем его сегодня, и будет нуждаться в runtime систему. Более полная информация на стадии определения языка Перл 6, когда закончит работу Larry L. =head2 Могу я использовать Паррот сегодня? Ну, почти. :-) Паррот находиться в ранний фазе реализации. Первоначальный способ использовать Паррот - это писать кода на асемблере Паррота, описанный в L. Вы можете также создавать динамическое содержание внутри Арача, используя модуль mod_parrot, написанный Ask Bjorn Hansen. Вы сильно знать, что mod_parrot сушествующий сегодня, не должен использоваться с любым производственным кодом. =head2 Почему я должен програмировать на языке асемблер Паррота? Уйма причин, как не станно. :-) =over 4 =item * Все L (клевые малыши) делают это. =item * Это искустный hack. =item * Ты поймещь все удовольствие от програмирования на языке асемблере без какого нибудь необходимого системного крушения. =back Серьезно, все-таки, програмирование на языке асемблер Паррота интересный задача. Это также один из лучших путей для написания тестовых ситуаций для Паррота. =head2 Когда я могу ожидать использование Паррота с I<реальными> языками програмирования? Это зависит от того, что мы подразумеваете под словом I<реальный>. :-) =over 4 =item * Leon Brocard реализовал proof-of-concept L компилятор байткода Явы в байткод Паррота. =item * Gregor Purdy работает над маленьким языком, называемым Jako, который преобразуется прямо в байткод Паррота. (Доступен с дистрибутивом Паррота.) =item * Dan Sugalski и Jeff Goff начали работу над компиляцией кода языка Scheme в байткод Паррота. (Доступен с дистрибутивом Паррота.) =back =head2 На каком языке написан Паррот? C. =head2 Ради бога, мужики, почему?!?!?!? Потому, что это лучшие, что мы получили. =head2 Это грустно. Тоже верно. Так или иначе, но C доступен практически везде. Перл 5 написан на C, так что мы можем потенцианльно собрать любой кусок сброрки Перла 5. =head2 Почему не написать это на... I<(вставьте сюда (ваш) любимый язык)>? Потому что: =over 4 =item * Не доступен везде. =item * Ограниченное число талантливых программеров для ядра группы разработки. =item * Не достаточно быстрый. =back =head2 Почему вы не используете внешнии инструменты или библиотеки I? Наиболее общими проблемами являются: =over 4 =item * Совместимость лицензий. Паррот имеет нестандартную лицензию. Большинство лицензий -- даже лицензии открытого кода -- не совместимы с Парротом. Все что угодно, лицензитруемое под условия Перл 5, это хорошо, а некоторые вещи, лицензируемые под BSD или X лицензией могут быть. Лицензия GPL это не есть хорошо. =item * Совместимость платформ. Паррот работает на большенстве платформ Перла 5, а также на некоторых других. Перл 5 выполняется на восмидясяти платвормах; паррот должен запускаться на Unix, Windows, Mac OS (X и Classic), VMS, Crays, Windows CE, и Palm OS, названо только незначительное количество. Среди его процессорных архитектур будут: x86, SPARC, Alpha, IA-64, ARM, и 68x00 (Palms и старые Macs). Если нечно не работает на всем этом, мы не можем использовать его в Парроте. =item * Скорость, размер и гибкость. Не только должен Паррот запускаться на всех этих платформах, но и должен также выполнятся эфективно. Размер ядра Паррота сейчас колеблется от 250K до 700K, в зависимости от компилятора. Это проталкивает его на портативные платформы. Любая библиотека, используемая Парротом, должна быть достаточно быстрой, чтобы иметь довольно маленькое влияние на производительность, довольно маленькой чтобы иметь небольшое влияние на размер ядра, и довольно гибкий, чтобы удовлетворять различные потребности Перла, Питона, Tcl, Ruby, Scheme и любых, кроме некоторых хитрых или запутанных хакерских трюков в Парроте. =back Эти условия очень жесткие для отбора (pass); в настоящий момент мы надеямся, что мы, вероятно, напишем все, кроме Unicode набивки. =head2 Почему ваша собственная виртуальная машина? Почему не выбрать JVM/.NET? Эти VM спроектированы для статических типов языков. Это прекрасно, так как Java, C#, и уйма других языков являются статически определенными. Перл не является таким. По многообразным причинам, считается, что Перл будет исполнняться более медлено там, чем на интерпритаторе, приспособленному для динамических языков. =head2 Так вы не будете исполняться на JVM/.NET? Неприменно будем. Они в данный момент не являются нашей первоочередной задачей. Мы строем нашу собственный интерпритатор/виртуальную машитну, затем, когда она зарабротает мы возмемся за JVM и/или .NET прикладные части. =head1 ПАРРОТ И ПЕРЛ =head2 Зачем нужна модернизация Перла? Хороший вопрос. На перл конференции 4.0, летом 2000 года, Larry Wall L заявил, что пора воскресить Перл из праха. Это подразумевает сам язык Перл, реализацию этого языка, сообщество разработчиков программного обеспечения с открытым кодом, которые добровольно снабжают и поддрерживают язык, и большое общество програмистов, которые используют Перл. Многообразие причин привело к началу этого проекта: =over 4 =item * Перл 5 является стабильным, надежным, сильной платформой для разработки программ; он не уйдет еще долгое время, даже после выхода Перл 6. (Доказательство: Перл 4 до сих пор вне этого, но вопрос как сильно мы хотим, чтобы он ушел.) =item * Мы способны перевести Перл 5 в Перл 6, если это необходимо. Это сохранит обратную совместимость с большой массой сушествующего кода Перла, который I<очень> важен. =item * Язык может находится в некоторой ревизии: форматы, вообще-то говоря, не привязаны к ядру языка, а глобальные типы пережили себя. Видоизменяя язык сейчас, мы можем сделать Перл лучшим. =item * Некоторые наросты должны быть удалены: C должна возвращать I вместо I при успешном выполнении, и C должен возвращать год, а не число лет прошедщих после 1900 года. =item * Хорошо бы написать компилятор Перла в байт-код на Перле, а не на С. Это сделало бы его более удобным для хакеров Перла, для трюков на Перле. =back =head2 Вы хотите написать Перл компилятор на Перле? Конечно. Почему нет? C, Java, Lisp, Scheme, и практически камждый другой язык самоподемны. Почему нет? =head2 Не является ли это проблемой самообеспечения? Нет, в самом деле нет. Не забывайте, что мы можем использовать Перл 5, что бы выполнять программы Перла 5, такие как компилятор Перла 5 в Паррот. =head2 Так Паррот будет иметь дело и с Перлом 5, и с Перлом 6? Мы еще не знаем, так как это зависит от формулировки Перла 6. Но мы I<будем> использовать более подходящий из двух Перл компиляторов, в зависимости от того, компилим ли мы Перл 5 или Перл 6. Ларри бурчал что-то о формулировке C, объявляюшей, что файл содержил код Перла 6, но мы до сих пор не вполне уверены, в чем это заключается. =head2 Будет ли Паррот исполнять код Python, Ruby и Tcl? Вероятно. =head2 Латынь и Klingon также? Нет, Паррот не достаточно извращен для Damian. Вероятно, когда Паррот портируют на диоды из суперкрутых инонов кальция, хотя... =head2 Ха? Ты мог L<быть там|"LINKS">. =head1 ВОПРОСЫ РЕАЛИЗАЦИИ ПАРРОТА =head2 А что с чисто регистровой машиной? Ничего особенного. А почему ты спрашиваешь? =head2 Разве ты не знаешь, что именно стековые машины нужно применять при реализации в софте? Нет, я не знаю. =head2 Тогда посмотри на все успешно реализованные стековые VMs! Это какие же? Я знаю только JVM. =head2 А как насчет остальных? B<Каких> остальных? Это и все, если не считать Perl, Python, or Ruby. =head2 Да, именно они! Тогда верно. Но согласись,о них никогда не думешь как о VMs, правда? :-) Cерьезно, мы уже исполняем с ускоряющей машинный код организацией лучшей, чем любой из них, и имея регистры как раз уменьшаем количество обрашений к стеку. =head2 Правильно, толково. Тогда назовите удачную регистровую виртуальную машину! Компании Apple поставлет с 68K емуляторором все свои PowerPC-включающими версии of Mac OS. =head2 Действительно? L<Да, действительно.|"LINKS"> =head1 LINKS Первоапрельская шутка: http://www.perl.com/pub/a/2001/04/01/parrot.htm apocolypses: http://www.panix.com/~ziggy/ Клевые малыши: http://use.perl.org/~acme/journal Ява байткод в Паррот байткод: http://archive.develooper.com/perl6-internals@perl.org/msg03864.html http://www.perl.com/pub/a/2000/10/23/soto2000.html Бать там: http://www.csse.monash.edu.au/~damian/papers/#Superpositions Действительно.: http://developer.apple.com/techpubs/mac/PPCSoftware/PPCSoftware-13.html =cut