这是“社区中”的第三部分,是C++开发人员的一系列聚光灯成员。今天我们将见到Jeremiah Morrill,MVP,开发者和社区成员。
耶利米已经在软件开发领域工作了14年。在他的职业生涯中,他已经移动到语言、操作系统和产品之间,但喜欢在Windows“家”上调用C++。他花了很多年的时间帮助专业地编写定制视频和媒体解决方案,并且喜欢通过开源项目分享他的知识。自2010年以来,他一直被授予微软MVP,以表彰他在客户端应用程序开发方面的贡献,并希望很快在他的博客中添加一些更有价值的内容。
在他的博客上找到耶利米( http://jeremiahmorrill.wordpress.com )在Twitter上( https://twitter.com/jmorrill ).
C++的140个字符或更少?
C++是选择和控制。它给人一个选择,是高水平,还是低水平。它使您能够控制代码的执行方式。
为什么C++?
我相信C++存在,并继续存在,因为有许多系统只需要C++提供的东西。它可能不是某些人用来编写业务线应用程序的工具,但它可能会驱动它所在的虚拟机。媒体编解码器可以用高级语言编写,但它的工具,如C++,允许它们在更广泛的机器上运行。许多这样的系统可能相当复杂,因此拥有一些不仅有助于提高性能,而且有助于维护的系统是至关重要的。对于所有问题,C++并不是最好的答案,但我很少有,如果我回过头来,说“我希望我没有编写代码C++”。
你最喜欢C++的什么?
你可以通过一个人的言行或设定的目标来了解他。也就是说,C++的一个租户是“你只为你所用的东西付费”,这不应该与“所有的算法都同样有效”混淆。然而,这并不意味着标准通常不应该为您正在解决的问题增加不必要的开销。效率在软件的许多方面都很重要,而C++是我确信的一个水平。
原始性能只是我喜欢C++的一部分。毕竟,我们可以在汇编语言中编写高性能的例程,但是管理起来要困难得多,而且要找到精通汇编语言的开发人员可能很难。维修性和生产力通常不是C++的,但应该是,尤其是考虑到C++ 11的新添加。类、模板、标准库、lambda等都是一起帮助编写强大的、抽象的代码……而且由于它的表达能力的多少,代码就更少了。
资源处理是C++的另一个重要部分。在使用OS资源时,无论是文件还是GPU纹理,都需要控制何时释放它们。有些语言推送一种模式,例如IDisposable,在这种模式下,开发人员必须记住运行Dispose(),有时甚至与其他类一起运行Dispose()调用,这是众所周知的泄漏原因。用C++,这对RAII习语来说从来都不是问题。只是自动的。
至少?
我觉得如果我不提编译时间,我就不会完全诚实。有很多技巧,比如预编译的头文件,或者习语,比如pImpl,可以用来帮助解决这个问题,但是与其他语言相比,它的速度很慢。另一方面,这都是相对的,可以说Javascript比基于字节码的语言“编译”得更快。当您只想快速迭代时,编译时间确实会受到影响。虽然它确实符合语言的思想,就像C++一样,在运行时或编译时,都要付出代价,而不是试图隐藏它们。
我还要提出编译器的错误。他们中的许多人似乎很神秘,或只是简单的不直观。模板的问题可能会产生足够的错误来填满一本书。在使用编译器足够长的时间后,您很快就会发现错误的真正含义,即使这样,它们也可能需要一些检查。这不是C++固有的问题,但在编译器和工具中非常常见。它正在变得越来越好,一些供应商在使编译器错误不仅友好,而且实际上告诉你如何修复它方面处于领先地位。
你会给新的C++开发者什么建议?
毫无偏见地进来吧。C++有很多内置的污名。有些是应得的,有些是错误的,还有很多是过时的。管理内存不是你必须做的,或者通常应该做的。堆损坏不是您应该得到的,除非您决定手动管理内存。指针不再是你经常使用的东西,而是你经常避免的东西。
起初C++看起来像个怪物。不要试图一下子学会。我们大多数人生活在C++的一个子集里,这没问题。使用任何东西的人都被称为“编译器开发人员”,世界上没有很多这样的人。了解在堆栈上分配的类与在堆上分配的类。学习RAII成语。理解容器,比如向量或地图。知道如果你使用“新”关键字没有智能指针,你是走向麻烦,或者如果你随意使用“删除”关键字,你已经有麻烦了。
你有什么喜欢的C++作者或书吗?
Scott Meyers的任何文章,特别是“改进程序和设计的n种方法”。无论是赫伯·萨特还是安德烈·亚历山德雷斯库,你都不会出问题。
你最喜欢的技术网站在哪里?
我肯定我说的不是原创性的 栈溢出 . 它是寻找帮助的最好资源之一,或者只是学习关于C++的新东西。即使是在Twitter上与知识渊博的人互动也会有好处。至少这是发泄不满的好地方。
我应该问什么问题?
你为什么喜欢使用视频和图形技术?
答案呢?
我可以不耐烦,像素给我即时的满足。
谢谢耶利米!