рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ реиреж рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди WebAssembly рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ

рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ реиреж рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди WebAssembly рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ

рдпреЛ рд▓реЗрдЦрд▓реЗ WebAssembly рд╕рдБрдЧ JavaScript рдЧрдгрдирд╛рд╣рд░реВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реЗрд░ рдмреНрд░рд╛рдЙрдЬрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдЧрддрд┐ рдмрдврд╛рдЙрдиреЗ рдорд╛рдорд▓рд╛рдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрджрдЫред

WebAssembly - рдпреЛ рдХреЗ рд╣реЛ?

рдЫреЛрдЯрдХрд░реАрдорд╛, рдпреЛ рд╕реНрдЯреНрдпрд╛рдХ-рдЖрдзрд╛рд░рд┐рдд рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рдЗрдирд░реА рдирд┐рд░реНрджреЗрд╢рди рдврд╛рдБрдЪрд╛ рд╣реЛред Wasm (рдЫреЛрдЯреЛ рдирд╛рдо) рд▓рд╛рдИ рдкреНрд░рд╛рдп: рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рднрдирд┐рдиреНрдЫ, рддрд░ рдпреЛ рд╣реЛрдЗрдиред рдирд┐рд░реНрджреЗрд╢рди рдврд╛рдБрдЪрд╛ рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдХреЛ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫред

рдпреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рдХрд┐ WebAssembly C/C++, Rust, Go рдЬрд╕реНрддрд╛ рднрд╛рд╖рд╛рд╣рд░реВрдорд╛ рд╕реНрд░реЛрддрд╣рд░реВ рд╕рдВрдХрд▓рди рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрд╣рд╛рдБ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЯрд╛рдЗрдкрд┐рдЩ рд░ рддрдерд╛рдХрдерд┐рдд рдлреНрд▓реНрдпрд╛рдЯ рдореЗрдореЛрд░реА рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдХреЛрдб, рдорд╛рдерд┐ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдП рдЕрдиреБрд╕рд╛рд░, рдХрдореНрдкреНрдпрд╛рдХреНрдЯ рдмрд╛рдЗрдирд░реА рдврд╛рдБрдЪрд╛рдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдпрд╕рд▓рд╛рдИ рд▓рдЧрднрдЧ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдЙрдиреЗ рдЬрддреНрддрд┐рдХреИ рдЫрд┐рдЯреЛ рдмрдирд╛рдЙрдБрдЫред рдпреА рдХреНрд╖рдорддрд╛рд╣рд░реВрд▓реЗ WebAssembly рдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛рдХреЛ рд╡реГрджреНрдзрд┐рдХреЛ рдиреЗрддреГрддреНрд╡ рдЧрд░реЗрдХреЛ рдЫред

рд╣рд╛рдореА рд╕рдореНрдЭрд╛рдЙрдБрдЫреМрдВ: рд╕рдмреИ Habr рдкрд╛рдардХрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ - Habr рдкреНрд░реЛрдореЛ рдХреЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдХреБрдиреИ рдкрдирд┐ Skillbox рдкрд╛рдареНрдпрдХреНрд░рдордорд╛ рднрд░реНрдирд╛ рдЧрд░реНрджрд╛ резреж,режрежреж рд░реВрдмрд▓ рдЫреБрдЯред

Skillbox рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо "рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдкреНрд░реЛ".

рд╣рд╛рд▓, Wasm рдзреЗрд░реИ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, Doom 3 рдЬрд╕реНрддрд╛ рдЧреЗрдорд╣рд░реВрджреЗрдЦрд┐ рд▓рд┐рдПрд░ Autocad рд░ Figma рдЬрд╕реНрддрд╛ рд╡реЗрдм-рдкреЛрд░реНрдЯреЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ред Wasm рдкрдирд┐ рд╕рд░реНрднрд░рд▓реЗрд╕ рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рдЬрд╕реНрддрд╛ рдХреНрд╖реЗрддреНрд░рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

рдпрд╕ рд▓реЗрдЦрд▓реЗ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд╡реЗрдм рд╕реЗрд╡рд╛рд▓рд╛рдИ рдЧрддрд┐ рджрд┐рди Wasm рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рд╕реНрдкрд╖реНрдЯрддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ C рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдХрд╛рд░реНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рдпреМрдВ, рдЬреБрди WebAssembly рдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ рдЫред рдкрд░рд┐рдгрд╛рдо JS рдХреЛ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдЦрдгреНрдбрд╣рд░реВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫред

рдЖрд╡реЗрджрди рд░реВрдкрд╛рдиреНрддрд░рдг

рдЙрджрд╛рд╣рд░рдгрд▓реЗ fastq.bio рдмреНрд░рд╛рдЙрдЬрд░ рд╕реЗрд╡рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫ, рдЬреБрди рдЖрдиреБрд╡рдВрд╢рд┐рдХрд╡рд┐рджреНрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛред рдЙрдкрдХрд░рдгрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ DNA рдЕрдиреБрдХреНрд░рдордг (рдбрд┐рд╕рд┐рдлрд░рд┐рдЩ) рдХреЛ рдЧреБрдгрд╕реНрддрд░ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рдпрд╣рд╛рдБ рдХрд╛рд░реНрдп рдорд╛ рдЖрд╡реЗрджрди рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЫ:

рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ реиреж рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди WebAssembly рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ

рдЧреИрд░-рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рднрдПрдХрд╛рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдЬрд╛рди рд▓рд╛рдпрдХ рдЫреИрди, рддрд░ рдЫреЛрдЯрдХрд░реАрдорд╛, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХрд╣рд░реВрд▓реЗ DNA рдЕрдиреБрдХреНрд░рдордг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд╣рдЬ рд░реВрдкрдорд╛ рдЧрдпреЛ рд░ рдХреЗ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рднрдпреЛ рднрдиреЗрд░ рдмреБрдЭреНрди рдорд╛рдерд┐рдХреЛ рдЗрдиреНрдлреЛрдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред

рдпреЛ рд╕реЗрд╡рд╛рдорд╛ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ, рдбреЗрд╕реНрдХрдЯрдк рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рдЫрдиреНред рддрд░ fastq.bio рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдбрд╛рдЯрд╛рдХреЛ рджреГрд╢реНрдпрд╛рд╡рд▓реЛрдХрди рдЧрд░реЗрд░ рдЖрдлреНрдиреЛ рдХрд╛рдордХреЛ рдЧрддрд┐ рдмрдврд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдзреЗрд░реИ рдЬрд╕реЛ рдЕрдиреНрдп рдЕрд╡рд╕реНрдерд╛рдорд╛, рддрдкрд╛рдЗрдБ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рддрд░ рд╕рдмреИ рдЖрдиреБрд╡рдВрд╢рд┐рдХреАрд╣рд░реБ рд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрднрд╡ рдЫреИрдиред

рд╕рдмреИ рдХреБрд░рд╛ рд╕рд░рд▓ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫред рдЗрдирдкреБрдЯ рдкрд╛рда рдлрд╛рдЗрд▓рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╕реНрддреБрдд рдбрд╛рдЯрд╛ рд╣реЛред рдпреЛ рдлрд╛рдЗрд▓ рд╡рд┐рд╢реЗрд╖ рдХреНрд░рдордмрджреНрдз рдЙрдкрдХрд░рдгрд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рдлрд╛рдЗрд▓рд▓реЗ DNA рдЕрдиреБрдХреНрд░рдорд╣рд░реВрдХреЛ рд╕реВрдЪреА рд░ рдкреНрд░рддреНрдпреЗрдХ рдиреНрдпреВрдХреНрд▓рд┐рдпреЛрдЯрд╛рдЗрдбрдХреЛ рд▓рд╛рдЧрд┐ рдЧреБрдгрд╕реНрддрд░ рд╕реНрдХреЛрд░ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдлрд╛рдЗрд▓ рдврд╛рдБрдЪрд╛ .fastq рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ рдпреЛ рд╕реЗрд╡рд╛рдХреЛ рдирд╛рдо рднрдпреЛред

JavaScript рдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

fastq.bio рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдкрд╣рд┐рд▓реЛ рдЪрд░рдг рдЙрдкрдпреБрдХреНрдд рдлрд╛рдЗрд▓ рдЪрдпрди рдЧрд░реНрдиреБ рд╣реЛред рдлрд╛рдЗрд▓ рд╡рд╕реНрддреБ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рдлрд╛рдЗрд▓рдмрд╛рдЯ рдбрд╛рдЯрд╛рдХреЛ рдЕрдирд┐рдпрдорд┐рдд рдирдореВрдирд╛ рдкрдвреНрдЫ рд░ рддреНрдпреЛ рдмреНрдпрд╛рдЪрд▓рд╛рдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрджрдЫред рдпрд╣рд╛рдБ JavaScript рдХреЛ рдХрд╛рдо рд╕рд░рд▓ рд╕реНрдЯреНрд░рд┐рдЩ рдЕрдкрд░реЗрд╕рдирд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЧрдгрдирд╛ рдЧрд░реНрди рд╣реЛред рддреА рдордзреНрдпреЗ рдПрдХ рдиреНрдпреВрдХреНрд▓рд┐рдпреЛрдЯрд╛рдЗрдбреНрд╕ рдП, рд╕реА, рдЬреА рд░ рдЯреА рд╡рд┐рднрд┐рдиреНрди DNA рдЯреБрдХреНрд░рд╛рд╣рд░реВрдорд╛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛред

рдЖрд╡рд╢реНрдпрдХ рд╕реВрдЪрдХрд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рддрд┐рдиреАрд╣рд░реВ Plotly.js рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рджреГрд╢реНрдпрд╛рддреНрдордХ рд╣реБрдиреНрдЫрдиреН, рд░ рд╕реЗрд╡рд╛рд▓реЗ рдирдпрд╛рдБ рдбреЗрдЯрд╛ рдирдореВрдирд╛рдХреЛ рд╕рд╛рде рдХрд╛рдо рдЧрд░реНрди рдерд╛рд▓реНрдЫред UX рдХреЛ рдЧреБрдгрд╕реНрддрд░ рд╕реБрдзрд╛рд░ рдЧрд░реНрди chunking рдЧрд░рд┐рдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдПрдХреИрдЪреЛрдЯрд┐ рд╕рдмреИ рдбрд╛рдЯрд╛рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд╣реА рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдерд┐рд░ рд╣реБрдиреЗрдЫ, рдХрд┐рдирдХрд┐ рдЕрдиреБрдХреНрд░рдо рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рднрдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрд▓реЗ рд╕рдпреМрдВ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдлрд╛рдЗрд▓ рд╕реНрдкреЗрд╕ рд▓рд┐рдиреНрдЫрдиреНред рд╕реЗрд╡рд╛рд▓реЗ 0,5 рджреЗрдЦрд┐ 1 MB рд╕рдореНрдордХреЛ рд╕рд╛рдЗрдЬрдорд╛ рдбреЗрдЯрд╛рдХреЛ рдЯреБрдХреНрд░рд╛рд╣рд░реВ рд▓рд┐рдиреНрдЫ рд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдЪрд░рдгрдмрджреНрдз рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ, рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдбреЗрдЯрд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрдЫред

рдпреЛ рдХрд╕рд░реА рдпреЛ рдХрд╛рдо рдЧрд░реНрджрдЫ:

рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ реиреж рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди WebAssembly рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ

рд░рд╛рддреЛ рдЖрдпрддрд▓реЗ рджреГрд╢реНрдп рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдЯреНрд░рд┐рдЩ рд░реВрдкрд╛рдиреНрддрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдпреЛ рд╕реЗрд╡рд╛рдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓реА рдЧрд╣рди рднрд╛рдЧ рд╣реЛред рдпрд╕рд▓рд╛рдИ Wasm рдХреЛ рд╕рд╛рде рдмрджрд▓реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫред

WebAssembly рдкрд░реАрдХреНрд╖рдг

Wasm рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛рдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрди, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЯреЛрд▓реАрд▓реЗ fastq рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд QC рдореЗрдЯреНрд░рд┐рдХреНрд╕ (QC - рдЧреБрдгрд╕реНрддрд░ рдирд┐рдпрдиреНрддреНрд░рдг) рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдЦреЛрдЬреНрди рдерд╛рд▓реНрдпреЛред рдЦреЛрдЬ C, C++ рд╡рд╛ Rust рдорд╛ рд▓реЗрдЦрд┐рдПрдХрд╛ рдЙрдкрдХрд░рдгрд╣рд░реВ рдмреАрдЪрдорд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рддрд╛рдХрд┐ рдХреЛрдбрд▓рд╛рдИ WebAssembly рдорд╛ рдкреЛрд░реНрдЯ рдЧрд░реНрди рд╕рдореНрднрд╡ рднрдпреЛред рдердк рд░реВрдкрдорд╛, рдЙрдкрдХрд░рдг "рдХрдЪреНрдЪрд╛" рд╣реБрдиреБ рд╣реБрдБрджреИрди; рдПрдХ рд╕реЗрд╡рд╛ рдЬреБрди рдкрд╣рд┐рд▓реЗ рдиреИ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХрд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдерд┐рдпреЛред

рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдЫрдиреМрдЯрдХреЛ рдкрдХреНрд╖рдорд╛ рдмрдирд╛рдЗрдПрдХреЛ рдерд┐рдпреЛ seqtkред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдзреЗрд░реИ рд▓реЛрдХрдкреНрд░рд┐рдп рдЫ, рдпреЛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реЛ, рд╕реНрд░реЛрдд рднрд╛рд╖рд╛ рд╕реА рд╣реЛред

Wasm рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБ рдЕрдШрд┐, рдпреЛ рдбреЗрд╕реНрдХрдЯрдкрдХреЛ рд▓рд╛рдЧрд┐ seqtk рдХреЛ рд╕рдВрдХрд▓рди рд╕рд┐рджреНрдзрд╛рдиреНрдд рд╣реЗрд░реНрди рд▓рд╛рдпрдХ рдЫред Makefile рдЕрдиреБрд╕рд╛рд░, рдпрд╣рд╛рдБ рдХреЗ рддрдкрд╛рдИрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЫ:

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

рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, рддрдкрд╛рдИрдВ Emscripten рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ seqtk рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрджрд┐ рдпреЛ рддреНрдпрд╣рд╛рдБ рдЫреИрди рднрдиреЗ, рд╣рд╛рдореА рдЧрд░реНрдЫреМрдВред рдбрдХрд░ рдЫрд╡рд┐.

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

рдпрджрд┐ рдЪрд╛рд╣рд┐рдпреЛ рднрдиреЗ рддрдкрд╛рдИрдВ рдпрд╕рд▓рд╛рдИ рдЖрдлреИрдВ рдЬрдореНрдорд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫрддрд░ рд╕рдордп рд▓рд╛рдЧреНрдЫред

рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░, рддрдкрд╛рдИрдВ рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ gcc рдХреЛ рд╡рд┐рдХрд▓реНрдкрдХреЛ рд░реВрдкрдорд╛ emcc рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

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

рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ:

рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓рдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, Emscripten рд▓реЗ рдлрд╛рдЗрд▓рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди .wasm рд░ .js рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫ, рдЬреБрди WebAssemby рдореЛрдбреНрдпреБрд▓ рдЪрд▓рд╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

USE_ZLIB рдЭрдгреНрдбрд╛ zlib рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдорд░реНрдерди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ WebAssembly рдорд╛ рдкреЛрд░реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ Emscripten рд▓реЗ рдпрд╕рд▓рд╛рдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

Emscriptten рднрд░реНрдЪреБрдЕрд▓ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рд╕рдХреНрд░рд┐рдп рдЫред рдпреЛ POSIX-рдЬрд╕реНрддреЛ FS, рдмреНрд░рд╛рдЙрдЬрд░ рднрд┐рддреНрд░ RAM рдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫред рдЬрдм рдкреГрд╖реНрда рддрд╛рдЬрд╛ рд╣реБрдиреНрдЫ, рдореЗрдореЛрд░реА рдЦрд╛рд▓реА рд╣реБрдиреНрдЫред

рднрд░реНрдЪреБрдЕрд▓ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗрд░ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирдмрд╛рдЯ seqtk рдЪрд▓рд╛рдЙрдиреЗ рддрд░рд┐рдХрд╛рд▓рд╛рдИ рддрдкрд╛рдИрдВрд▓реЗ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ WebAssembly рдореЛрдбреНрдпреБрд▓ рдЪрд▓рд╛рдЙрдиреЗ рддрд░рд┐рдХрд╛рд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫред

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

рднрд░реНрдЪреБрдЕрд▓ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рддрд╛рдХрд┐ рдлрд╛рдЗрд▓ рдЗрдирдкреБрдЯрдХреЛ рд╕рдЯреНрдЯрд╛ рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ seqtk рдкреБрди: рд▓реЗрдЦреНрди рдирдкрд░реЛрд╕реНред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдбреЗрдЯрд╛ рдЯреБрдХреНрд░рд╛рд▓рд╛рдИ рднрд░реНрдЪреБрдЕрд▓ FS рдорд╛ data.fastq рдлрд╛рдЗрд▓рдХреЛ рд░реВрдкрдорд╛ рдореБрдЦреНрдп() seqtk рд▓рд╛рдИ рдХрд▓ рдЧрд░реЗрд░ рджреЗрдЦрд╛рдЗрдиреНрдЫред

рдпрд╣рд╛рдБ рдирдпрд╛рдБ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЫ:

рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ реиреж рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди WebAssembly рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ

рддрдереНрдпрд╛рдЩреНрдХрд▓реЗ рджреЗрдЦрд╛рдЙрдБрдЫ рдХрд┐ рдореБрдЦреНрдп рдмреНрд░рд╛рдЙрдЬрд░ рдереНрд░реЗрдбрдорд╛ рдЧрдгрдирд╛рдХреЛ рд╕рдЯреНрдЯрд╛, рд╡реЗрдмрд╡рд░реНрдХрд░рд╣рд░реВред рдпреЛ рд╡рд┐рдзрд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдмреНрд░рд╛рдЙрдЬрд░рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛рд▓рд╛рдИ рдЕрд╕рд░ рдирдЧрд░реА рдкреГрд╖реНрдарднреВрдорд┐ рдереНрд░реЗрдбрдорд╛ рдЧрдгрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдареАрдХ рдЫ, WebWorker рдирд┐рдпрдиреНрддреНрд░рдХрд▓реЗ рдореБрдЦреНрдп рдереНрд░реЗрдбрд╕рдБрдЧ рдпрд╕рдХреЛ рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрджреИ, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реБрд░реБ рдЧрд░реНрджрдЫред

seqtk рдЖрджреЗрд╢ рдорд╛рдЙрдиреНрдЯ рдЧрд░рд┐рдПрдХреЛ рдлрд╛рдЗрд▓рдорд╛ Worker рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЪрд▓рд╛рдЗрдиреНрдЫред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░рд╛ рднрдПрдкрдЫрд┐, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рд▓реЗ рдкреНрд░рддрд┐рдЬреНрдЮрд╛рдХреЛ рд░реВрдкрдорд╛ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫред рдЬрдм рд╕рдиреНрджреЗрд╢ рдореБрдЦреНрдп рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреНрдЫ, рдкрд░рд┐рдгрд╛рдо рдЧреНрд░рд╛рдлрд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рд░ рдпрд╕реНрддреИ рдзреЗрд░реИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рд╣рд░реВрдорд╛ред

WebAssembly рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╛рд░реЗ рдорд╛ рдХреЗ рд╣реЛ?

рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЯреЛрд▓реАрд▓реЗ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкрдвреНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреЛред рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЧреНрд░рд╛рдлрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд▓рд╛рдЧреНрдиреЗ рд╕рдордпрд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫреИрди рдХрд┐рдирднрдиреЗ рджреБрд╡реИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд╣рд░реВрд▓реЗ JavaScript рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред

рдЖрдЙрдЯ-рдЕрдл-рдж-рдмрдХреНрд╕ рд╕рдорд╛рдзрд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ рдиреМ рдЧреБрдгрд╛ рдерд┐рдпреЛред

рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ реиреж рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди WebAssembly рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ

рдпреЛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рд╣реЛ, рддрд░, рдпреЛ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреНрдЫ, рддреНрдпрд╣рд╛рдБ рдкрдирд┐ рдпрд╕рд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрдиреЗ рдЕрд╡рд╕рд░ рдЫред рддрдереНрдп рдпреЛ рд╣реЛ рдХрд┐ QC рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдгрд╛рдорд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ seqtk рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рддреНрдпрд╕реИрд▓реЗ рддрд┐рдиреАрд╣рд░реВ рдореЗрдЯрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рдкрд░рд┐рдгрд╛рдо JS рдХреЛ рддреБрд▓рдирд╛рдорд╛ 13 рдЧреБрдгрд╛рд▓реЗ рд╕реБрдзрд╛рд░ рд╣реБрдиреНрдЫред

рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ реиреж рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди WebAssembly рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ

рдпреЛ рдХреЗрд╡рд▓ printf() рдЖрджреЗрд╢рд╣рд░реВ рдЯрд┐рдкреНрдкрдгреА рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рдерд┐рдпреЛред

рддрд░ рдпрддрд┐ рдорд╛рддреНрд░ рд╣реЛрдЗрдиред рддрдереНрдп рдпреЛ рд╣реЛ рдХрд┐ рдпрд╕ рдЪрд░рдгрдорд╛, fastq.bio рд▓реЗ рд╡рд┐рднрд┐рдиреНрди C рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдХрд▓ рдЧрд░реЗрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫред рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрд▓реЗ рдЖрдлреНрдиреИ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрдХреЛ рд╕реЗрдЯ рдЧрдгрдирд╛ рдЧрд░реНрджрдЫ, рддрд╛рдХрд┐ рдлрд╛рдЗрд▓рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХреНрд░рд╛ рджреБрдИ рдкрдЯрдХ рдкрдврд┐рдпреЛред

рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╡рд░рд┐рдкрд░рд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рдпреЛ рдПрдХ рдорд╛ рджреБрдИ рдкреНрд░рдХрд╛рд░реНрдп рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рдирд┐рд░реНрдгрдп рдЧрд░рд┐рдпреЛред рдлрд▓рд╕реНрд╡рд░реВрдк, рдЙрддреНрдкрд╛рджрдХрддрд╛ 20 рдЧреБрдгрд╛ рдмрдвреНрдпреЛред

рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ реиреж рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди WebAssembly рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ

рдпреЛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЫ рдХрд┐ рдпрд╕реНрддреЛ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рд╕рдзреИрдВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред рдХреЗрд╣реА рдЕрд╡рд╕реНрдерд╛рдорд╛, рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдШрдЯреНрдиреЗрдЫ, рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╕рдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫред

рдирд┐рд╖реНрдХрд░реНрд╖рдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореА рднрдиреНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ Wasm рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдЧрд░реНрдиреЗ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рдмреБрджреНрдзрд┐рдорд╛рдиреАрдкреВрд░реНрд╡рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

Skillbox рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫ:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди