Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa

Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa

Ka matapakihia e tenei tuhinga tetahi keehi mo te tere ake i te tono tirotiro ma te whakakapi i nga tatauranga JavaScript me te WebAssembly.

WebAssembly - he aha tena?

Hei poto, he whakatakotoranga ako-rua tenei mo te miihini mariko i runga i te puranga. Ko te Wasm (ingoa poto) e kiia ana he reo papatono, engari ehara. Ko te whakatakotoranga tohutohu ka mahia i roto i te kaitirotiro me te JavaScript.

He mea nui kia whiwhi a WebAssembly ma te whakahiato puna ki nga reo penei i te C/C++, Rust, Go. I konei ka whakamahia te patopato tauanga me te tauira mahara papatahi. Ko te waehere, pera i te korero i runga ake nei, kei te rongoa i roto i te whakatakotoranga rua kiato, ka tata te tere o te whakahaere i te tono ma te whakamahi i te raina whakahau. Na enei kaha i piki ake te rongonui o WebAssembly.

Ka whakamahara matou: mo nga kaipānui katoa o "Habr" - he utu mo te 10 rubles i te wa e whakauru ana ki tetahi akoranga Skillbox ma te whakamahi i te waehere whakatairanga "Habr".

Ka tūtohu a Skillbox: Akoranga mahi "Whakawhanake Waea PRO".

I tenei wa, ka whakamahia a Wasm i roto i nga tono maha, mai i nga keemu penei i a Doom 3 ki nga tono tuku-tukutuku penei i a Autocad me Figma. Ka whakamahia ano te Wasm ki nga waahi penei i te rorohiko kore-tumau.

Ko tenei tuhinga he tauira mo te whakamahi Wasm ki te tere ake i te ratonga paetukutuku tātari. Mo te whakamarama, i mauhia e matou he tono mahi kua tuhia ki te C, kua whakahiatohia ki te WebAssembly. Ka whakamahia te hua ki te whakakapi i nga waahanga ngoikore o te JS.

Huringa Taupānga

Ka whakamahia e te tauira te ratonga tirotiro fastq.bio, he mea mo nga tohunga ira. Ko te taputapu ka taea e koe te aromatawai i te kounga o te raupapa DNA (whakaahua).

Anei tetahi tauira o te tono e mahi ana:

Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa

Ko nga korero o te tukanga kaore e pai ki te whakauru i te mea he tino uaua mo nga tohunga kore, engari i roto i te poto, ka taea e nga kaiputaiao te whakamahi i nga korero o runga ake nei ki te mohio mehemea i pai te haere o te tukanga raupapa DNA me nga raruraru i puta.

Kei tenei ratonga etahi atu, he kaupapa papamahi. Engari ko te fastq.bio ka taea e koe te tere ake i to mahi ma te tiro i nga raraunga. I te nuinga atu o nga keehi, me kaha koe ki te mahi me te raina whakahau, engari kaore nga tohunga ira katoa e whai wheako e tika ana.

Ka mahi noa nga mea katoa. Ko te whakauru ko nga raraunga ka whakaatuhia i te ahua o te konae tuhinga. He mea hanga tenei konae e nga taputapu raupapa motuhake. Kei roto i te konae he rarangi o nga raupapa DNA me te kaute kounga mo ia nucleotide. Ko te whakatakotoranga konae he .fastq, na reira i tapaina ai te ingoa o te ratonga.

Te whakatinanatanga i roto i te JavaScript

Ko te mahi tuatahi a te kaiwhakamahi ka mahi tahi me fastq.bio ko te kowhiri i te konae e tika ana. Ma te whakamahi i te ahanoa Kōnae, ka panuihia e te tono he tauira matapōkere o te raraunga mai i te konae me nga tukanga o taua puranga. Ko te mahi a JavaScript i konei ko te mahi aho ngawari me te tatau ine. Ko tetahi o enei ko te maha o nga nucleotides A, C, G me T i runga i nga wahanga DNA rereke.

I muri i te tatau i nga tohu e tika ana, ka whakaatuhia ma te whakamahi i te Plotly.js, ka timata te mahi ki te mahi me tetahi tauira raraunga hou. Ka mahia te tarai ki te whakapai ake i te kounga o te UX. Mena ka mahi tahi koe me nga raraunga katoa i te wa kotahi, ka whakatio te mahi mo etahi wa, na te mea ko nga konae me nga hua raupapa ka pau nga rau gigabytes mokowā kōnae. Ka tangohia e te ratonga etahi waahanga raraunga mai i te 0,5 ki te 1 MB me te mahi tahi me ratou i ia taahiraa, hanga raraunga kauwhata.

Ko te mahi tenei:

Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa

Kei roto i te tapawhā tapawhā whero te hātepe huringa aho mō te whakakitenga. Koinei te waahanga tino kaha o te mahi rorohiko. He pai te ngana ki te whakakapi ki a Wasm.

Whakamatau WebAssembly

Hei aromatawai i te kaha ki te whakamahi i te Wasm, i timata te roopu kaupapa ki te rapu otinga kua rite mo te hanga ine QC (QC - mana kounga) i runga i nga konae fastq. I mahia te rapunga i waenga i nga taputapu kua tuhia ki te C, C++, ki te Rust ranei, kia taea ai te kawe i te waehere ki WebAssembly. Hei taapiri, kaua e "mata" te taputapu; he ratonga kua whakamatauria e nga kaiputaiao.

Ko te mutunga, ko te kowhiringa i pai ai tuakoi. He tino rongonui te tono, he tuwhera-puna, ko te reo puna ko C.

I mua i te huri ki Wasm, he pai ki te titiro ki te kaupapa whakahiato o seqtk mo te papamahi. E ai ki te Makefile, koinei nga mea e hiahia ana koe:

# Compile to binary
$ gcc seqtk.c 
   -o seqtk 
   -O2 
   -lm 
   -lz

Ko te tikanga, ka taea e koe te whakahiato seqtk ma te whakamahi i te Emscripten. Mena kaore i reira, ka mahia e matou. Whakaahua Docker.

$ docker pull robertaboukhalil/emsdk:1.38.26
$ docker run -dt --name wasm-seqtk robertaboukhalil/emsdk:1.38.26

Ki te hiahiatia Ka taea e koe te whakaemi i a koe ano, engari he wa roa.

I roto i te ipu, ka taea e koe te whakamahi i te emcc hei rereke ki te gcc:

# Compile to WebAssembly
$ emcc seqtk.c 
    -o seqtk.js 
    -O2 
    -lm 
    -s USE_ZLIB=1 
    -s FORCE_FILESYSTEM=1

Nga huringa iti:

Engari ki te whakaputa ki te konae rua, ka whakamahia e Emscripten te .wasm me te .js hei whakaputa i nga konae, ka whakamahia hei whakahaere i te waahanga WebAssemby.

Ka whakamahia te haki USE_ZLIB hei tautoko i te whare pukapuka zlib. Kua tohatohahia te wharepukapuka me te kawe ki te WebAssembly, a ka whakaurua e Emscripten ki roto i te kaupapa.

Kua whakahohehia te punaha konae mariko Emscripten. Tenei POSIX-rite FS, rere i roto i te RAM i roto i te pūtirotiro. Ina tāmatahia te wharangi, ka whakawāteatia te pūmahara.

Kia mohio ai koe he aha te mea e hiahiatia ana he punaha konae mariko, he mea tika ki te whakataurite i te huarahi e whakahaere ai koe i te seqtk mai i te raina whakahau me te huarahi e whakahaere ana koe i tetahi waahanga WebAssembly kua whakahiato.

# On the command line
$ ./seqtk fqchk data.fastq
 
# In the browser console
> Module.callMain(["fqchk", "data.fastq"])

Ko te whai waahi ki te punaha konae mariko he mea tika kia kore e tuhia ano te seqtk mo te aho, kaua ki te whakauru i te konae. I tenei keehi, ka whakaatuhia te waahanga raraunga hei konae data.fastq i roto i te FS mariko me te waea ki te matua() seqtk ki runga.

Anei te hoahoanga hou:

Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa

E whakaatu ana te whika hei utu mo nga tatauranga i roto i te miro tirotiro matua, Kaimahi Tukutuku. Ma tenei tikanga ka taea e koe te mahi tatauranga i roto i te miro papamuri me te kore e pa ki te aro o te tirotiro. Ana, ka timata te kaiwhakahaere WebWorker i te Kaimahi, te whakahaere i tana taunekeneke me te miro matua.

Ka whakahaerehia te whakahau seqtk ma te whakamahi i te Kaimahi i runga i te konae kua eke. I muri i te whakaotinga o te mahi, ka puta he hua o te Kaimahi i roto i te ahua o te Whakaaetanga. Ina tae mai he karere e te miro matua, ka whakamahia te hua hei whakahou i nga kauwhata. A pera i roto i te maha whitiwhitinga.

He aha te mahi a WebAssembly?

Hei arotake i te huringa o te mahi, i whakamahia e te roopu kaupapa nga mahi panui mo ia tawhā tuarua. Ko te waa ki te hanga kauwhata tauwhitinga kaore e whakaarohia mai i te mea ka whakamahia e nga whakatinanatanga e rua te JavaScript.

I te whakamahi i te otinga o waho o te pouaka, e iwa nga wa o te pikinga o nga mahi.

Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa

He hua tino pai tenei, engari, i te mea ka puta, he waahi ki te arotau ano hoki. Ko te meka ko te maha o nga hua tātaritanga QC kaore i te whakamahia e te seqtk, na reira ka taea te whakakore. Mena ka mahi koe i tenei, ka pai ake te hua ma te 13 nga wa ka whakaritea ki a JS.

Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa

I tutuki ma te korero noa i nga whakahau printf().

Engari ehara i te mea ko tera anake. Ko te meka i tenei wa, ka whiwhi a fastq.bio i nga hua tātaritanga ma te karanga i nga momo mahi C. Ka tatauhia e ia o raatau ake ahuatanga, kia rua nga panui o ia wahanga o te konae.

Hei whakatika i tenei raru, i whakatauhia kia whakakotahi nga mahi e rua ki te kotahi. Ko te mutunga mai, 20 nga wa i piki ake ai te hua.

Me pehea te whakamahi i te WebAssembly ki te tere ake i te tono paetukutuku 20 nga wa

He mea tika kia mohio ko tenei hua tino pai kaore e taea te whakatutuki i nga wa katoa. I etahi wa, ka heke te mahi, no reira he pai ki te arotake i ia keehi.

Hei whakatau, ka taea e taatau te kii ka whai waahi a Wasm ki te whakapai ake i nga mahi tono, engari me whakamahi tika koe.

Ka tūtohu a Skillbox:

Source: will.com

Tāpiri i te kōrero