2011-07-29 18 views

Odpowiedz

13

Inline :: C generuje XS i buduje wygenerowany moduł. Robi to w czasie wykonywania, chociaż buforuje poprzednie kompilacje.

Inline :: C jest prawdopodobnie łatwiejszy w użyciu, ale jest kilka wad. Przy pierwszym uruchomieniu spowalnia uruchamianie, wymaga uprawnień do tworzenia plików w czasie wykonywania i wymaga narzędzi do kompilacji modułu. Co więcej, instalacja sysadminu jest trudniejsza.

Plusem jest to, że można pobrać wygenerowany XS i wyeliminować Inline :: C, gdy wszystko zacznie się kształtować. Dzięki temu jest przydatny do prototypowania.

+3

Najtrudniejszą częścią "XS" jest zrozumienie interfejsu API Perl. I będziesz musiał to zrobić, bez względu na to, czy używasz XS, czy Inline :: C. – jrockway

+1

Cf. eksperymentalny InlineX :: XS w celu wykorzystania Inline :: C do prototypowania i XS do wdrożenia. – tsee

2

Funkcja Inline kompiluje kod C w tym samym czasie, gdy kompilowany jest Twój Perl, i będzie rekompilowany za każdym razem, gdy zmieni się kod źródłowy. XS jest skompilowany raz, a plik binarny jest zapisywany jako plik .so, podobnie jak biblioteka.

Perl jest napisany w języku C, więc XS używa natywnych typów i mechanizmów podprogramów Perla. Moduł używający XS działa prawie tak samo wydajnie, jak wbudowana funkcja językowa. W Inline trudniejsze jest wykonywanie pewnych czynności, a podczas wywoływania lub powracania z kodu będzie krok konwersji. Mimo to Inline wykonuje dobrą robotę, nie rekompilując, gdy nie jest to konieczne, a konwersje do i z kodu Inline prawdopodobnie nie będą zauważalnym hitem wydajności.

Wreszcie, pisanie XS zakłada, że ​​pakujesz moduł. Wymagane jest wiele konfiguracji i wiedzy na temat wnętrzności Perl i opakowania modułów. Jeśli potrzebujesz tylko wywołać bibliotekę C z Perla, lepiej jest użyć Inline.

+1

Re "będzie rekompilowany za każdym razem, gdy zmienisz kod źródłowy", to dobrze. nadal trzeba przekompilować, gdy kod źródłowy zmienia się bezpośrednio przy użyciu XS, ale to nie jest automatyczne. – ikegami

+1

Re "i nastąpi konwersja podczas połączenia lub powrotu z twojego kodu." Ten sam krok konwersji koniecznie dotyczy zarówno XS, jak i Inline :: C. W rzeczywistości Inline :: C pozwala XS na wszystkie konwersje. – ikegami

Powiązane problemy