вторник, октября 27, 2015

филосовское про системы контроля версий

А ведь когда-то, не так уж и давно(~3 года назад) я считал svn отличной системой контроля версий и искрене не понимал, зачем нужен этот ваш новомодный git. И там и там есть коммиты и мёрджи, в обоих системах сложные конфликты разруливаются вручную и вроде бы как и системы брэнчей приняты для работы в обоих системах.
Но поработав пару лет на гите и вернувшись(по производственной необходимости) обратно на svn, я испытываю такие же чувства, как если бы меня с порше пересадили на москвич)) вроде бы ездить можно и в повороты входит, а удобство управления и комфорт в использовании абсолютно несравнимые)

четверг, октября 22, 2015

Perl. Получить ссылку на скачивание дистрибутива по имени модуля.

На работе запонадобилось накачать модулей используя их канонические имена вида 'Foo::Bar'. Лазить на cpan и вручную качать, понятное дело, неправильно. К тому же, часть модулей содержалась в дистрибутиве других модулей, как например, Catalyst находится в составе Catalyst::Runtime.
Конечной моей задачей был скрипт, которому я на вход даю имя модуля, а он мне на выходе отдаёт ссылку на скачивание данного модуля с cpan.
Недолгое гугление вывело меня на модуль MetaCPAN::Client, который позволяет работать с metacpan через API.
В итоге, для скачивания модуля имеем такой код:
#!/usr/bin/env perl

use 5.014;
use strict;
use warnings;

use MetaCPAN::Client;

my $module_name = $ARGV[0] or die "Can't get module name";

my $mclient = MetaCPAN::Client->new;
my $module  = $mclient->module( $module_name );

say $mclient->release( $module->distribution )->download_url;
Проверяем:
% perl load_module.pl List::Util
https://cpan.metacpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.42.tar.gz
Что и требовалось.

пятница, октября 09, 2015

Сравнение скорости работы Perl 5 и Perl 6. Считаем сумму чисел Фибоначчи

Стало интересно, насколько последний релиз ракуды быстр в сравнении с пятым перлом. До этого ранее ради интереса сравнивал быстродействие перла 5 в сравнении с питоном и руби. Сравнивал рассчётом суммы первых 30-ти чисел Фибоначчи. Перловка там проигрывала питону с рубями.
Теперь вот решил сравнить насколько шестёрка хороша в данной задаче.

Итак, что имеем:
% perl -v
This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi

% perl6 -v
This is perl6 version 2015.09 built on MoarVM version 2015.09

Код на perl 5:
#!/usr/bin/perl

use strict;
use warnings;

sub fib {
    my $n = shift;
    if ( $n < 3 ) {
        return 1;
    }

    return fib($n-1) + fib($n-2);
}

print fib(30) . "\n";

Код на perl 6:
#!/usr/bin/env perl6

sub fib ( Int $n ) {
    if ( $n < 3 ) {
        return 1;
    }

    return fib($n-1) + fib($n-2);
}

fib(30).say;
результаты:
% time perl fib.pl
832040

real 0m0.757s
user 0m0.756s
sys  0m0.000s

% time perl6 fib.pl6
832040

real 0m8.946s
user 0m8.912s
sys  0m0.028s
Что-то как-то совсем не быстро и с большой нагрузкой на проц(в случае с перлом 6). Разница в скорости работы почти в 12 раз!
Понятно, что перл 6 - это виртуальная машина, которая медленно запрягает но быстро едет, но как-то цифры всё-равно не радуют. Другое дело что раньше разница в работе была ещё более впечатляющей, разрабы оптимизируют код, ускоряют работу интерпретатора Rakudo и это не может не радовать.
Буду надеяться, что к стабильному релизу p6 мощЕй ещё добавят. Может даже что-нибудь напишу для себя на нём.

четверг, октября 08, 2015

Perl 6 релизнулся

Ларри Уолл представил первую версию перла 6. Даже не верится в это. Я всегда шестую перловку воспринимал как нечто нереальное, что никогда не случится, но к чему всегда принято стремиться))
И вот случился релиз. Пока только тестовый, но стабильную версию должны представить в конце этого года.
Синтаксис у шестёрки чудоковатый. Двойные сигиллы $. $^ $!, ещё больше возможностей сделать одну вещь различными способами. Но есть и интересные моменты. Явное объявление классов и методов, возможность строгой типизации по необходимости, вроде как параллельность из коробки и пр.
Но всё же данный язык я всерьёз не рассматриваю. На повестке у меня стоит Go, возможно ещё C++. На шестёрке вряд ли что-то серьёзное напишут, но наблюдать буду с интересом, вдруг чудо всё-же произойдёт))

P. S. по традиции в камментах к новости на ЛОР'е и опеннете разразился спор хейтеров и любителей языка. Традиция, ничего не поделаешь))