Raku, раніше Perl 6 — мова програмування родини Perl.[4] Створення Perl 6 розпочалось в 2000 році, та вона все ще перебуває у стадії розробки специфікації. Perl 6 може мати багато реалізацій, декілька таких реалізацій у вигляді інтерпретаторів та компіляторів також знаходяться зараз на етапі розробки[5]. В Perl 6 представлені елементи багатьох як сучасних так і забутих мов програмування.

Raku
Парадигма об'єктно-орієнтоване програмування, імперативне програмування і функційне програмування
Дата появи 2000
Творці Ларі Волл
Розробник Ларі Уолл і Одрі Тан
Останній реліз (різниться в залежності від реалізації)
Rakudo Star / 26 вересня 2014; 9 років тому (2014-09-26)[1]
Niecza Perl 6 / 26 березня 2013; 11 років тому (2013-03-26)[2]
Система типізації динамічна типізація[d] і gradual typingd
Основні реалізації Rakudo, Niecza
Під впливом від Haskell (мова програмування),[3] JavaScript, Perl 5, Ruby (мова програмування), Smalltalk
Мова реалізації Raku
Операційна система Багатоплатформова
Ліцензія Загальна громадська ліцензія GNU або Artistic License
Звичайні розширення файлів .raku, .rakumod, .rakudoc, .rakutest або .t
Репозиторій вихідного коду github.com/Raku/roast
Вебсайт raku.org

Основною причиною небажання продовжувати розвиток проекту під ім'ям Perl 6 стало те, що Perl 6 не став продовженням Perl 5, як очікувалося спочатку, а перетворився в окрему мову програмування, для якого так і не було підготовлено інструментарію за прозорою міграції з Perl 5. В результаті склалася ситуація, коли під одним ім'ям Perl пропонуються дві паралельно розроблювані самостійні мови, несумісних одна з одною на рівні сирцевих текстів і колом своїх спільнот розробників. Використання одного імені для родинних, але кардинально відрізнених мов, призводило до плутанини, коли багато користувачів продовжують вважати Perl 6 новою версією Perl, а не принципово іншою мовою. При цьому ім'я Perl продовжує зв'язуватися з Perl 5, а згадка Perl 6 вимагає окремого уточнення.

Історія ред.

В Perl 6 ми вирішили, що краще змінити мову, ніж змінювати того, хто на ній пише.

Ларі Волл

Початок пректування нового Perl було вперше анонсовано 19 липня 2000 року. Тоді, на 4-й день тогорічної конференції Perl[6], Ларі Волл оголосив це у своїй промові State of the Onion 2000 (Стан цибулини 2000)[7]. В той час, основними цілями було позбутись «історичних нашарувань» («historical warts») та в загальному очистити внутрішню структуру мови і інтерфейсів (API). Процес почався із ряду запитів на коментар (RFC). Він був відкритим для всіх бажаючих, та жоден аспект мови не лишився закритим для змін.

По завершенню процесу RFC, Волл розглянув та класифікував кожен із запитів (всього одержано 361). Тоді він почав процес написання декількох «Апокаліпсисів» («Apocalypse»), що значить «відкриття»[8]. Існує серія Екзегезів написаних Демієном Конвеєм (Damian Conway), що описують вміст кожного Апокаліпсису з точки зору практичного застосування. Кожна Екзегеза містить приклади коду разом із обговореннями його застосування та результатами виконання[9].

При розробці Perl 6 використовуються такі найзначніші засоби спілкування:

Специфікація ред.

Perl 6 — це специфікація мови і, так само як у випадку С та С++, для неї може бути створено багато компіляторів. Існує проектна документація[11], на яку в минулому посилалися як на специфікацію. Але цей підхід було змінено і тепер офіційний набір тестів «roast»[12] визначає специфікацію Perl 6. Як стверджують самі творці, «Perl 6 — це будь-що, що успішно проходить офіційні тести»[13]

Реалізації ред.

Розробка Pugs, першої найбільш повної реалізації, почалась у 2005 році, а нині вже існує багато таких проектів по реалізації Perl 6.

Rakudo Perl базується на Parrot і NQP (Not Quite Perl), і випускає нові версії щомісяця. У липні 2010 проект випустив першу дистрибуцію Rakudo Star[14] корисну і зручну добірку реалізацій Perl 6 та пов'язаних матеріалів.

В Niecza, ще одній значній реалізація Perl 6, головна увага приділяється оптимізації етапу компіляції.

STD — офіційна граматика Perl 6, визначає саму граматику і синтаксичний аналіз коду[15]. Розробляється і підтримується Ларі Воллом

Згідність із Perl 5 ред.

Perl 6 не сумісний з Perl 5. Хоч їх синтаксис багато в чому і схожий, але це дві абсолютно різні мови програмування. Згідність із Perl 5 не ставилась за ціль, хоча режим згідності передбачається специфікацією. Існують реалізації можливості підключення модулів Perl 5 всередині Perl 6[16], щоправда, на даний момент бракує відомостей щодо ефективності їх використання.

Система модулів ред.

Специфікація Perl 6 вимагає, щоб модулі визначалися ім'ям, версією та авторством[17]. Є можливість використовувати модуль лише певної версії або два модулі з однаковим ім'ям, які відрізняються версіями або авторством. Для зручності можна використовувати псевдоніми.

Система поширення модулів Perl 5 CPAN поки не підтримує модулі Perl 6. Наразі існує прототип системи модулів.[18]

Основні відмінності від Perl 5 ред.

Perl 5 і Perl 6 відрізняються докорінно, хоч передбачалось, щоб Perl 6 був схожим на оригінальний Perl. Більшість змін запроваджено щоб нормалізувати мову, зробити її легшою для розуміння як для новачків, так і для досвідчених програмістів.

Специфікація ред.

Однією з основних відмінностей Perl 6 є те, що, на відміну від Perl 5, він почав своє існування як специфікація[19]. Це означає, що Perl 6 може бути за потреби реалізовано заново, а також, що програміст не мусить звертатися до сирцевого коду для підтвердження певної властивості або функції мови. Документацію Perl 5 оцінюють як відмінну[20], навіть поза Perl спільнотою завжди відзначають її завершеність і повноту. Одначе, вона не вважається офіційним, першоджерельним довідником і лише описує у вільній формі поведінку інтерпретатора. Будь-які невідповідності між документацією і самим інтерпретатором мови можуть призвести до приведення одного з них у відповідність до іншого.

Система типів ред.

В Perl 6 до системи динамічних типів Perl 5 було додано також систему статичних типів[21]. Наприклад:

 my Int $i = 0;
 my Rat $r = 3.142;
 my Str $s = "Hello, world";

Однак статичне типізування залишається необов'язковим, що дозволяє програмісту вирішувати більшість завдань без його використання:

 my $i = "25" + 10; # $i is 35

Perl 6 пропонує гібридну систему типів, даючи програмісту можливість використовувати статичне, динамічне типізування, або їх поєднання.

Джерела інформації ред.

  1. Rakudo Star Release 2014.09. 26 вересня 2014. Архів оригіналу за 29 вересня 2014. Процитовано 26 вересня 2014.
  2. Niecza Perl 6 v16.[недоступне посилання з жовтня 2019]
  3. Glossary of Terms and Jargon. Perl Foundation Perl 6 Wiki. The Perl Foundation. February 28. Архів оригіналу за 21 січня 2012. Процитовано 9 лютого 2012.
  4. About Perl. perl.org. Архів оригіналу за 15 грудня 2014. Процитовано 20 квітня 2013. "Perl" is a family of languages, "Perl 6" is part of the family, but it is a separate language which has its own development team. Its existence has no significant impact on the continuing development of "Perl 5".
  5. Перелік компіляторів на Perl6.org (англ.) . Архів оригіналу за 16 грудня 2014. Процитовано 19 грудня 2014.
  6. Kline, Joe (21 серпня 2000). Report from the Perl Conference. Архів оригіналу за 4 червня 2009. Процитовано 17 січня 2015.
  7. Wall, Larry (2000). State of the Onion 2000. O'Reilly Network. Архів оригіналу за 6 червня 2010. Процитовано 17 січня 2015.
  8. Wall, Larry (2 квітня 2001). Apocalypse 1: The Ugly, the Bad, and the Good. Архів оригіналу за 23 листопада 2010. Процитовано 17 січня 2015.
  9. The Perl Foundation (2001). Exegeses. Архів оригіналу за 14 березня 2007. Процитовано 17 січня 2015.
  10. The Perl Foundation (2002). Perl Development: Mailing Lists. Архів оригіналу за 4 лютого 2012. Процитовано 21 січня 2015.
  11. Проектна докуентація Perl 6 (англ.) . Архів оригіналу за 23 грудня 2014. Процитовано 19 грудня 2014.
  12. Офіційний комплект тестів Perl 6. Архів оригіналу за 26 грудня 2015. Процитовано 19 грудня 2014.
  13. Розділ 1-й проектної документації Perl 6 (англ.) . Архів оригіналу за 23 грудня 2014. Процитовано 22 грудня 2014. Perl 6 is anything that passes the official test suite.
  14. Michaud, Patrick (29 July 2010). Announce: Rakudo Star — a useful, usable, "early adopter" distribution of Perl 6. Архів оригіналу за 19 грудня 2014. Процитовано 12 січня 2012.
  15. Сторінка модулів STD та viv на perl6.org (англ.) . Архів оригіналу за 23 грудня 2014. Процитовано 19 грудня 2014.
  16. Модуль Inline::Perl5 на github.com. Архів оригіналу за 26 грудня 2015. Процитовано 19 грудня 2014.
  17. Wall, Larry (2004). Synopsis 11: Modules. Архів оригіналу за 13 жовтня 2014. Процитовано 15 вересня 2015.
  18. Perl 6 Modules Directory. Modules.perl6.org. Архів оригіналу за 24 вересня 2015. Процитовано 21 вересня 2013.
  19. Wall, Larry (10 серпня 2004). Synopsis 1: Overview. Архів оригіналу за 31 жовтня 2014. Процитовано 28 жовтня 2015.
  20. Lhotsky, Brad (10 березня 2004). Thinking In Perl. Архів оригіналу за 27 вересня 2015. Процитовано 30 жовтня 2015.
  21. Wall, Larry (20 травня 2009). Synopsis 2: Bits and Pieces. Архів оригіналу за 31 жовтня 2014. Процитовано 4 листопада 2015.