Perl XS и Inline::C

Каква е разликата между използването на XS и модула Inline::C? Това беше споменато от някой в ​​този въпрос и ме направи любопитен.


person Nate Glenn    schedule 29.07.2011    source източник


Отговори (2)


Inline::C генерира XS и изгражда генерирания модул. Той прави това по време на изпълнение, въпреки че кешира минали компилации.

Inline::C вероятно е по-лесен за използване, но има няколко недостатъка. Първият път, когато се стартира, забавя стартирането, изисква разрешения за създаване на файлове по време на изпълнение и изисква инструменти за компилиране на модула. Освен това затруднява инсталирането от системен администратор.

Плюсът е, че можете да вземете генерирания XS и да елиминирате Inline::C, след като нещата започнат да се оформят. Това го прави полезен за създаване на прототипи.

person ikegami    schedule 29.07.2011
comment
Трудната част от XS е разбирането на perl API. И ще трябва да направите това, независимо дали използвате XS или Inline::C. - person jrockway; 30.07.2011
comment
Вж. експерименталният InlineX::XS за начин за използване на Inline::C за създаване на прототипи и XS за внедряване. - person tsee; 05.08.2011

Inline компилира C кода по същото време, когато вашият Perl се компилира, и ще се компилира отново всеки път, когато вашият изходен код бъде променен. XS се компилира веднъж и двоичният файл се записва като .so файл като библиотека.

Perl е написан на C, така че XS използва собствените типове Perl и механизми на подпрограми. Модул, използващ XS, работи почти толкова ефективно, колкото вградена езикова функция. По-трудно е да правите някои неща в Inline и ще има стъпка на преобразуване при повикване или връщане от вашия код. Като се има предвид това, Inline върши добра работа, като не прекомпилира, когато не е необходимо, и преобразуванията във и извън Inline код вероятно няма да бъдат забележим удар в производителността.

И накрая, писането на XS предполага, че пакетирате модул. Необходими са много настройки и познания за същността на Perl и пакетирането на модули. Ако просто трябва да извикате C библиотека от Perl, по-добре е да използвате Inline.

person Steve C    schedule 29.07.2011
comment
Re ще бъде прекомпилиран всеки път, когато вашият изходен код бъде променен, това е хубаво нещо. все още трябва да прекомпилирате, когато изходният код се промени, когато използвате XS директно, но тогава не е автоматично. - person ikegami; 30.07.2011
comment
Re и ще има стъпка на преобразуване при обаждане или връщане от вашия код. Същата стъпка на преобразуване задължително съществува както за XS, така и за Inline::C. Всъщност Inline::C позволява на XS да извърши цялото конвертиране. - person ikegami; 30.07.2011