среда, 24 марта 2010 г.

Открыл для себя Inline::C

Как известно подключение С кода к Perl достаточно трудоемкое и реализуется через Perl XS. И меня эта сложно перодалимая стена останавливает, хотя конечно очень хочется писать быстрые модули. И вот недавно узнал про Inline::C.

Сам модуль Inline представляет собой фреймворк для поключения любого языка программирования к перлу. В часности Inline::C позволяет поключать C код. При первом запуске скрипта происходит компилирование C кода, при последующих запусках проверяется, изменился ли код или нет. Если не менялся, то компиляция не происходит.

После прочтения perlapi вполне можно писать полноценные сишный код, работающий с перловыми хешами массивами. И вообще можно сделать все что угодно. И уже после небольшой практики с Inline::C можно будет перейти к изучению XS. Подозреваю, что освоить его будет гораздо проще.

Вот написал простенький примерчик, разворачавающий строки вида "a-z0-9" в последовательности символов. На качество C кода не смотреть, я его плохо знаю.
use Inline C => DATA;

seq("1-3a-zv-d");

__DATA__

__C__

#include <stdio.h>
#include <string.h>


void print_seq(char start_s, char fin_s);

int seq(char* str) {

    char start_s = '\0';
    char fin_s = '\0';

    int i;
    for ( i = 0; i < strlen(str); i++ ) {
        char s = str[i];
        if ( s == '\0' ) break;
        if ( s != '-' ) {
            if (!start_s )
                start_s = s;
            else {
                fin_s = s;
                print_seq(start_s, fin_s);
                start_s = fin_s = '\0';
            }
        }
    }

    return 0;
}

void print_seq(char start_s, char fin_s) {
    int flag = start_s < fin_s ? 1 : 0;
    while( start_s != fin_s ) {
        printf("%c ", start_s);
        start_s += flag ? 1 : -1;
    }
    printf("%c\n", fin_s);
}

пятница, 5 февраля 2010 г.

SDL_perl

Оказывается на перле можно писать игры. Когда-то давно я пробовал играться с OpenGL на перле. Простые вещи работали довольно шустро, а вот что-нибудь посложней - крайне медленно. Пробовал экспортировать из 3Dmax поверхности, скрипт отрисовывал их быстро, но вот если их начать крутить, выполнять с ними какие-то манипуляции, то все крайне тормозило.
А тут наткнулся на SDL_perl. Это конечно не 3D, но сделать онлайн 2D игрушку вообще без проблем. И работать будет прекрасно.
Сайт проекта sdl.perl.org

cpan dot

Узнал очень классную возможность скрипта cpan.
Если скачать любой дистрибутив модуля и запустить в каталоге дистрибутива
cd Some-Module-2.3
sudo cpan .
Тогда этот модуль установится :)
Вот такой мощный cpan!