Каква е разликата между използването на XS и модула Inline::C? Това беше споменато от някой в този въпрос и ме направи любопитен.
Perl XS и Inline::C
Отговори (2)
Inline::C генерира XS и изгражда генерирания модул. Той прави това по време на изпълнение, въпреки че кешира минали компилации.
Inline::C вероятно е по-лесен за използване, но има няколко недостатъка. Първият път, когато се стартира, забавя стартирането, изисква разрешения за създаване на файлове по време на изпълнение и изисква инструменти за компилиране на модула. Освен това затруднява инсталирането от системен администратор.
Плюсът е, че можете да вземете генерирания XS и да елиминирате Inline::C, след като нещата започнат да се оформят. Това го прави полезен за създаване на прототипи.
Inline компилира C кода по същото време, когато вашият Perl се компилира, и ще се компилира отново всеки път, когато вашият изходен код бъде променен. XS се компилира веднъж и двоичният файл се записва като .so файл като библиотека.
Perl е написан на C, така че XS използва собствените типове Perl и механизми на подпрограми. Модул, използващ XS, работи почти толкова ефективно, колкото вградена езикова функция. По-трудно е да правите някои неща в Inline и ще има стъпка на преобразуване при повикване или връщане от вашия код. Като се има предвид това, Inline върши добра работа, като не прекомпилира, когато не е необходимо, и преобразуванията във и извън Inline код вероятно няма да бъдат забележим удар в производителността.
И накрая, писането на XS предполага, че пакетирате модул. Необходими са много настройки и познания за същността на Perl и пакетирането на модули. Ако просто трябва да извикате C библиотека от Perl, по-добре е да използвате Inline.