Jaka jest różnica między korzystaniem z XS a modułem Inline :: C? Zostało to wspomniane przez kogoś z pytania this i sprawiło, że jestem ciekawy.Perl XS i Inline :: C
Odpowiedz
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.
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.
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
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
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
Cf. eksperymentalny InlineX :: XS w celu wykorzystania Inline :: C do prototypowania i XS do wdrożenia. – tsee