Cargando…

Comparing Ease of Programming in C++, Go, and Java for Implementing a Next-Generation Sequencing Tool

elPrep is an extensible multithreaded software framework for efficiently processing Sequence Alignment/Map (SAM)/Binary Alignment/Map (BAM) files in next-generation sequencing pipelines. Similar to other SAM/BAM tools, a key challenge in elPrep is memory management, as such programs need to manipula...

Descripción completa

Detalles Bibliográficos
Autores principales: Costanza, Pascal, Herzeel, Charlotte, Verachtert, Wilfried
Formato: Online Artículo Texto
Lenguaje:English
Publicado: SAGE Publications 2019
Materias:
Acceso en línea:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6698987/
https://www.ncbi.nlm.nih.gov/pubmed/31452597
http://dx.doi.org/10.1177/1176934319869015
_version_ 1783444646800654336
author Costanza, Pascal
Herzeel, Charlotte
Verachtert, Wilfried
author_facet Costanza, Pascal
Herzeel, Charlotte
Verachtert, Wilfried
author_sort Costanza, Pascal
collection PubMed
description elPrep is an extensible multithreaded software framework for efficiently processing Sequence Alignment/Map (SAM)/Binary Alignment/Map (BAM) files in next-generation sequencing pipelines. Similar to other SAM/BAM tools, a key challenge in elPrep is memory management, as such programs need to manipulate large amounts of data. We therefore investigated 3 programming languages with support for assisted or automated memory management for implementing elPrep, namely C++, Go, and Java. We implemented a nontrivial subset of elPrep in all 3 programming languages and compared them by benchmarking their runtime performance and memory use to determine the best language in terms of computational performance. In a previous article, we motivated why, based on these results, we eventually selected Go as our implementation language. In this article, we discuss the difficulty of achieving the best performance in each language in terms of programming language constructs and standard library support. While benchmarks are easy to objectively measure and evaluate, this is less obvious for assessing ease of programming. However, because we expect elPrep to be regularly modified and extended, this is an equally important aspect. We illustrate representative examples of challenges in all 3 languages, and give our opinion why we think that Go is a reasonable choice also in this light.
format Online
Article
Text
id pubmed-6698987
institution National Center for Biotechnology Information
language English
publishDate 2019
publisher SAGE Publications
record_format MEDLINE/PubMed
spelling pubmed-66989872019-08-26 Comparing Ease of Programming in C++, Go, and Java for Implementing a Next-Generation Sequencing Tool Costanza, Pascal Herzeel, Charlotte Verachtert, Wilfried Evol Bioinform Online Commentary elPrep is an extensible multithreaded software framework for efficiently processing Sequence Alignment/Map (SAM)/Binary Alignment/Map (BAM) files in next-generation sequencing pipelines. Similar to other SAM/BAM tools, a key challenge in elPrep is memory management, as such programs need to manipulate large amounts of data. We therefore investigated 3 programming languages with support for assisted or automated memory management for implementing elPrep, namely C++, Go, and Java. We implemented a nontrivial subset of elPrep in all 3 programming languages and compared them by benchmarking their runtime performance and memory use to determine the best language in terms of computational performance. In a previous article, we motivated why, based on these results, we eventually selected Go as our implementation language. In this article, we discuss the difficulty of achieving the best performance in each language in terms of programming language constructs and standard library support. While benchmarks are easy to objectively measure and evaluate, this is less obvious for assessing ease of programming. However, because we expect elPrep to be regularly modified and extended, this is an equally important aspect. We illustrate representative examples of challenges in all 3 languages, and give our opinion why we think that Go is a reasonable choice also in this light. SAGE Publications 2019-08-15 /pmc/articles/PMC6698987/ /pubmed/31452597 http://dx.doi.org/10.1177/1176934319869015 Text en © The Author(s) 2019 http://www.creativecommons.org/licenses/by-nc/4.0/ This article is distributed under the terms of the Creative Commons Attribution-NonCommercial 4.0 License (http://www.creativecommons.org/licenses/by-nc/4.0/) which permits non-commercial use, reproduction and distribution of the work without further permission provided the original work is attributed as specified on the SAGE and Open Access pages (https://us.sagepub.com/en-us/nam/open-access-at-sage).
spellingShingle Commentary
Costanza, Pascal
Herzeel, Charlotte
Verachtert, Wilfried
Comparing Ease of Programming in C++, Go, and Java for Implementing a Next-Generation Sequencing Tool
title Comparing Ease of Programming in C++, Go, and Java for Implementing a Next-Generation Sequencing Tool
title_full Comparing Ease of Programming in C++, Go, and Java for Implementing a Next-Generation Sequencing Tool
title_fullStr Comparing Ease of Programming in C++, Go, and Java for Implementing a Next-Generation Sequencing Tool
title_full_unstemmed Comparing Ease of Programming in C++, Go, and Java for Implementing a Next-Generation Sequencing Tool
title_short Comparing Ease of Programming in C++, Go, and Java for Implementing a Next-Generation Sequencing Tool
title_sort comparing ease of programming in c++, go, and java for implementing a next-generation sequencing tool
topic Commentary
url https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6698987/
https://www.ncbi.nlm.nih.gov/pubmed/31452597
http://dx.doi.org/10.1177/1176934319869015
work_keys_str_mv AT costanzapascal comparingeaseofprogrammingincgoandjavaforimplementinganextgenerationsequencingtool
AT herzeelcharlotte comparingeaseofprogrammingincgoandjavaforimplementinganextgenerationsequencingtool
AT verachtertwilfried comparingeaseofprogrammingincgoandjavaforimplementinganextgenerationsequencingtool