Program | Language | Library | tgzip (s) | tplain (s) | Comments |
---|---|---|---|---|---|
fqcnt_rs2_needletail.rs | Rust | needletail | 9.3 | 0.8 | fasta/4-line fastq |
fqcnt_c1_kseq.c | C | kseq.h | 9.7 | 1.4 | multi-line fasta/fastq |
fqcnt_cr1_klib.cr | Crystal | klib.cr | 9.7 | 1.5 | kseq.h port |
fqcnt_rs1_rustbio.rs | Rust | rust-bio | 10.0 | 2.4 | rust-bio |
fqcnt_nim1_klib.nim | Nim | klib.nim | 10.5 | 2.3 | kseq.h port |
fqcnt_jl1_klib.jl | Julia | Klib.jl | 11.1 | 2.9 | kseq.h port |
fqcnt_py8x_fx.py | PyPy | Fastx; cffi | 11.5 | 3.1 | kseq.h binding |
fqcnt_py6x_pyfx.py | Python | PyFastx | 15.8 | 7.3 | kseq.h binding |
fqcnt_py3x_mappy.py | Python | mappy | 16.6 | 8.7 | kseq.h binding |
fqcnt_js1_k8.js | Javascript | 17.5 | 9.4 | kseq.h port | |
fqcnt_py7x_pysam.py | Python | pysam | 18.5 | 12.7 | kseq.h binding |
fqcnt_go1.go | Go | 19.1 | 2.8 | 4-line only | |
fqcnt_jl2x_fastx.jl | Julia | Fastx.jl | 19.5 | 2.6 | 4-line only; no startup |
fqcnt_lua2_4l.lua | LuaJIT | 22.8 | 10.4 | 4-line only | |
fqcnt_py8x_fx.py | Python | Fastx; cffi | 24.2 | 15.9 | kseq.h binding |
fqcnt_py1_4l.py | PyPy | 27.5 | 13.9 | 4-line only | |
fqcnt_lua1_klib.lua | LuaJIT | 28.6 | 27.2 | partial kseq.h port | |
fqcnt_py2_rfq.py | PyPy | 28.9 | 14.6 | partial kseq.h port | |
fqcnt_py1_4l.py | Python | 34.8 | 14.2 | 4-line only | |
fqcnt_py4x_bpitr.py | Python | BioPython | 37.9 | 18.1 | FastqGeneralIterator |
fqcnt_py2_rfq.py | Python | 42.7 | 19.1 | partial kseq.h port | |
fqcnt_py5x_bp.py | Python | BioPython | 135.8 | 107.1 | SeqIO.parse |
fqcnt_scala_fgbio.sc | Scala/Ammonite | fgbio,[ammonite][ammonite] | TBD | TBD | FastqSource |
fqcnt_scala_fgbio.sc | Scala/Ammnoite | commons.io[ammonite][ammonite] | TBD | TBD | Io.readlines |
FgBio.scala | Scala/JAR | fgbio | TBD | TBD | FastqSource |
FgBio.scala | Scala/JAR | commons.io | TBD | TBD | Io.readlines |
-
Crystal, Nim, Julia (jl1) and Javascript use an algorithm very similar to kseq.h. LuaJIT and the second Python script (py2) are somewhat similar but they use the languages' builtin line readers instead. All these implementations seamlessly work with FASTA and multi-line FASTQ files.
-
C, Crystal, Nim and Javascript use the system zlib. Julia is forced to bind to the system zlib by manually modifying Klib.jl. Go calls its own zlib. LuaJIT pipes gzip.
-
Julia takes ~11 seconds to compile the Fastx.jl implementation. The numbers in the table exclude this startup time.
-
Julia by default uses its own precompiled zlib. However, the zlib binary in Julia-1.4.1 is misconfigured and is slow.
-
External libraries: biopython-1.76, pyfastx-0.6.10, fastx-0.0.2, mappy-2.17 and Fastx.jl-1.0.0.
-
C, Crystal, Nim, Rust, Javascript, Go, Julia, LuaJIT, PyPy and Python C binding runs were timed by hyperfine.
-
Scala takes ~TBD seconds to compile the
fqcnt_scala_fgbio.sc
implementation. The numbers in the table exclude this startup time.