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...
Autores principales: | , , |
---|---|
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 |