=pod =head1 ЗАГОЛОВОК Глоссарий Паррота =head1 Идентификатор $Id: glossary.pod,v 1.2 2003/08/07 09:31:35 Администратор Exp $ =head1 РЕЗЮМЕ Краткое описание терминов, которые могут вам встретиться в процессе разработки Паррота. =head1 Глоссарий =head2 Континуации (Continuations) Представьте себе континуации как исполняемый "контекст". Этот контекст подразумевает не только стэк, но и все остальное, что находится на его исполнительной ветви - копия всего за исключением глобальных переменных. В тоже время можно провести аналогию с Си: C (захват континуации) и C (вызов континуации); C работает только вниз по стеку, скачок вверх по стеку (то есть возврат к возвращенному фрейму) является признаком дурного тона. Континуации могут работать в обоих направлениях. Мы можем делать с континуациями две важные вещи: =over 4 =item 1 Создавать и передавать континуационный объект подпрограмме, которая может передавать его в свою очередь вверх по цепочке вызовов до тех пор, пока в какой-то точке мы не сможем вызвать(выполнить) обьект для окончательного вычисления или возврата значения. Это очень похоже на обратную рекурсию. =item 2 Континуации могут быть захвачены на произвольную глубину вызова, заморозив на время в определенной точке всю цепочку вызовов. Если мы сохраняем континуационный объект в переменной, то позднее мы можем полностью воспроизвести контекст за его "ручку". Это позволяет такие изящные вещи как возврат(backtracking), которые трудно реализуются в обычных стэковых языках таких как Си. Поскольку в контексте континуации представляют "ветви", то он(контекст) требует окружение, которое использует некоторую комбинацию стеков, основанных на кучах, стековых деревьев и/или стэкового копирования. =back В системах, которые поддерживают континуации очень распространено реализовывать L<сопрограммы(co-routines|"Co-Routines")> на их основе. Континуация является разновидностью замыкания. Когда вы захватываете континуационный объект, он запоминает состояние текущего стека вызова, лексическую временную память, а также текущее местоположение в коде. Когда вы вызываете континуацию, система бросает то, чем она занята, кладет обратно стек вызовов и временную память, и перескакивает к той точке выполнения, откуда был захвачен континуационный объект. Что, в действительности, выглядит так, как будто бы вы никогда не покидали этой точки в вашем коде. Обратите внимание, что как и в случае с замыканиями, выкладывается обратно только *временная память*, а значения переменных находящихся там остаются прежними. =for авторы Melvin Smith Dan Sugalski =head2 Сопрограммы (Co-Routines) Сопрограммы виртуально идентичны обычным подпрограммам, за исключением того что, подпрограммы всегда выполняются от начальной интсрукции и до инструкции возврата, сопрограммы же могут останавливать самих себя (или быть асинхронно остановленными, если позволяет язык) и позднее продолжить с того же места. С помощью сопрограмм можно реализовывать такие вещи как "фабрики". Если сопрограмма никогда не возвращается, каждый раз когда мы ее вызываем, то мы возобновляем программу. Сопрограмма - это подпрограмма, которая может остановиться в середине и начать выполняться позднее с точки останова. К примеру: sub sample : coroutine { print "A\n"; yield; print "B\n"; return; } sample(); print "Foo!\n"; sample(); выведет A Foo! B По существу, ключевое слово C говорит: "Остановись здесь, но в следующий раз, когда нас вызовут, начни со следущей команды". Если вы возвращаетесь из сопрограммы, то следующий вызов начнется с самого начала. Сопрограммы помнят свое состояние, локальные переменные и тому подобные вещи. =for авторы Melvin Smith Dan Sugalski =head2 COW COW означает Copy On Write(Копирование При Записи). Это чисто техника "хака" скорости, при которой копирование строк происходит без их настоящего копирования, настоящее копирование данных откладывается до момента, когда они абсолютно необходимы. Если у вас есть строка А и вы копируете ее в строку Б, то две эти строки должны быть идентичными по крайней мере в самом начале. При COW они являются таковыми, потому что строка А и строка Б, на самом деле, не являются отдельными строками, а есть одна и та же строка, помеченная как COW. Если либо строка А, либо строка Б изменяются, то система замечает это и только тогда копирует строку и изменяет ее. Если на всей программе строка не изменяется - что случается довольно часто - то программе нет никакой необходимости делать копию, экономя тем самым и память и время. =head2 DOD Dead Object Detection(Обнаружение Мертвых Объектов) - это процесс прохода через все объекты, переменные и все того, что не находится внутри Паррота и принятия решения: используется ли объект? Те объекты, которые не используются освобождаются для дальнейшего повторного использования. (После того, как они уничтожаются, если активное разрушение гарантируется). Смотрите также: L<"GC"> =head2 GC Garbage Collection(Сборка Мусора) - это процесс прохода через все активные объекты, переменные и структуры и помечания памяти, которую они использует как используемая. Вся неиспользуемая память освобождается для дальнейшего повторного использования. Процессы Сборки Мусора и Обнаружения Мертвых Объектов разделены в Парроте, так как мы в общем случае прогрызаемся через сегменты памяти быстрее, чем через объекты. ( Это является специфической особенностью Перла и других языков, которые работают со строками) Смотрите также L<"DOD"> =head2 ICU International Components for Unicode (Международные Компоненты для Юникода) ICU - это C/С++ библиотека, которая обеспечивает поддержку Юникода на различных платформах. Она была добавлена в Паррот в 0.0.8 релизе для будущей поддержки Юникода. http://oss.software.ibm.com/icu/index.html =head2 PMC PMC является акронимом Parrot Magic Cookie(Волшебное Печенье Паррота). (Или крекер, как вам больше нравится) PMC классы - это примитивы, которые используют языки, основанные на Парроте для представления своих фундаментальных типов, таких как скалярные значения Перла. =head2 Vtable Таблица операций, прикрепленная к какому-нибудь типу данных, например, PMC или строки. Vtables используются для того, чтобы избежать переключений или длинных цепочек C, обрабатыващих различные типы данных. Они похожи на вызовы методов, за исключением того что, их имена выбираются заранее. =for автор From: "Brent Dax" =head2 Warnock's Dilemma (Дилемма Варнока) Это дилемма, с который вы сталкиваетесь каждый раз, когда отправляете сообщение на какую-то тему на общественный форум и не получаете никакого ответа. Что заставляет вас удивляться - может быть моя проблема не суть важна или раннее уже обсуждалась, или кто-нибудь ждет пока ответит кто-нибудь другой, или может быть ваше письмо ни кому не интересно. =head1 ИСПРАВЛЕНИЯ Пожалуйста, присылайте исправления на почтовую рассылку perl6-internals. =cut