Ларри Уолл представил Perl 6.0.0
Perl 6 развивается более 15 лет, причём из них около 10 лет продолжалось ожидание финального релиза. Язык Perl 6 кардинально отличается от Perl 5 и может рассматриваться как созданный с нуля отдельный язык программирования, обладающий средствами метапрограммирования (возможность определения собственных синтаксических конструкций для расширения языка, в том числе создания новых инфиксных операторов) и встроенными объектно-ориентированными возможностями.
Вместо использования интерпретатора, в Perl 6 программы компилируются в байткод, который затем выполняется в специальной виртуальной машине. В качестве базовой реализации Perl 6 развивается компилятор Rakudo, который может работать с виртуальными машинами MoarVM (по умолчанию), JVM и Niecza (ранее используемая виртуальная машина Parrot, в последних выпусках Rakudo не поддерживается).
С особенностями Perl 6 можно познакомиться в серии обзоров Андрея Шитова. Краткое резюме основных отличий от Perl 5:
- Возможность определения типизированных переменных ("my Int $i;" или "sub count(Int $i){", если присвоить $i строковое значение будет выведена ошибка). Поддерживаются типы Bool, Int, Str, Array, Hash, Complex, Num, Pair;
- Полноценная система классов для объектно-ориентированного программирования (определение "class A {has $.i; method test($what)...}" и вызов "my $a = A.new(i => 1); say $a.i;"). Для наследования при объявлении класса следует указать родительский класс ("class B is A {" или "class C is A is B {").
- Упрощение определения переменных ("my @list = 1, 2, 3;" или "my %hash = 'test1' => 1, 'test2' => 2;") и возможность использования Unicode в именах переменных ("my $переменная = 1;");
- Определение области видимости переменной и элементов классов при помощи "твиглов" (%*ENV, $?FILE, $!a, $.b);
- Возможность указания необязательных аргументов функции и значений по умолчанию ("sub func(Int $i?)", "sub func(Int $i = 1)");
- Поддержка передачи аргументов функции по именам (определение "sub power(:$base, :$exponent)", вызов "power(:base(2), :exponent(3))");
- Возможность создания вложенных функций и определения нескольких функций с одним именем (разделение по типам аргументов);
- Методы параллельного программирования: каналы и механизмы синхронизации;
- Анонимные блоки-замыкания ("my $cube = -> $x {$x ** 3};") и динамические переменные ("my $*var = 'Alpha'");
- Изменённый синтаксис регулярных выражений и возможность определения грамматик;
- Широкий набор метаоператоров;
- Метод ".WHAT" для быстрого определения типа переменной ($scalar.WHAT) и оператор "===" для сравнения объектов типов ("if ($value.WHAT === Int)");
- Переменная "$/" для записи результата сопоставления в регулярном выражении (совпавшую строку можно получить через $/.Str, для подстрок используется синтаксис $/[1] идентичный $1);
- Переменная "$!" для доступа к сообщению об ошибке.
Источник: http://www.opennet.ru/opennews/art.shtml?num=43104
|
0 | Tweet | Нравится |
|