Back to site

XS механікі

Не ўмешвайцеся ў справы майстры, таму што вы храбусткія і добра з кетчупам.

XS механікі

Увядзенне

Гэты артыкул аб XS. Ён тлумачыць, што гэта такое, чаму гэта так, як яна працуе, і як яго выкарыстоўваць. Яна ўключае ў сябе поўнае, які працуе прыклад модуля XS, і заглушка модуля, які можна выкарыстоўваць у якасці адпраўным пункту для вашага ўласнага кода. Гэта выказаць мэта гэтага артыкула, каб забяспечыць фон і інфармацыю, неабходную для Вас, каб напісаць свае ўласныя модулі XS.

Гэтая артыкул складаецца з пяці частак

Лістапад Увядзенне матывацыі, вызначэння, прыклады
Снежань Архітэктура інтэрпрэтатар Perl, выкліках, прадстаўленне даных
Студзень Інструменты h2xs, xsubpp, DynaLoader
Лютага Модулі Math::Ackermann, Set::Bit
Сакавік Align::NW Needleman-Вунш глабальнага выраўноўвання паслядоўнасці аптымальнай

Што гэта такое

XS з'яўляецца (фанетычныя?) Акронім для знешніх падпраграм, дзе знешнія сродкі знешнімі па адносінах да Perl, г.зн. запісаць у некаторых іншых моў, такіх як C або C + +. З XS, мы можам назваць C падпраграмы непасрэдна з кода Perl, як калі б яны былі Perl падпраграм.

Вузка, XS гэтае імя клей мову, які выкарыстоўваецца для ўказання падпраграмы інтэрфейсаў і пераўтварэння даных неабходна выклікаць C з Perl. У больш шырокім, XS ўключае сістэмы праграм і аб'ектаў, якія працуюць разам для дасягнення гэтай мэты: h2xs, MakeMaker, xsubpp, DynaLoader, і язык XS сябе. Мы будзем казаць аб усіх гэтых пазней.

Чаму гэта

Perl з'яўляецца швейцарскай арміі бензапілу, але Ёсць яшчэ некаторыя рэчы, якія не варта рабіць у Perl. Прыклады ўключаюць

У больш агульным плане, Perl з'яўляецца мовай праграмавання прыкладанняў. Ён дае магутныя сродкі, такія як аўтаматычная ўвод дадзеных, аўтаматычнае кіраванне памяццю, хэш-табліцы, і рэгулярныя выразы. Яны робяць гэта лёгка болт разам прыкладання, без неабходнасці ўдзелу ў кожнай дробязі. Практыка паказвае, што гэтыя аб'екты маюць істотныя выдаткі часу выканання.

У адрозненне, C і C + + прыклады моў праграмавання сістэмы. Яны забяспечваюць кантроль за кожнага цыклу працэсара і кожны байт, так што ўнутраныя цыклы могуць быць хутка і крытычныя структуры дадзеных могуць быць невялікімі. Практыка паказвае, што ў вас ёсць, каб праграма кожнага цыклу працэсара і кожны байт у ўсёй праграмы: нават часткі, якія не звязаны працэсара.

XS дазваляе нам мець лепшае з абодвух сьветаў. З XS, мы можам выкарыстоўваць Perl для частка нашага кода, і З толькі тыя часткі, якія патрабуюць тонкага кантролю над рэсурсамі сістэмы.

Ростанях

Цяпер вы павінны вырашыць, ці вы хочаце напісаць XS, ці ж вы проста хочаце атрымаць працу.

Калі вы проста хочаце атрымаць працу, разгледзець магчымасць выкарыстання спрошчанага інтэрфейсу абалонкі і генератара (SWIG). SWIG з'яўляецца інструментам распрацоўкі праграмнага забеспячэння, які злучае Асарці ўжыванне моў праграмавання, такіх як Perl, Python і Tcl, каб Асарці сістэме моў праграмавання, такіх як C, C + + і Objective-C.

SWIG вельмі простая ў выкарыстанні. У самым простым выпадку, вы толькі што бакі вашай .c файл, сказаць яму, што ваша дадатак мову, і яна робіць усё астатняе. Вось, напрыклад, ўзята з дакументацыі SWIG:

unix> swig -perl5 -module example example.c
unix> gcc -c example.c example_wrap.c
unix> ld -G example.o example_wrap.o -o example.so
unix> perl5.005
use example;
print example::factorial(4), "\n";
<ctrl-d>
24

Я мог бы напісаць падручнік па SWIG, але гэта было б залішнім: SWIG ўжо мае шырокую дакументацыю. SWIG можна азнаёміцца ??ў Інтэрнэце, гэта бясплатна, і яна працуе. Калі вы проста хочаце атрымаць працу, гэта SWIG для вас.

Навучанне XS

Калі вы хочаце напісаць XS, у вас ёсць, каб пазнаць яго. Навучанне XS вельмі цяжка, па двух прычынах.

Па-першае, асноўныя дакументы Perl, такіх як perlxs і perlguts, маўкліва мяркуецца, што вы ўжо разумееце, XS. Адпаведна, яны апускаць або затушевывать найважнейшых дапушчэнняў і даведачную інфармацыю. Гэта гучыць дрэнна, але на самай справе даволі часта ў свеце Unix.

Па-другое, вы не можаце навучыцца XS. Не як такой. Не зверху ўніз. Гэтая праблема з'яўляецца значна больш глыбокім, чым першы, і гэта адбываецца не з любых неадпаведнасцях ў дакументацыі, але ад таго, што XS гэта і не з'яўляецца.

Perl дакументы ставяцца да XS, як мова, але гэта не так. XS ўяўляе сабой набор макрасаў. Langauge працэсар XS з'яўляецца праграма пад назвай xsubpp, дзе рр гэта скарачэнне ад препроцессора, і препроцессор ветлівы тэрмін для макраса пашыральніка. xsubpp пашырае XS макрасы ў біт кода C, неабходныя для падлучэння Perl перакладчыка для вашага мовы C-падпраграмы.

Паколькі XS не мова, ёй не хапае структуры. Зыходны код C мае структуру, але вы не можаце яе бачыць, таму што ён хаваецца за макрасы. Гэта робіць практычна немагчымым, каб даведацца XS на сваіх уласных умовах.

Назад да асновам

Для таго каб даведацца XS, вы павінны працаваць "знізу уверх". Вы павінны навучыцца Perl C API. Вы павінны разумець, Perl унутраных структур дадзеных. Вы павінны зразумець, як Perl стэк працуе, і як падпраграма C атрымлівае да яго доступ. Вы павінны зразумець, як атрымаць C падпраграмы звязаны ў Perl выкананы файл. Вы павінны разумець, дадзеныя шляху праз DynaLoader модуля, якія звязваюць імя падпраграмы Perl на кропку ўваходу падпраграмы C.

Як толькі вы зразумееце ўсё гэта, вы не строга неабходна XS: вы можаце напісаць непасрэдна на Perl C API, і ваша C код спасылкі і працаваць пад інтэрпрэтатар Perl.

Калі ў вас код непасрэдна ў Perl C API, вы ўбачыце, што гэта цяжка, памылак, стомна, і паўторы. Вы працягваеце пісаць жа маленькія кавалачкі кода для перамяшчэння параметры ўключэння і выключэння Perl стэка; канвертаваць дадзеныя з ўнутранага прадстаўлення Perl на C пераменным; для праверкі нулявых паказальнікаў і іншыя дрэнныя рэчы. Калі вы робіце памылку, вы не атрымаеце дрэнны выхад: Вы аварыі перакладчыка.

Хрышчэньне Гасподняе

У рэшце рэшт, вы пачынаеце бачыць перавагі ад пакавання гэтыя маленькія кавалачкі кода макрасаў, так што вы можаце запісаць іх адзін раз і затым перастаць турбавацца пра іх. А што вы ведаеце, хто-то ўжо напісаў некалькі макрасаў для вас, ёсць нават гэты макрас пашыральніка называецца xsubpp.

Цяпер вы разумееце, XS.

Досыць цяжка праблемы

Першае, што трэба для таго, каб напісаць модуль XS гэта праграма, якая вам цалкам не магу пісаць ў прамой Perl. Даць З і XS, калі вы маглі пісаць Perl будзе абуральным адмову ленавацца.

Мой любімы Кранчер нумар, які выкарыстоўваецца для хуткага пераўтварэння Фур'е, але, як я думаю пра гэта зараз, здаецца, добра ад. Гэта настолькі класічны, так лінейных, так стары-цёк. Акрамя таго, яна працуе ў O (N * Log (N)), што амаль у паслухмяны ў Perl.

Замест гэтага, я збіраюся кода да Needleman-Вунш (ЗЗ) алгарытм дынамічнага праграмавання для глабальнага аптымальнага выраўноўвання паслядоўнасці. Паслядоўнасць выраўноўвання з'яўляецца важнай праблемай у пярэднім краем вобласці геномікі. Вось

Паслядоўнасць выраўноўванне комбинаторной задачы, і наіўныя алгарытмы працаваць у экспанентныя час. Needleman-Вунш алгарытм працуе ў (больш ці менш) O (N ^ 3), якая па-ранейшаму дрэнна, што геноміка супольнасць выкарыстоўвае спецыялізаванае абсталяванне і сеткавыя базы дадзеных, каб зрабіць іх выраўноўвання.

У якасці арыентыру, я выраўнаваны 2 паслядоўнасці з 200 знакаў. Гэта досыць сціплая задача па стандартам у галіне геномікі. Ажыццяўлення Perl выраўноўвае іх у нешта накшталт 200 або 400 секунд. Дакладны час не мае значэння: гэта займае больш часу, чым я гатовы чакаць.

O (N ^ 3) крок у алгарытме ННК запаўнення Ацэнка матрыцы, а ўсё астатняе працуе ў лінейнае час. Я напісаў праграму на С, што запаўняе Ацэнка матрыцы.

Яна праходзіць тэст 200x200 выраўноўвання на працягу 3 секунд, або прыкладна ў 100 разоў хутчэй, чым рэалізацыя на Perl.

Я не хачу, каб перапісаць астатнія Perl рэалізацыі ў частцы С. алгарытму складаныя, і гэта ў значнай меры абапіраецца на Perl для хатняй гаспадаркі і кіравання памяццю. Гэта свайго роду код, радасць у Perl і цяжару ў С.

Замест гэтага, я хачу выкарыстоўваць ажыццяўлення C запоўніць Ацэнка матрыцы, выкарыстоўваць Perl для ажыццяўлення ўсё астатняе, і выкарыстоўваць XS тэлефанаваць з аднаго на іншага. На працягу наступных чатырох частках гэтага артыкула, мы ўбачым, як гэта зрабіць.

Наступны месяц: Архітэктура

Я сцвярджаў раней, што XS павінны быць вынятыя з знізу ўверх. Ніжняй аказваецца архітэктуры фон Нэймана для захоўваемай праграмы камп'ютэры, і гэта доўга падняцца адтуль. Замест таго, каб гэты шлях, мы пачнем ў верхняй частцы, і будзем рухацца ўніз па аналізу. Гэта дасць нам паняцці, якія мы павінны зразумець, XS.

Існуе шмат матэрыялу для пакрыцця, але альбо вы разумееце архітэктуры пад XS, ці вы храбусткія і добра з кетчупам.


УВАГА

, А агульная
Я да гэтага часу памятаю маё здзіўленне, калі я ўпершыню натыкнуўся на awk(1) старонцы.
PP гэта скарачэнне ад препроцессора
На самай справе, PP з'яўляецца абрэвіятурай ад Perl Псевдокод, але яна гучала добра...
перавага
Яшчэ адна перавага кадавання XS з'яўляецца тое, што шчыты кодзе са зменамі ў Perl C API.
ад
1965 года, як гэта адбываецца.
JW Кулі і Дж. Тьюки, "Алгарытм для машыны разлік складаных шэрагаў Фур'е", Матэматыка вылічэнняў, Vol. 19, 1965, стар 297-301.
Needleman-Вунш
Needleman, СА і Вунш, CD 1970 года. "Агульны метад адносіцца да пошуку падабенства ў амінакіслотных паслядоўнасцях з двух бялкоў" Часопіс малекулярнай біялогіі. 48: 443-453.
Глядзіце таксама
Сміт, TF і Waterman, MS 1981 года. "Вызначэнне агульных малекулярных подпоследовательностей" Часопіс малекулярнай біялогіі. 147: 195-197
O (N ^ 3)
O (N ^ 2), калі разрыў адкрытай штраф роўны нулю
лінейнае час
Сміт-Уотерман алгарытм павінен O (N ^ 2) час, каб знайсці самым выніковым у вочку матрыцы.
Popular Links
Published (Last edited): Apr 27 , source: http://world.std.com/~swmcd/steven/perl/pm/xs/intro/index.html