写点什么

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

  • 2015-08-17
  • 本文字数:1147 字

    阅读完需:约 4 分钟

林喆是芒果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 等,我们有了更多选择。

2015-08-17 21:102976
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 143.6 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

聚焦Real Time DaaS 赛道,Tapdata 获数千万美元 Pre-A 轮融资

tapdata

实时数据服务平台 Real Time DaaS

免费分享Mysql从入门到精通的优秀图书

Java入门到架构

JIRA 链接 bitbucket 提示错误 Invalid OAuth credentials

HoneyMoose

Linux之du命令

入门小站

Linux

【Kubernetes技术专题】系统架构介绍

码界西柚

k8s 7月日更

联邦推荐系统——个性化推荐与隐私安全的兼顾者

星云Clustar

联邦学习 推荐系统 数据隐私 数据安全 隐私计算

拓客宝APP系统模式开发定制

获客I3O6O643Z97

高并发服务优化篇:详解RPC的一次调用过程

Coder的技术之路

RPC RPC调用

在腾讯,我的试用期总结

程序员鱼皮

Java c++ Python 大前端 后端

在线XML转HTML工具

入门小站

工具

如何保证 Serverless 业务部署更新的一致性?

Serverless Devs

云计算 Serverless 云原生

[架构实战营]模块二作业

xyu

#架构实战营

CTF中的一些常见骚操作(可以没有,但不能不会)

网络安全学海

网络安全 信息安全 CTF 渗透测试 漏洞分析

数字人民币的基础:共识与信任

CECBC

5分钟速读之Rust权威指南(四十三)宏

wzx

rust

想在Java八股文面试中脱颖而出?这《1000道互联网大厂Java工程师面试题》必不可少!

白亦杨

Java 编程 程序员

【涨知识】你不知道的Python常用开发工具!猿来这么多!

小阿杰

Python 后端 开发工具

小解c# foreach原理

喵叔

7月日更

从脑瘫患者重获交流到免开颅微创,脑机接口更安全了吗?

脑极体

图像的读取,显示与存储操作

IT蜗壳-Tango

7月日更

想跳槽却简历石沉大海?一起来围观月薪20k的软件测试工程师真实简历 (含金量高面试题)

程序员阿沐

面试 软件测试 自动化测试 经验分享 简历

JIRA 如何连接到云平台的 bitbucket

HoneyMoose

区块链量化交易所开发|搭建量化交易系统

Geek_23f0c3

交易所开发 量化交易系统 区块链、

剧本杀是不是个好生意?

石云升

商业洞察 商业分析 7月日更

勇于尝试新鲜事物,利于项目来积累学习经验

吴脑的键客

职业规划

想在Java八股文面试中脱颖而出?这《1000道互联网大厂Java工程师面试题》必不可少!

Java 编程 程序员

Nginx配置location

刘旭东

nginx 反向代理

软件库与框架的区别

码语者

架构 框架

大数据训练营-0711课后作业

cc

nacos的作为服务配置怎么玩?

卢卡多多

nacos 服务 7月日更

Druid 0.15 版本启动错误

HoneyMoose

老树新花:芒果TV林喆谈C++11选型与应用_QCon_臧秀涛_InfoQ精选文章