{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,3,12]],"date-time":"2026-03-12T02:48:09Z","timestamp":1773283689564,"version":"3.50.1"},"reference-count":59,"publisher":"Springer Science and Business Media LLC","issue":"1","license":[{"start":{"date-parts":[[2020,2,7]],"date-time":"2020-02-07T00:00:00Z","timestamp":1581033600000},"content-version":"tdm","delay-in-days":0,"URL":"http:\/\/creativecommons.org\/licenses\/by\/4.0\/"},{"start":{"date-parts":[[2020,2,7]],"date-time":"2020-02-07T00:00:00Z","timestamp":1581033600000},"content-version":"vor","delay-in-days":0,"URL":"http:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":["J Cheminform"],"published-print":{"date-parts":[[2020,12]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>This paper describes salient features of the C++ programming language and its programming ecosystem, with emphasis on how the language affects scientific software development. Brief history of C++ and its predecessor the C language is provided. Most important aspects of the language that define models of programming are described in greater detail and illustrated with code examples. Special attention is paid to the interoperability between C++ and other high-level languages commonly used in cheminformatics, machine learning, data processing and statistical computing.<\/jats:p>","DOI":"10.1186\/s13321-020-0415-y","type":"journal-article","created":{"date-parts":[[2020,2,7]],"date-time":"2020-02-07T00:03:49Z","timestamp":1581033829000},"update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":18,"title":["The C++\u2009programming language in cheminformatics and computational chemistry"],"prefix":"10.1186","volume":"12","author":[{"ORCID":"https:\/\/orcid.org\/0000-0003-3438-1190","authenticated-orcid":false,"given":"Dmitrii","family":"Rassokhin","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"297","published-online":{"date-parts":[[2020,2,7]]},"reference":[{"key":"415_CR1","volume-title":"Challenges in scientific computing-CISC 2002 lecture notes in computational science and engineering","author":"N Neuss","year":"2003","unstructured":"Neuss N (2003) On Using Common Lisp for Scientific Computing. In: B\u00e4nsch E (ed) Challenges in scientific computing-CISC 2002 lecture notes in computational science and engineering, vol 35. Springer, Berlin"},{"issue":"25","key":"415_CR2","doi-asserted-by":"publisher","first-page":"7724","DOI":"10.1021\/ja00832a019","volume":"96","author":"EJ Corey","year":"1974","unstructured":"Corey EJ, Howe WJ, Pensak DA (1974) Computer-assisted synthetic analysis. Methods for machine generation of synthetic intermediates involving multistep look-ahead. J Am Chem Soc 96(25):7724\u20137737","journal-title":"J Am Chem Soc"},{"key":"415_CR3","series-title":"ACS symposium series 61","first-page":"1","volume-title":"LHASA\u2014Logic and heuristics applied to synthetic analysis computer-assisted organic synthesis","author":"DA Pensak","year":"1977","unstructured":"Pensak DA, Corey EJ (1977) LHASA\u2014Logic and heuristics applied to synthetic analysis computer-assisted organic synthesis. ACS symposium series 61. American Chemical Society, Washington, pp 1\u201332"},{"key":"415_CR4","first-page":"228","volume-title":"The C programming language","author":"BW Kernighan","year":"1978","unstructured":"Kernighan BW, Ritchie DM (1978) The C programming language. Prentice-Hall, Englewood Cliffs, p 228"},{"key":"415_CR5","unstructured":"ISO\/IEC. ISO\/IEC 9899:2018. Programming languages\u2014C. 2018"},{"key":"415_CR6","unstructured":"Stroustrup B. Evolving a language in and for the real world: C++\u20091991-2006. Proceedings of the third ACM SIGPLAN conference on History of programming languages; San Diego, California. 1238848: ACM; 2007. p 4-1-4-59"},{"key":"415_CR7","series-title":"Reading, mass","first-page":"327","volume-title":"The C++\u2009programming language","author":"B Stroustrup","year":"1986","unstructured":"Stroustrup B (1986) The C++\u2009programming language. Reading, mass. Addison-Wesley, Boston, p 327"},{"key":"415_CR8","series-title":"Reading, mass","first-page":"447","volume-title":"The annotated C++\u2009reference manual","author":"MA Ellis","year":"1990","unstructured":"Ellis MA, Stroustrup B (1990) The annotated C++\u2009reference manual. Reading, mass. Addison-Wesley, Boston, p 447"},{"key":"415_CR9","unstructured":"ISO\/IEC. ISO\/IEC 14882:2017. Programming languages\u2014C++. 2017"},{"key":"415_CR10","unstructured":"Lambda expressions. cplusplus.com website. https:\/\/en.cppreference.com\/w\/cpp\/language\/lambda. Accessed 27 Sept 2019"},{"key":"415_CR11","unstructured":"Interactive: the top programming languages. IEEE SPECTRUM website: IEEE. https:\/\/spectrum.ieee.org\/static\/interactive-the-top-programming-languages-2019. Accessed 27 Sept 2019"},{"key":"415_CR12","unstructured":"GCC, the GNU compiler collection. GCC, the GNU Compiler Collection website. https:\/\/gcc.gnu.org\/. Accessed 27 Sept 2019"},{"key":"415_CR13","unstructured":"Clang: a C language family frontend for LLVM. LLVM website. https:\/\/clang.llvm.org\/. Accessed 27 Sept 2019"},{"key":"415_CR14","unstructured":"Visual Studio Technologies: Develop C and C++\u2009applications. Microsoft(R) Visual Studio website. https:\/\/visualstudio.microsoft.com\/vs\/features\/cplusplus\/. Accessed 27 Sept 2019"},{"key":"415_CR15","unstructured":"Intel\u00ae C++\u2009Compiler release notes and new features. Intel\u00ae Developer Zone website. https:\/\/software.intel.com\/en-us\/articles\/intel-cpp-compiler-release-notes#2019u5 Accessed 14 Dec 2019"},{"key":"415_CR16","unstructured":"Visual Studio Code. Microsoft(R) Visual Studio Code website. https:\/\/code.visualstudio.com\/ Accessed 27 Sept 2019"},{"key":"415_CR17","unstructured":"JetBrains CLion. JetBrains(R) CLion website. https:\/\/www.jetbrains.com\/clion\/. Accessed 27 Sept 2019"},{"key":"415_CR18","unstructured":"Eclipse CDT (C\/C++\u2009Development Tooling). The Eclipse Foundation CDT website. https:\/\/www.eclipse.org\/cdt\/. Accessed 27 Sept 2019"},{"key":"415_CR19","unstructured":"Binary-code compatibility. Wikipedia. https:\/\/en.wikipedia.org\/wiki\/Binary-code_compatibility. Accessed 16 Dec 2019"},{"key":"415_CR20","unstructured":"Red Hat Enterprise Linux 7: application compatibility GUIDE Red Hat Knowledgebase website. https:\/\/access.redhat.com\/articles\/rhel-abi-compatibility. Accessed 16 Dec 2019"},{"key":"415_CR21","unstructured":"Compiler Explorer. Compiler Explorer website. https:\/\/godbolt.org\/. Accessed 30 Dec 2019"},{"key":"415_CR22","unstructured":"Cling. ROOT Data analytics Framework Cling website. https:\/\/gcc.gnu.org\/. Accessed 27 Sep 2019"},{"key":"415_CR23","unstructured":"Garbage collection (computer science). Wikipedia. https:\/\/en.wikipedia.org\/wiki\/Garbage_collection_(computer_science). Accessed 10 Dec 2019"},{"key":"415_CR24","unstructured":"Stack vs Heap memory allocation. GeeksforGeeks website. https:\/\/www.geeksforgeeks.org\/stack-vs-heap-memory-allocation\/. Accessed 10 Dec 2019"},{"key":"415_CR25","unstructured":"Buffer overflow. Wikipedia. https:\/\/en.wikipedia.org\/wiki\/Buffer_overflow. Accessed 16 Dec 2019"},{"key":"415_CR26","unstructured":"GDB: The GNU Project Debugger. GDB: The GNU Project Debugger website. https:\/\/www.gnu.org\/software\/gdb\/. Accessed 16 Dec 2019"},{"key":"415_CR27","unstructured":"Valgrind. Valgrind website. https:\/\/valgrind.org\/. Accessed 16 Dec 2019"},{"key":"415_CR28","unstructured":"SMILES\u2014A simplified chemical language. Daylight Chemical Information Systems website. https:\/\/www.daylight.com\/dayhtml\/doc\/theory\/theory.smiles.html. Accessed 27 Dec 2019"},{"key":"415_CR29","unstructured":"Composition over inheritance. Wikipedia. https:\/\/en.wikipedia.org\/wiki\/Composition_over_inheritance. Accessed 13 Dec 2019"},{"key":"415_CR30","unstructured":"Generic programming. Wikipedia. https:\/\/en.wikipedia.org\/wiki\/Generic_programming. Accessed 27 Sep 2019"},{"key":"415_CR31","volume-title":"C++\u2009Standard template library","author":"PJ Plauger","year":"2000","unstructured":"Plauger PJ, Lee M, Musser D, Stepanov AA (2000) C++\u2009Standard template library. Prentice Hall PTR, Upper saddle river"},{"key":"415_CR32","unstructured":"Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms. Eigen hosted by Tuxfamily website. http:\/\/eigen.tuxfamily.org\/. Accessed 17 Dec 2019"},{"key":"415_CR33","unstructured":"RDKit: Open-Source Cheminformatics Software. RDKit website. https:\/\/www.rdkit.org\/. Accessed 08 Oct 2019"},{"key":"415_CR34","unstructured":"Getting Started\/sample.cpp source code. RDKit repository hosted by GitHub. https:\/\/github.com\/rdkit\/rdkit\/blob\/master\/Code\/Demos\/RDKit\/GettingStarted\/sample.cpp. Accessed 16 Dec 2019"},{"key":"415_CR35","unstructured":"BLAS (Basic Linear Algebra Subprograms). Netlib Repository at UTK and ORNL website. http:\/\/www.netlib.org\/blas\/. Accessed 27 Sep 2019"},{"key":"415_CR36","unstructured":"The NAG Library. The Numerical Algorithms Group (NAG) website: The Numerical Algorithms Group, Ltd. https:\/\/www.nag.com\/content\/nag-library. Accessed 27 Sep 2019"},{"key":"415_CR37","unstructured":"LAPACK\u2014Linear Algebra PACKage. Netlib Repository at UTK and ORNL website. http:\/\/www.netlib.org\/lapack\/. Accessed 27 Sep 2019"},{"key":"415_CR38","unstructured":"Netlib\/f2c. Netlib Repository at UTK and ORNL website. http:\/\/www.netlib.org\/f2c\/. Accessed 08 Oct 2019"},{"key":"415_CR39","doi-asserted-by":"publisher","first-page":"5","DOI":"10.1186\/1751-0473-7-5","volume":"7","author":"R Grosse-Kunstleve","year":"2012","unstructured":"Grosse-Kunstleve R, Terwilliger T, Sauter N, Adams P (2012) Automatic Fortran to C++\u2009conversion with FABLE. Source Code Biol Med 7:5","journal-title":"Source Code Biol Med"},{"key":"415_CR40","unstructured":"The R Project for statistical computing. The R Project website. https:\/\/www.r-project.org\/. Accessed 08 Oct 2019"},{"key":"415_CR41","unstructured":"MATLAB. MathWorks website. https:\/\/www.mathworks.com\/products\/matlab.html. Accessed 08 Oct 2019"},{"key":"415_CR42","unstructured":"The Xemistry Tools Universe. Xemistry GmbH website. https:\/\/xemistry.com\/tooluniverse.shtml Accessed 08 Oct 2019"},{"key":"415_CR43","unstructured":"Open Babel: The Open Source Chemistry Toolbox. Opoen Babel website. http:\/\/openbabel.org\/wiki\/Main_Page. Accessed 08 Oct 2019"},{"key":"415_CR44","unstructured":"OEChem TK. OpenEye Scientific website. https:\/\/www.eyesopen.com\/oechem-tk. Accessed 08 Oct 2019"},{"key":"415_CR45","unstructured":"NumPy. NumPy.Org website. https:\/\/numpy.org\/. Accessed 08 Oct 2019"},{"key":"415_CR46","unstructured":"SciPy. SciPy.Org website. https:\/\/www.scipy.org\/. Accessed 08 Oct 2019"},{"key":"415_CR47","unstructured":"TensorFlow. TensorFlow website. https:\/\/www.tensorflow.org\/. Accessed 08 Oct 2019"},{"issue":"6","key":"415_CR48","doi-asserted-by":"publisher","first-page":"1999","DOI":"10.1021\/ci700267w","volume":"47","author":"DK Agrafiotis","year":"2007","unstructured":"Agrafiotis DK, Alex S, Dai H, Derkinderen A, Farnum M, Gates P et al (2007) Advanced biological and chemical discovery (ABCD): Centralizing discovery knowledge in an inherently decentralized world. J Chem Inf Model 47(6):1999\u20132014","journal-title":"J Chem Inf Model"},{"key":"415_CR49","unstructured":"VMD Visual molecular dynamics. Theoretical and Computational Biophysics Group, The University of Illinois at Urbana\u2013Champaign website. https:\/\/www.ks.uiuc.edu\/Research\/vmd\/. Accessed 08 Oct 2019"},{"key":"415_CR50","unstructured":"PyMol. PyMOL by Schr\u00f6dinger website. https:\/\/pymol.org\/2\/. Accessed 08 Oct 2019"},{"key":"415_CR51","unstructured":"The LLVM Compiler Infrastructure. The LLVM Project website. https:\/\/llvm.org\/. Accessed 08 Oct 2019"},{"key":"415_CR52","unstructured":"The Julia Programming Language. JuliaLang.org website. https:\/\/julialang.org\/. Accessed 08 Oct 2019"},{"key":"415_CR53","unstructured":"Welcome to SWIG. SWIG.ORG website. http:\/\/www.swig.org\/. Accessed 13 Oct 2019"},{"key":"415_CR54","unstructured":"Boost.Python. Boost.org website. https:\/\/www.boost.org\/doc\/libs\/1_71_0\/libs\/python\/doc\/html\/index.html Accessed 08 Oct 2019"},{"key":"415_CR55","unstructured":"pybind11\u2014Seamless operability between C++11 and Python. Pybind project hosted by GitHub. https:\/\/github.com\/pybind\/pybind11. Accessed 08 Oct 2019"},{"key":"415_CR56","unstructured":"Landrum G. Introducing new RDKit JavaScript wrappers. RDKit blog. http:\/\/rdkit.blogspot.com\/2019\/11\/introducing-new-rdkit-javascript.html. Accessed 27 Dec 2019"},{"key":"415_CR57","unstructured":"IronPython. IronPython.net website. https:\/\/ironpython.net\/. Accessed 14 Oct 2019"},{"key":"415_CR58","doi-asserted-by":"publisher","first-page":"127","DOI":"10.1016\/j.jmgm.2016.07.008","volume":"69","author":"S Pirhadi","year":"2016","unstructured":"Pirhadi S, Sunseri J, Koes DR (2016) Open source molecular modeling. J Mol Graph Model 69:127\u2013143","journal-title":"J Mol Graph Model"},{"key":"415_CR59","unstructured":"Koens D. Open Source Molecular Modeling. Open Source Molecular Modeling hosted by GitHub. https:\/\/opensourcemolecularmodeling.github.io\/. Accessed 17 Dec 2019"}],"container-title":["Journal of Cheminformatics"],"original-title":[],"language":"en","link":[{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1186\/s13321-020-0415-y.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"http:\/\/link.springer.com\/article\/10.1186\/s13321-020-0415-y\/fulltext.html","content-type":"text\/html","content-version":"vor","intended-application":"text-mining"},{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1186\/s13321-020-0415-y.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2021,2,8]],"date-time":"2021-02-08T05:26:35Z","timestamp":1612761995000},"score":1,"resource":{"primary":{"URL":"https:\/\/jcheminf.biomedcentral.com\/articles\/10.1186\/s13321-020-0415-y"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020,2,7]]},"references-count":59,"journal-issue":{"issue":"1","published-print":{"date-parts":[[2020,12]]}},"alternative-id":["415"],"URL":"https:\/\/doi.org\/10.1186\/s13321-020-0415-y","relation":{},"ISSN":["1758-2946"],"issn-type":[{"value":"1758-2946","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020,2,7]]},"assertion":[{"value":"8 November 2019","order":1,"name":"received","label":"Received","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"27 January 2020","order":2,"name":"accepted","label":"Accepted","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"7 February 2020","order":3,"name":"first_online","label":"First Online","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"The author declares that he has no competing interests.","order":1,"name":"Ethics","group":{"name":"EthicsHeading","label":"Competing interests"}}],"article-number":"10"}}