ืื™ืš ื”ืฉืชืžืฉื ื• ื‘-WebAssembly ื›ื“ื™ ืœื”ืื™ืฅ ื™ื™ืฉื•ื ืื™ื ื˜ืจื ื˜ 20 ืคืขืžื™ื

ืื™ืš ื”ืฉืชืžืฉื ื• ื‘-WebAssembly ื›ื“ื™ ืœื”ืื™ืฅ ื™ื™ืฉื•ื ืื™ื ื˜ืจื ื˜ 20 ืคืขืžื™ื

ืžืืžืจ ื–ื” ื“ืŸ ื‘ืžืงืจื” ืœื”ืืฆืช ื™ื™ืฉื•ื ื“ืคื“ืคืŸ ืขืœ ื™ื“ื™ ื”ื—ืœืคืช ื—ื™ืฉื•ื‘ื™ JavaScript ื‘-WebAssembly.

WebAssembly - ืžื” ื–ื”?

ื‘ืงื™ืฆื•ืจ, ื–ื”ื• ืคื•ืจืžื˜ ื”ื•ืจืื•ืช ื‘ื™ื ืืจื™ื•ืช ืœืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืžื‘ื•ืกืกืช ืžื—ืกื ื™ืช. Wasm (ืฉื ืงืฆืจ) ื ืงืจืืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืฉืคืช ืชื›ื ื•ืช, ืื‘ืœ ื”ื™ื ืœื. ืคื•ืจืžื˜ ื”ื”ื•ืจืื•ืช ืžื‘ื•ืฆืข ื‘ื“ืคื“ืคืŸ ื™ื—ื“ ืขื JavaScript.

ื—ืฉื•ื‘ ืฉื ื™ืชืŸ ื™ื”ื™ื” ืœื”ืฉื™ื’ WebAssembly ืขืœ ื™ื“ื™ ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ ืžืงื•ืจื•ืช ื‘ืฉืคื•ืช ื›ืžื• C/C++, Rust, Go. ื›ืืŸ ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื”ืงืœื“ื” ืกื˜ื˜ื™ืกื˜ื™ืช ื•ื‘ืžื•ื“ืœ ื”ื–ื™ื›ืจื•ืŸ ื”ืฉื˜ื•ื— ืฉื ืงืจื. ื”ืงื•ื“, ื›ืืžื•ืจ ืœืขื™ืœ, ืžืื•ื—ืกืŸ ื‘ืคื•ืจืžื˜ ื‘ื™ื ืืจื™ ืงื•ืžืคืงื˜ื™, ืžื” ืฉื”ื•ืคืš ืื•ืชื• ืœืžื”ื™ืจ ื›ืžืขื˜ ื›ืžื• ื”ืคืขืœืช ื”ื™ื™ืฉื•ื ื‘ืืžืฆืขื•ืช ืฉื•ืจืช ื”ืคืงื•ื“ื”. ื™ื›ื•ืœื•ืช ืืœื• ื”ื•ื‘ื™ืœื• ืœืฆืžื™ื—ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ืฉืœ WebAssembly.

ืื ื• ืžื–ื›ื™ืจื™ื: ืœื›ืœ ืงื•ืจืื™ Habr - ื”ื ื—ื” ืฉืœ 10 ืจื•ื‘ืœ ื‘ืขืช ื”ืจืฉืžื” ืœื›ืœ ืงื•ืจืก Skillbox ื‘ืืžืฆืขื•ืช ืงื•ื“ ื”ื”ื˜ื‘ื” ืฉืœ Habr.

Skillbox ืžืžืœื™ืฆื”: ืงื•ืจืก ืžืขืฉื™ "Mobile Developer PRO".

ื ื›ื•ืŸ ืœืขื›ืฉื™ื•, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘- Wasm ื‘ื™ื™ืฉื•ืžื™ื ืจื‘ื™ื, ืžืžืฉื—ืงื™ื ื›ืžื• Doom 3 ื•ืขื“ ืœื™ื™ืฉื•ืžื™ื ืžื ื•ืขื™ ืื™ื ื˜ืจื ื˜ ื›ืžื• Autocad ื•- Figma. Wasm ืžืฉืžืฉ ื’ื ื‘ืชื—ื•ืžื™ื ื›ืžื• ืžื—ืฉื•ื‘ ืœืœื ืฉืจืช.

ืžืืžืจ ื–ื” ืžืกืคืง ื“ื•ื’ืžื” ืœืฉื™ืžื•ืฉ ื‘- Wasm ื›ื“ื™ ืœื”ืื™ืฅ ืฉื™ืจื•ืช ืื™ื ื˜ืจื ื˜ ื ื™ืชื•ื—ื™. ืœืžืขืŸ ื”ื‘ื”ื™ืจื•ืช, ืœืงื—ื ื• ืืคืœื™ืงืฆื™ื” ืขื•ื‘ื“ืช ื›ืชื•ื‘ื” ื‘-C, ืืฉืจ ืžื•ืจื›ื‘ืช ืœืชื•ืš WebAssembly. ื”ืชื•ืฆืื” ืชืฉืžืฉ ืœื”ื—ืœืคืช ื—ืœืงื™ื ืขื ื‘ื™ืฆื•ืขื™ื ื ืžื•ื›ื™ื ืฉืœ JS.

ื˜ืจื ืกืคื•ืจืžืฆื™ื” ืฉืœ ื™ื™ืฉื•ืžื™ื

ื”ื“ื•ื’ืžื” ืชืฉืชืžืฉ ื‘ืฉื™ืจื•ืช ื”ื“ืคื“ืคืŸ fastq.bio, ื”ืžื™ื•ืขื“ ืœื’ื ื˜ื™ืงืื™ื. ื”ื›ืœื™ ืžืืคืฉืจ ืœืš ืœื”ืขืจื™ืš ืืช ืื™ื›ื•ืช ืจืฆืฃ ื”-DNA (ืคืขื ื•ื—).

ื”ื ื” ื“ื•ื’ืžื” ืœื™ื™ืฉื•ื ื‘ืคืขื•ืœื”:

ืื™ืš ื”ืฉืชืžืฉื ื• ื‘-WebAssembly ื›ื“ื™ ืœื”ืื™ืฅ ื™ื™ืฉื•ื ืื™ื ื˜ืจื ื˜ 20 ืคืขืžื™ื

ืœื ื›ื“ืื™ ืœื”ื™ื›ื ืก ืœืคืจื˜ื™ ื”ืชื”ืœื™ืš ืžื›ื™ื•ื•ืŸ ืฉื”ื ืžื•ืจื›ื‘ื™ื ืœืžื“ื™ ืขื‘ื•ืจ ืœื ืžื•ืžื—ื™ื, ืื‘ืœ ื‘ืงื™ืฆื•ืจ, ืžื“ืขื ื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืื™ื ืคื•ื’ืจืคื™ืงื” ืฉืœืžืขืœื” ื›ื“ื™ ืœื”ื‘ื™ืŸ ืื ืชื”ืœื™ืš ืจืฆืฃ ื”-DNA ืขื‘ืจ ื‘ืฆื•ืจื” ื—ืœืงื” ื•ืื™ืœื• ื‘ืขื™ื•ืช ื”ืชืขื•ืจืจื•.

ืœืฉื™ืจื•ืช ื–ื” ื™ืฉ ื—ืœื•ืคื•ืช, ืชื•ื›ื ื™ื•ืช ืฉื•ืœื—ืŸ ืขื‘ื•ื“ื”. ืื‘ืœ fastq.bio ืžืืคืฉืจ ืœืš ืœื”ืื™ืฅ ืืช ื”ืขื‘ื•ื“ื” ืฉืœืš ืขืœ ื™ื“ื™ ื”ื“ืžื™ื” ืฉืœ ื”ื ืชื•ื ื™ื. ื‘ืจื•ื‘ ื”ืžืงืจื™ื ื”ืื—ืจื™ื, ืืชื” ืฆืจื™ืš ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืขื‘ื•ื“ ืขื ืฉื•ืจืช ื”ืคืงื•ื“ื”, ืื‘ืœ ืœื ืœื›ืœ ื”ื’ื ื˜ื™ืงืื™ื ื™ืฉ ืืช ื”ื ื™ืกื™ื•ืŸ ื”ื“ืจื•ืฉ.

ื”ื›ืœ ืขื•ื‘ื“ ื‘ืคืฉื˜ื•ืช. ื”ืงืœื˜ ื”ื•ื ื ืชื•ื ื™ื ื”ืžื•ืฆื’ื™ื ื‘ืฆื•ืจื” ืฉืœ ืงื•ื‘ืฅ ื˜ืงืกื˜. ืงื•ื‘ืฅ ื–ื” ื ื•ืฆืจ ืขืœ ื™ื“ื™ ื›ืœื™ ืจืฆืฃ ืžื™ื•ื—ื“ื™ื. ื”ืงื•ื‘ืฅ ืžื›ื™ืœ ืจืฉื™ืžื” ืฉืœ ืจืฆืคื™ DNA ื•ืฆื™ื•ืŸ ืื™ื›ื•ืช ืœื›ืœ ื ื•ืงืœืื•ื˜ื™ื“. ืคื•ืจืžื˜ ื”ืงื•ื‘ืฅ ื”ื•ื .fastq, ื•ื–ื• ื”ืกื™ื‘ื” ืฉื”ืฉื™ืจื•ืช ืงื™ื‘ืœ ืืช ืฉืžื•.

ื™ื™ืฉื•ื ื‘-JavaScript

ื”ืฉืœื‘ ื”ืจืืฉื•ืŸ ืฉืœ ื”ืžืฉืชืžืฉ ื‘ืขื‘ื•ื“ื” ืขื fastq.bio ื”ื•ื ืœื‘ื—ื•ืจ ืืช ื”ืงื•ื‘ืฅ ื”ืžืชืื™ื. ื‘ืืžืฆืขื•ืช ืื•ื‘ื™ื™ืงื˜ ื”ืงื•ื‘ืฅ, ื”ื™ื™ืฉื•ื ืงื•ืจื ืžื“ื’ื ืืงืจืื™ ืฉืœ ื ืชื•ื ื™ื ืžืงื•ื‘ืฅ ื•ืžืขื‘ื“ ืืช ื”ืืฆื•ื•ื”. ื”ืชืคืงื™ื“ ืฉืœ JavaScript ื›ืืŸ ื”ื•ื ืœื‘ืฆืข ืคืขื•ืœื•ืช ืžื—ืจื•ื–ื•ืช ืคืฉื•ื˜ื•ืช ื•ืœื—ืฉื‘ ืžื“ื“ื™ื. ืื—ื“ ืžื”ื ื”ื•ื ืžืกืคืจ ื”ื ื•ืงืœืื•ื˜ื™ื“ื™ื A, C, G ื•-T ืขืœ ืฉื‘ืจื™ DNA ืฉื•ื ื™ื.

ืœืื—ืจ ื—ื™ืฉื•ื‘ ื”ืื™ื ื“ื™ืงื˜ื•ืจื™ื ื”ื“ืจื•ืฉื™ื, ื”ื ืžื•ืฆื’ื™ื ื‘ืืžืฆืขื•ืช Plotly.js, ื•ื”ืฉื™ืจื•ืช ืžืชื—ื™ืœ ืœืขื‘ื•ื“ ืขื ืžื“ื’ื ื ืชื•ื ื™ื ื—ื“ืฉ. ื”-chunking ื ืขืฉื” ื›ื“ื™ ืœืฉืคืจ ืืช ืื™ื›ื•ืช ื”-UX. ืื ืชืขื‘ื“ื• ืขื ื›ืœ ื”ื ืชื•ื ื™ื ื‘ื‘ืช ืื—ืช, ื”ืชื”ืœื™ืš ื™ืงืคื ืœื–ืžืŸ ืžื”, ืžื›ื™ื•ื•ืŸ ืฉื”ืงื‘ืฆื™ื ืขื ืชื•ืฆืื•ืช ื”ืจืฆืฃ ืชื•ืคืกื™ื ืžืื•ืช ื’ื™ื’ื”-ื‘ื™ื™ื˜ ืฉืœ ืฉื˜ื— ืงื‘ืฆื™ื. ื”ืฉื™ืจื•ืช ืœื•ืงื— ืคื™ืกื•ืช ื ืชื•ื ื™ื ื‘ื’ื•ื“ืœ ืฉืœ 0,5 ืขื“ 1 MB ื•ืขื•ื‘ื“ ืื™ืชื ืฆืขื“ ืื—ืจ ืฆืขื“, ื‘ื•ื ื” ื ืชื•ื ื™ื ื’ืจืคื™ื™ื.

ื›ื›ื” ื–ื” ืขื•ื‘ื“:

ืื™ืš ื”ืฉืชืžืฉื ื• ื‘-WebAssembly ื›ื“ื™ ืœื”ืื™ืฅ ื™ื™ืฉื•ื ืื™ื ื˜ืจื ื˜ 20 ืคืขืžื™ื

ื”ืžืœื‘ืŸ ื”ืื“ื•ื ืžื›ื™ืœ ืืช ืืœื’ื•ืจื™ืชื ื˜ืจื ืกืคื•ืจืžืฆื™ื” ืฉืœ ืžื—ืจื•ื–ืช ืœื”ืฉื’ืช ื”ื“ืžื™ื”. ื–ื”ื• ื”ื—ืœืง ื”ืื™ื ื˜ื ืกื™ื‘ื™ ื‘ื™ื•ืชืจ ืžื‘ื—ื™ื ื” ื—ื™ืฉื•ื‘ื™ืช ื‘ืฉื™ืจื•ืช. ืฉื•ื•ื” ืœื ืกื•ืช ืœื”ื—ืœื™ืฃ ืื•ืชื• ื‘- Wasm.

ื‘ื“ื™ืงืช WebAssembly

ื›ื“ื™ ืœื”ืขืจื™ืš ืืช ื”ืืคืฉืจื•ืช ืœื”ืฉืชืžืฉ ื‘- Wasm, ืฆื•ื•ืช ื”ืคืจื•ื™ืงื˜ ื”ื—ืœ ื‘ื—ื™ืคื•ืฉ ืื—ืจ ืคืชืจื•ื ื•ืช ืžื•ื›ื ื™ื ืœื™ืฆื™ืจืช ืžื“ื“ื™ QC (QC - ื‘ืงืจืช ืื™ื›ื•ืช) ื”ืžื‘ื•ืกืกื™ื ืขืœ ืงื‘ืฆื™ fastq. ื”ื—ื™ืคื•ืฉ ื‘ื•ืฆืข ื‘ื™ืŸ ื›ืœื™ื ืฉื ื›ืชื‘ื• ื‘-C, C++ ืื• Rust, ื›ืš ืฉื ื™ืชืŸ ื”ื™ื” ืœื”ืขื‘ื™ืจ ืืช ื”ืงื•ื“ ืœ-WebAssembly. ื‘ื ื•ืกืฃ, ื”ื›ืœื™ ืœื ืฆืจื™ืš ืœื”ื™ื•ืช "ื’ื•ืœืžื™"; ื ื“ืจืฉ ืฉื™ืจื•ืช ืฉื›ื‘ืจ ื ื‘ื“ืง ืขืœ ื™ื“ื™ ืžื“ืขื ื™ื.

ื›ืชื•ืฆืื” ืžื›ืš, ื”ื‘ื—ื™ืจื” ื ืขืฉืชื” ืœื˜ื•ื‘ืช seqtk. ื”ืืคืœื™ืงืฆื™ื” ื“ื™ ืคื•ืคื•ืœืจื™ืช, ื”ื™ื ื‘ืงื•ื“ ืคืชื•ื—, ืฉืคืช ื”ืžืงื•ืจ ื”ื™ื C.

ืœืคื ื™ ื”ื”ืžืจื” ืœ- Wasm, ื›ื“ืื™ ืœื”ืกืชื›ืœ ืขืœ ืขืงืจื•ืŸ ื”ื”ื™ื“ื•ืจ ืฉืœ seqtk ืขื‘ื•ืจ ืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื”. ืœืคื™ Makefile, ื–ื” ืžื” ืฉืืชื” ืฆืจื™ืš:

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

ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืืชื” ื™ื›ื•ืœ ืœื”ืจื›ื™ื‘ seqtk ื‘ืืžืฆืขื•ืช Emscripten. ืื ื–ื” ืœื ืฉื, ืื ื—ื ื• ืžืกืชืคืงื™ื. ืชืžื•ื ืช ื“ื•ืงืจ.

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

ืื ืจื•ืฆื™ื ืืชื” ื™ื›ื•ืœ ืœื”ืจื›ื™ื‘ ืืช ื–ื” ื‘ืขืฆืžืš, ืื‘ืœ ื–ื” ืœื•ืงื— ื–ืžืŸ.

ื‘ืชื•ืš ืžื™ื›ืœ, ืืชื” ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœื”ืฉืชืžืฉ ื‘-emcc ื›ื—ืœื•ืคื” ืœ-gcc:

# 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 ื›ื•ืœืœืช ืื•ืชื” ื‘ืคืจื•ื™ืงื˜.

ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื”ื•ื™ืจื˜ื•ืืœื™ืช Emscrippten ืžื•ืคืขืœืช. ื–ึถื” FS ื“ืžื•ื™ POSIX, ืคื•ืขืœ ื‘-RAM ื‘ืชื•ืš ื”ื“ืคื“ืคืŸ. ื›ืืฉืจ ื”ื“ืฃ ืžืชืจืขื ืŸ, ื”ื–ื™ื›ืจื•ืŸ ื ืžื—ืง.

ื›ื“ื™ ืœื”ื‘ื™ืŸ ืžื“ื•ืข ื™ืฉ ืฆื•ืจืš ื‘ืžืขืจื›ืช ืงื‘ืฆื™ื ื•ื™ืจื˜ื•ืืœื™ืช, ื›ื“ืื™ ืœื”ืฉื•ื•ืช ืืช ื”ืื•ืคืŸ ืฉื‘ื• ืืชื” ืžืคืขื™ืœ ืืช seqtk ืžืฉื•ืจืช ื”ืคืงื•ื“ื” ืขื ื”ืื•ืคืŸ ืฉื‘ื• ืืชื” ืžืคืขื™ืœ ืžื•ื“ื•ืœ WebAssembly ื”ื™ื“ื•ืจ.

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

ื”ืฉื’ืช ื’ื™ืฉื” ืœืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื”ื•ื•ื™ืจื˜ื•ืืœื™ืช ื”ื™ื ื”ื›ืจื—ื™ืช ื›ื“ื™ ืœื ืœืฉื›ืชื‘ ืืช seqtk ืขื‘ื•ืจ ืžื—ืจื•ื–ืช ื•ืœื ืœืงืœื˜ ืงื•ื‘ืฅ. ื‘ืžืงืจื” ื–ื”, ืงื˜ืข ื”ื ืชื•ื ื™ื ืžื•ืฆื’ ื›ืงื•ื‘ืฅ data.fastq ื‘-FS ื”ื•ื™ืจื˜ื•ืืœื™ ืขื ืงืจื™ืื” ืœ-main() seqtk ืขืœื™ื•.

ื”ื ื” ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื”ื—ื“ืฉื”:

ืื™ืš ื”ืฉืชืžืฉื ื• ื‘-WebAssembly ื›ื“ื™ ืœื”ืื™ืฅ ื™ื™ืฉื•ื ืื™ื ื˜ืจื ื˜ 20 ืคืขืžื™ื

ื”ืื™ื•ืจ ืžืจืื” ืฉื‘ืžืงื•ื ื—ื™ืฉื•ื‘ื™ื ื‘ืฉืจืฉื•ืจ ื”ื“ืคื“ืคืŸ ื”ืจืืฉื™, ืขื•ื‘ื“ื™ ืจืฉืช. ืฉื™ื˜ื” ื–ื• ืžืืคืฉืจืช ืœืš ืœื‘ืฆืข ื—ื™ืฉื•ื‘ื™ื ื‘ืฉืจืฉื•ืจ ืจืงืข ืžื‘ืœื™ ืœื”ืฉืคื™ืข ืขืœ ืชื’ื•ื‘ืช ื”ื“ืคื“ืคืŸ. ื•ื‘ื›ืŸ, ื‘ืงืจ ื”-WebWorker ืžืคืขื™ืœ ืืช ื”-Worker, ื•ืžื ื”ืœ ืืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœื• ืขื ื”ืฉืจืฉื•ืจ ื”ืจืืฉื™.

ื”ืคืงื•ื“ื” seqtk ืžื•ืคืขืœืช ื‘ืืžืฆืขื•ืช Worker ื‘ืงื•ื‘ืฅ ื”ืžื•ืชืงืŸ. ืœืื—ืจ ื”ืฉืœืžืช ื”ื‘ื™ืฆื•ืข, ื”ืขื•ื‘ื“ ืžื™ื™ืฆืจ ืชื•ืฆืื” ื‘ืฆื•ืจื” ืฉืœ ื”ื‘ื˜ื—ื”. ื›ืืฉืจ ื”ื•ื“ืขื” ืžืชืงื‘ืœืช ืขืœ ื™ื“ื™ ื”ืฉืจืฉื•ืจ ื”ืจืืฉื™, ื”ืชื•ืฆืื” ืžืฉืžืฉืช ืœืขื“ื›ื•ืŸ ื”ื’ืจืคื™ื. ื•ื›ืŸ ื”ืœืื” ื‘ื›ืžื” ืื™ื˜ืจืฆื™ื•ืช.

ืžื” ืœื’ื‘ื™ ื‘ื™ืฆื•ืขื™ WebAssembly?

ืขืœ ืžื ืช ืœื”ืขืจื™ืš ืืช ื”ืฉื™ื ื•ื™ ื‘ื‘ื™ืฆื•ืขื™ื, ืฆื•ื•ืช ื”ืคืจื•ื™ืงื˜ ื”ืฉืชืžืฉ ื‘ืคืจืžื˜ืจ ืคืขื•ืœื•ืช ืงืจื™ืื” ืœืฉื ื™ื”. ื”ื–ืžืŸ ืฉืœื•ืงื— ืœื‘ื ื™ื™ืช ื’ืจืคื™ื ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื™ื ืื™ื ื• ื ืœืงื— ื‘ื—ืฉื‘ื•ืŸ ืžื›ื™ื•ื•ืŸ ืฉืฉืชื™ ื”ื”ื˜ืžืขื•ืช ืžืฉืชืžืฉื•ืช ื‘-JavaScript.

ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืคืชืจื•ืŸ ื”-out-of-the-box, ืขืœื™ื™ืช ื”ื‘ื™ืฆื•ืขื™ื ื”ื™ื™ืชื” ืคื™ ืชืฉืขื”.

ืื™ืš ื”ืฉืชืžืฉื ื• ื‘-WebAssembly ื›ื“ื™ ืœื”ืื™ืฅ ื™ื™ืฉื•ื ืื™ื ื˜ืจื ื˜ 20 ืคืขืžื™ื

ื–ื•ื”ื™ ืชื•ืฆืื” ืžืฆื•ื™ื ืช, ืื‘ืœ, ื›ืคื™ ืฉืžืชื‘ืจืจ, ื™ืฉ ื’ื ื”ื–ื“ืžื ื•ืช ืœื™ื™ืขืœ ืื•ืชื”. ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉืžืกืคืจ ืจื‘ ืฉืœ ืชื•ืฆืื•ืช ื ื™ืชื•ื— QC ืื™ื ืŸ ื‘ืฉื™ืžื•ืฉ ืขืœ ื™ื“ื™ seqtk, ื›ืš ืฉื ื™ืชืŸ ืœืžื—ื•ืง ืื•ืชืŸ. ืื ืชืขืฉื” ื–ืืช, ื”ืชื•ืฆืื” ืžืฉืชืคืจืช ืคื™ 13 ื‘ื”ืฉื•ื•ืื” ืœ-JS.

ืื™ืš ื”ืฉืชืžืฉื ื• ื‘-WebAssembly ื›ื“ื™ ืœื”ืื™ืฅ ื™ื™ืฉื•ื ืื™ื ื˜ืจื ื˜ 20 ืคืขืžื™ื

ื–ื” ื”ื•ืฉื’ ืขืœ ื™ื“ื™ ื”ืขืจื” ืคืฉื•ื˜ื” ืขืœ ื”ืคืงื•ื“ื•ืช printf() .

ืื‘ืœ ื–ื” ืœื ื”ื›ืœ. ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉื‘ืฉืœื‘ ื–ื”, fastq.bio ืžืงื‘ืœ ืืช ืชื•ืฆืื•ืช ื”ื ื™ืชื•ื— ืขืœ ื™ื“ื™ ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื•ืช ืฉื•ื ื•ืช ืฉืœ C. ื›ืœ ืื—ืช ืžื”ืŸ ืžื—ืฉื‘ืช ืืช ืกื˜ ื”ืžืืคื™ื™ื ื™ื ืฉืœื”, ื›ืš ืฉื›ืœ ืงื˜ืข ืฉืœ ื”ืงื•ื‘ืฅ ื ืงืจื ืคืขืžื™ื™ื.

ืขืœ ืžื ืช ืœืขืงื•ืฃ ืืช ื”ื‘ืขื™ื” ื”ื–ื•, ื”ื•ื—ืœื˜ ืœืฉืœื‘ ืฉืชื™ ืคื•ื ืงืฆื™ื•ืช ืœืื—ืช. ื›ืชื•ืฆืื” ืžื›ืš, ื”ืชืคื•ืงื” ืขืœืชื” ืคื™ 20.

ืื™ืš ื”ืฉืชืžืฉื ื• ื‘-WebAssembly ื›ื“ื™ ืœื”ืื™ืฅ ื™ื™ืฉื•ื ืื™ื ื˜ืจื ื˜ 20 ืคืขืžื™ื

ืจืื•ื™ ืœืฆื™ื™ืŸ ืฉืœื ืชืžื™ื“ ื ื™ืชืŸ ืœื”ืฉื™ื’ ืชื•ืฆืื” ื™ื•ืฆืืช ื“ื•ืคืŸ ื›ื–ื•. ื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื, ื”ื‘ื™ืฆื•ืขื™ื ื™ืจื“ื•, ื•ืœื›ืŸ ื›ื“ืื™ ืœื”ืขืจื™ืš ื›ืœ ืžืงืจื”.

ืœืกื™ื›ื•ื, ืื ื• ื™ื›ื•ืœื™ื ืœื•ืžืจ ืฉ- Wasm ืื›ืŸ ืžืกืคืงืช ื”ื–ื“ืžื ื•ืช ืœืฉืคืจ ืืช ื‘ื™ืฆื•ืขื™ ื”ืืคืœื™ืงืฆื™ื”, ืืš ืขืœื™ืš ืœื”ืฉืชืžืฉ ื‘ื” ื‘ื—ื•ื›ืžื”.

Skillbox ืžืžืœื™ืฆื”:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”