颜林林的个人网站

现代C++学习笔记(0):开篇

2022-01-04 00:00

Image (题图来自网络并做适当修改)

安身立命的本事,还是不能丢的。从这篇起,我将以笔记分享的方式,开启一段重新学习C++的新旅程。 1

C++是计算机语言中的绝对神器。尤其是近十多年来快速推出的新标准,C++11/14/17/20……,通常被称为现代C++(与之相对应的旧标准,则称为经典C++),可以做到在底层接近字节级或机器代码级的精细操控,同时在顶层还能够比拼Java、C#等语言,架构企业级超大型应用。这种“跨层次”性,使得通过学习C++语言所建立起的计算机科学思维,具备独特的延展性,在各种不同场景都能拨云见日、游刃有余。

C++算是我的日常工作语言之一,但是新标准的语法,我用得并不算多。很早我就希望能够系统性地学习一遍,但始终未果。最近刚好开始阅读Scott Meyers的经典《Effective Modern C++》,借着这个契机,我开始重新学习C++。

Image

这本书并不是教材,它是延续早年同系列的《Effective C++》和《More Effective C++》的条款文体,对现代C++的重要内容及最佳实践,进行详细阐释,属于能力拔高型的书籍。因此,作为学习笔记,我将不限于这本书的内容,并在需要的时候,追溯到其他任何可能有帮助的资料。我的计划是以这本书为主线,查缺补漏地,完成这次系统性的学习。

2

关于C++新标准,经历过一段有意思的历史。经典的C++标准是1998年发布的,被称为C++98。在那之后的很长时间里,C++委员会一直试图推出新标准,却一再延期。当时对新标准的暂命名为C++0x,然而直到2010年,新标准都未能敲定,以至于当时大家都调侃戏称“C++0x中的0x,其实是十六进制的意思,所以我们还可以拖五六年”。直到2011年,C++11新标准最终发布,才算让很多人都松了口气,也看到了C++语言的新希望。同时,为了让这种拖延症不再如此表现严重,C++委员会宣布了之后每三年就会推出一版新标准,而这规则竟然一直坚持到了今天。是的,现在C++23标准已经在向我们挥手啦。

Image

(图片来自:https://www.modernescpp.com/index.php/c-20-an-overview)

既然现在新标准推出这么快,以至于很多编译器都未必能够很快且很稳定地全部实现。那么,一个值得了解的问题是,到底大家在现实中会用哪套标准呢?针对这个问题,C++ Stories网站(由Bartlomiej Filipek建立并维护,他也是《C++17 in Detail》和《C++ Lambda Story》两本书的作者)上每年年末都会在网上发起一个投票统计并展示结果,可以做参考:

Image

Image

(以上两个截图来自:https://www.cppstories.com/2021/cpp-status-2021/)

可见,还是有相当多人会快速跟进并使用较新的语言标准的,这应该与新标准带来的语法简化和便利性有很大关系(C++能保持向后兼容性,在不牺牲原标准的强大能力的情况下,扩展出更加简便的语法,这也是很神奇的事)。而C++17的使用率远高于C++20,则很可能与编译器的支持情况等有关。所以,预期随着C++23标准的成熟和推出,C++20的使用者人数及比例应该也会越来越多。

3

那么,C++语言在生物信息学领域的应用又如何呢?

针对这个问题,可以在GitHub上查询并选择bioinformatics这个主题标签,看到生信相关的不同语言实现的软件仓库数量:

Image

(截图自GitHub,https://github.com/topics/bioinformatics?o=desc&s=stars)

果然,Python独占鳌头,其比例远高于其他语言。而R紧随其后。再之后就是C++(Jupyter Notebook中使用的大概率会是Python),比例大概占到1/20。

然而,在我们通常了解到的生信培训或课程中,几乎没有讲授C++语言的内容。大概我们培训的目的,主要还是希望能快速入门和上手,能够充当工具人吧。既然如此,在我后续的笔记中,我还是有必要多结合生信的相关背景来做展开,这对于帮助生信从业者们摆脱“工具人”标签,我想应该会有一定帮助吧。

--- END ---

注:本文首发表于“不靠谱颜论”公众号,并同步至本站。

相关文章