Raku является членом семейства языков программирования Perl . [6] Ранее называвшийся Perl 6 , он был переименован в октябре 2019 года . [7] [8] Raku вводит элементы многих современных и исторических языков. Совместимость с Perl не была целью, хотя режим совместимости является частью спецификации. Процесс проектирования Raku начался в 2000 году.
В Perl 6 мы решили, что лучше исправить язык, чем пользователя.
— Ларри Уолл [9]
Процесс проектирования Raku был впервые анонсирован 19 июля 2000 года, на четвертый день конференции Perl того года , [10] Ларри Уоллом в его докладе State of the Onion 2000. [11] В то время основными целями были удаление «исторических бородавок» из языка; «легкие вещи должны оставаться легкими, сложные вещи должны становиться проще, а невозможные вещи должны становиться сложнее»; и общая очистка внутреннего дизайна и интерфейсов прикладного программирования (API). Процесс начался с серии запросов на комментарии (RFC). Этот процесс был открыт для всех участников и не оставлял ни одного аспекта языка закрытым для изменений. [12]
После завершения процесса RFC Уолл рассмотрел и классифицировал каждый из 361 полученных запросов. Затем он начал процесс написания нескольких «Апокалипсисов», используя первоначальное значение термина, «раскрытие». [13] Хотя изначальной целью было написать один Апокалипсис для каждой главы Programming Perl , стало очевидно, что по мере написания каждого Апокалипсиса предыдущие Апокалипсисы становились недействительными из-за более поздних изменений. По этой причине был опубликован набор Синопсисов, каждый из которых касался содержания Апокалипсиса, но с любыми последующими изменениями, отраженными в обновлениях. Сегодня спецификация Raku управляется с помощью набора тестирования «roast», [14] в то время как Синопсисы сохраняются как историческая справка. [15]
Также существует серия Exegeses, написанная Дэмианом Конвеем , которая объясняет содержание каждого Апокалипсиса с точки зрения практического использования. Каждая Exegesis состоит из примеров кода вместе с обсуждением использования и последствий примеров. [16]
Сегодня при разработке Raku используются три основных метода коммуникации. Первый — канал Raku Internet Relay Chat (IRC) на Libera Chat . Второй — набор списков рассылки . [17] Третий — репозиторий исходного кода Git , размещенный на GitHub . [18]
Основная цель, которую Уолл предложил в своей первоначальной речи, заключалась в устранении исторических бородавок. К ним относились путаница вокруг использования сигила для контейнеров, неоднозначность между select
функциями и синтаксическое воздействие bareword filehandles . Было много других проблем, исправление которых программисты Perl обсуждали годами, и Уолл явно упомянул их в своей речи. [ необходима цитата ]
Следствием этих целей было то, что Perl 6 не будет иметь обратной совместимости с существующей кодовой базой Perl. Это означало, что некоторый код, который был правильно интерпретирован компилятором Perl 5, не будет принят компилятором Perl 6. Поскольку обратная совместимость является общей целью при улучшении программного обеспечения, критические изменения в Perl 6 должны были быть указаны явно. Различие между Perl 5 и Perl 6 стало настолько большим, что в конечном итоге Perl 6 был переименован в Raku.
Талисман языка — «Камелия, жук Раку». [1] Ее имя — отсылка к талисману верблюда, связанному с Perl , а ее форма, в каламбурной традиции сообщества Perl, является игрой слов « software bug ». Спиральные узоры, встроенные в ее крылья, похожие на бабочку, напоминают символы «P6», любимое прозвище Perl 6, а нецентральное расположение глаз — преднамеренный каламбур на «Wall-eyed». [19]
Одной из целей создания яркого и красочного дизайна логотипа было противодействие женоненавистничеству в обществе и предоставление возможности людям «мужских убеждений» продемонстрировать свою чувствительную сторону. [20]
По состоянию на 2017 год [обновлять], только реализация Rakudo находится в стадии активной разработки. Ни одна реализация не будет обозначена как официальная реализация Raku; скорее, «Raku — это все, что проходит официальный набор тестов». [21]
Rakudo Perl 6 [22] [23] нацелен на ряд виртуальных машин, таких как MoarVM , Java Virtual Machine и JavaScript . MoarVM — это виртуальная машина , созданная специально для Rakudo [24] и NQP Compiler Toolchain. [25] Между Raku и виртуальными машинами есть слой, называемый Not Quite Perl 6 (NQP), который реализует правила Raku для разбора Raku, а также абстрактное синтаксическое дерево и генерацию кода , специфичного для бэкэнда . Большие части Rakudo написаны на Raku или на его подмножестве NQP. Rakudo не является полностью самостоятельным внедрением , и на данный момент нет конкретных планов сделать Rakudo самозагружающимся компилятором .
Pugs был первоначальной реализацией Perl 6, написанной на Haskell под руководством Одри Тан . Pugs был самой продвинутой реализацией Perl 6, но с середины 2007 года он в основном бездействует (обновления производились только для отслеживания текущей версии компилятора Glasgow Haskell (GHC)). По состоянию на ноябрь 2014 года Pugs не поддерживался. [26]
В 2007 году v6-MiniPerl6 («mp6») и его повторная реализация v6-KindaPerl6 («kp6») были написаны как средство для загрузки Perl-6.0.0 STD с использованием Perl 5. STD представляет собой полную грамматику для Perl 6 и написана на Perl 6. Теоретически, все, что способно анализировать STD и генерировать исполняемый код, является подходящей системой загрузки для Perl 6. kp6 в настоящее время компилируется mp6 и может работать с несколькими бэкэндами. [27] [28] mp6 и kp6 не являются полными реализациями Perl 6 и предназначены только для реализации минимального набора функций, необходимого для загрузки полного компилятора Perl 6.
Yapsi был компилятором Perl 6 и средой выполнения, написанной на Perl 6. В результате для его запуска требовался существующий интерпретатор Perl 6, например один из релизов Rakudo Star. [29]
Niecza, еще одна крупная работа по внедрению Perl 6, сосредоточена на исследовании оптимизации и эффективной реализации. Она нацелена на Common Language Infrastructure . [30]
Спецификация Raku требует, чтобы модули идентифицировались по имени, версии и полномочиям. [31] Можно загрузить только определенную версию модуля или даже два модуля с одинаковым именем, которые отличаются по версии или полномочиям. Для удобства предоставляется псевдоним для короткого имени.
CPAN , система распространения модулей Perl, пока не обрабатывает модули Raku. Вместо этого используется прототипная модульная система. [32]
Кроме того, в 2009 году была опубликована книга, посвященная одной из первых виртуальных машин Perl 6 — Parrot.
"Perl" — это семейство языков, "Raku" (ранее известный как "Perl 6") является частью семейства, но это отдельный язык, имеющий собственную команду разработчиков. Его существование не оказывает существенного влияния на продолжающуюся разработку "Perl".
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка )