写点什么

老树新花:芒果 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:102727
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

译文 | AI产品经理:如何打造一款SaaS+AI的优质产品

LigaAI

产品经理 研发管理

校友会小程序开发笔记一:背景与技术方案的选型

CC同学

小程序云开发 校友录小程序 校友会小程序

Java包装类(Integer 详解 )

若尘

java编程 6月日更

PO 就是Scrum中的产品经理?别再搞不清啦

万事ONES

项目管理 Scrum 敏捷开发 PO ONES

MySQL中的pid与socket是什么?

Simon

MySQL

密码学系列之:feistel cipher

程序那些事

加密解密 密码学 程序那些事

【LeetCode】石子游戏Java题解

Albert

算法 LeetCode 6月日更

故事|订单系统中的补偿事务

悟空聊架构

故事 事务 6月日更 订单系统 补偿事务

连续七年,我们持续领跑

一分钟开发一个表单

蛋先生DX

vue.js 表单 动态表单 6月日更

针对 MySQL IO 特点进行的存储优化揭秘

焱融科技

MySQL 技术 分布式 高性能 文件存储

用EasyRecovery“监控硬盘”功能检测硬盘问题的方法

淋雨

数据恢复 EasyRecovery 文件恢复

快来,这里有23种设计模式的Go语言实现

华为云开发者联盟

线程 设计模式 单例模式 Go 语言

618 技术特辑(一)不知不觉超预算3倍,你为何买买买停不下来?

华为云开发者联盟

电商 图数据库 知识图谱 618 图引擎服务

校友会小程序开发笔记三:数据库设计

CC同学

小程序云开发 校友录小程序 校友会小程序

软件工程,其实没有任何工程而言

实力程序员

react源码解析13.hooks源码

全栈潇晨

React

618 技术特辑(二)几百万人同时下单的秒杀,为什么越来越容易抢到了

华为云开发者联盟

数据库 服务器 流量 618 弹性负载均衡

拍乐云受邀2021亚太CDN峰会,技术创新赋能行业新价值

拍乐云Pano

RTC

阿里云视频云 Retina 多媒体 AI 体验馆开张啦!

阿里云CloudImagine

阿里云 短视频 视频处理 媒体处理 视频制作

校友会小程序开发笔记二:功能需求设计

CC同学

小程序云开发 校友录小程序 校友会小程序

教你两招,解决数据膨胀

华为云开发者联盟

数据 GaussDB(DWS) VACUUM 数据膨胀 FSM

缓存的世界 Redis(二)-持久化

卢卡多多

redis redis持久化 配置文件持久化 6月日更

并发王者课-铂金1:探本溯源-为何说Lock接口是Java中锁的基础

MetaThoughts

Java 多线程 并发 并发王者

JAVA笔记(三)--变量及运算符

加百利

Java 程序员 后端 6月日更

项目经理如何有效管理需求变更?

万事ONES

需求管理 ONES 项目经理

6月26日,HarmonyOS开发者日将于杭州举办

科技汇

JavaScript 学习(三)

空城机

JavaScript 大前端 6月日更

Java8 的时间库(1):介绍 Java8 中的时间类及常用 API

看山

Java 6月日更

【Flutter 专题】103 初识 Flutter Mixin

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

Python——字典的使用

在即

6月日更

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