niedziela, grudnia 25, 2005

Początek ery Pyreksa?

SWIG przeszedł do historii z chwilą, w której stwierdziłem, że kod wygenerowany na jednym komputerze nie chce działać na innym. I to wszystko, co mam do powiedzenia na temat SWIGa.

Poszukiwania innych narzędzi skończyły się na Pyreksie. Nie jest to narzędzie tego samego typu, co SWIG - jest to raczej rodzaj języka skryptowego, w którym można pisać moduły dla Pythona. W Pyreksie stosuje się kilka sztuczek, dzięki którym takie moduły działają potem znacznie szybciej, niż gdyby były napisane w Pythonie.

Jedną z podstawowych sztuczek jest stosowanie typów danych znanych z C. Dzięki temu można (podobno, nie sprawdzałem tego jeszcze) uzyskać znaczne przyspieszenie kodu. No myślę - jeśli nie trzeba za każdym razem sprawdzać, jakie są typy danych, które próbuje do siebie dodać programista...

Ale nie na tym polega urok Pyreksa. Jak dla mnie największe znaczenie mają przede wszystkim dwie jego cechy:

1) Mogę z łatwością używać funkcji napisanych w C. Jedyne, co muszę w tym celu zrobić, to napisać jedną, prostą linię kodu w Pyreksie, która "importuje" taką funkcję napisaną w C, a następnie - jeśli chcę tę funkcję wywoływać z poziomu Pythona, napisać jeszcze funkcję-wrapper w Pythonie. To znaczy w języku Pyreksa, ale różnice pomiędzy nimi są doprawdy niewielkie.

2) Pyrex jest modułem dla Pythona i działa po prostu pod Pythonem. Dzięki temu działa wszędzie tam, gdzie jest Python.

Chciałbym tylko jeszcze zrobić jeden test: zakodować ten sam algorytm w Pythonie, w Pyreksie (korzystając z jego możliwości), oraz w czystym C (i "podpiąć" to pod Pythona przy pomocy Pyreksa) - i sprawdzić szybkość wykonywania tych implementacji. Tylko ciągle jeszcze nie wiem, jaki algorytm wybrać do testów... (No i kiedy znaleźć na to czas?)