老树新花:芒果TV林喆谈C++11选型与应用

林喆是芒果TV的系统工程师。在10月15日~17日的QCon上海2015大会上,他将分享《C++11核心特性简析》,结合实际项目经验,分享一下他对C++11一些新特性的理解和应用。在大会开始前,InfoQ对他做了采访,谈到了C++11的选择与应用、编程语言选型等话题。以下为采访内容。

\\

InfoQ:您现在在芒果TV主要负责哪些方面?

\\
\

林喆:我在长沙芒果TV负责Redis解决方案的制定,包括Redis集群调配、管理维护以及内部培训事宜,以及Redis集群代理redis-cerberus、控制管理程序redis-ctl等相关项目的开发工作。这两个项目都托管在GitHub上,感兴趣的读者可以自行查阅。

\
\\

InfoQ:可以简单介绍一下redis-cerberus这个项目吗?

\\
\

林喆:redis-cerberus是一个Redis集群代理程序,早期是为了在使用Redis集群的同时兼容旧客户端和应用程序库而开发的。后续开发过程中加入了基于Redis集群主从模式的读写分离特性。

\
\\

InfoQ:这个项目为什么会考虑用C++11开发?

\\
\

林喆:首先,选择C++开发是基于两点考虑:性能和开发效率。而之所以选择使用了C++11的特性,是因为新标准对原有的一些缺陷进行了有效的弥补,并且增加了很多有利于提高开发效率的特性。

\
\\

InfoQ:C++11引入了很多特性,可以分享一下实际使用中的感受吗?比如给开发带来了哪些好处?

\\
\

林喆:C++11引入的新特性有很多,我在项目中用到的可以分为三个方面,包括更好的对象生命周期控制语义、更灵活的语法以及多线程。具体我会在QCon上分享。下面简单举两个例子。

\\

在更好的对象生命周期控制语义这方面,新标准库中引入的std::unique_ptr(在redis-cerberus项目中有进一步封装) 表示对一个对象的唯一引用。在阅读代码的时候,如果看到对象A成员里有一个std::unique_ptr去引用另一个对象B,那么隐含的语义是,B的生命周期就应该完全由A来决定,并会随着A的析构而析构。

\\

在更灵活的语法方面,我想最易用的就是基于容器的迭代循环,有了auto自动推断类型,不需要再去写很长的如“std::vector::iterator i”这样用于指定类型的代码,把精力从这种无益的体力劳动中释放了出来。

\
\\

InfoQ:您在开发中选择编程语言都会考虑哪些因素?

\\
\

林喆:无疑使用环境是最重要的因素,如果是系统级程序,并且不太适用C++ STL库(主要是从内存分配器和异常两方面考量),那么C语言肯定是第一选择;其它对性能很敏感的环境,C++比较适合;使用脚本控制的话, 则Python自然是一把利器;新出现的一些语言,如Rust在许多方面也表现不错,不过我还没有深入接触。

\\

需要单独说说的是Javascript,目前浏览器普遍支持的只有这一种脚本语言,但它又有很多缺陷和不便需要规避和改善。我认为JavaScript更类似于前端界的汇编语言,现在也有一些编译为JavaScript的语言,如CoffeeScript、TypeScript等,我们有了更多选择。

\

你可能感兴趣的:(数据库,javascript,rust,ViewUI)