Не ўмешвайцеся ў справы майстры, таму што вы храбусткія і добра з кетчупам.
Гэтая артыкул складаецца з пяці частак
| Лістапад | Увядзенне | матывацыі, вызначэння, прыклады |
| Снежань | Архітэктура | інтэрпрэтатар Perl, выкліках, прадстаўленне даных |
| Студзень | Інструменты | h2xs, xsubpp, DynaLoader |
| Лютага | Модулі | Math::Ackermann, Set::Bit |
| Сакавік | Align::NW | Needleman-Вунш глабальнага выраўноўвання паслядоўнасці аптымальнай |
Вузка, XS гэтае імя клей мову, які выкарыстоўваецца для ўказання падпраграмы інтэрфейсаў і пераўтварэння даных неабходна выклікаць C з Perl. У больш шырокім, XS ўключае сістэмы праграм і аб'ектаў, якія працуюць разам для дасягнення гэтай мэты: h2xs, MakeMaker, xsubpp, DynaLoader, і язык XS сябе. Мы будзем казаць аб усіх гэтых пазней.
У больш агульным плане, Perl з'яўляецца мовай праграмавання прыкладанняў. Ён дае магутныя сродкі, такія як аўтаматычная ўвод дадзеных, аўтаматычнае кіраванне памяццю, хэш-табліцы, і рэгулярныя выразы. Яны робяць гэта лёгка болт разам прыкладання, без неабходнасці ўдзелу ў кожнай дробязі. Практыка паказвае, што гэтыя аб'екты маюць істотныя выдаткі часу выканання.
У адрозненне, C і C + + прыклады моў праграмавання сістэмы. Яны забяспечваюць кантроль за кожнага цыклу працэсара і кожны байт, так што ўнутраныя цыклы могуць быць хутка і крытычныя структуры дадзеных могуць быць невялікімі. Практыка паказвае, што ў вас ёсць, каб праграма кожнага цыклу працэсара і кожны байт у ўсёй праграмы: нават часткі, якія не звязаны працэсара.
XS дазваляе нам мець лепшае з абодвух сьветаў. З XS, мы можам выкарыстоўваць Perl для частка нашага кода, і З толькі тыя часткі, якія патрабуюць тонкага кантролю над рэсурсамі сістэмы.
Калі вы проста хочаце атрымаць працу, разгледзець магчымасць выкарыстання спрошчанага інтэрфейсу абалонкі і генератара (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 для вас.
Па-першае, асноўныя дакументы 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, і ваша C код спасылкі і працаваць пад інтэрпрэтатар Perl.
Калі ў вас код непасрэдна ў Perl C API, вы ўбачыце, што гэта цяжка, памылак, стомна, і паўторы. Вы працягваеце пісаць жа маленькія кавалачкі кода для перамяшчэння параметры ўключэння і выключэння Perl стэка; канвертаваць дадзеныя з ўнутранага прадстаўлення Perl на C пераменным; для праверкі нулявых паказальнікаў і іншыя дрэнныя рэчы. Калі вы робіце памылку, вы не атрымаеце дрэнны выхад: Вы аварыі перакладчыка.
xsubpp. Цяпер вы разумееце, XS.
Мой любімы Кранчер нумар, які выкарыстоўваецца для хуткага пераўтварэння Фур'е, але, як я думаю пра гэта зараз, здаецца, добра ад. Гэта настолькі класічны, так лінейных, так стары-цёк. Акрамя таго, яна працуе ў 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, ці вы храбусткія і добра з кетчупам.
awk(1) старонцы.