分类目录归档:社区活动

cppcon2017将于九月在华盛顿州的贝尔维尤举行

今年的cppcon将于9.24-9.27在华盛顿州的贝尔维尤举办,将有一百多位来自世界各地的C++好手和专家奉上精彩的演讲,世界各大知名公司均会参会,这是一场C++技术盛宴。随着C++17的确定,相信今年会涌现出更多的新思想和新技术。purecpp社区创始人祁宇也将在这次的大会上做一个演讲。purecpp社区将持续关注cppcon2017技术大会的最新资讯。

欢迎关注purecpp社区的微信公众号。
qrcode_for_gh_300922997283_430

欢迎加入Modern C++ Meta-programming组织

purecpp社区将建一个专门讨论现代C++元编程的组织(注:不是c++98/03的元编程,是c++11/14/17的元编程),欢迎报名加入。
报名方式:
实现一个有5个算法的type_list,要有测试代码并能编译通过,将实现的代码发到purecpp@163.com邮箱,同时还有你的QQ号。如果审核通过之后会将你拉到专门的群。
期待你们的type_list, have fun!

中国的cppcon需要您的参与!

为什么要举办这样一个C++大会

C++标准在不断的发展和演进,从C++11到C++14,再到现在的C++17,还有接下来的C++20和C++23.历史的车轮一直在滚滚向前,C++这个有着三十多年历史的语言也在顺应着时代潮流不断地向前发展演进。C++语言正在发生着深刻的变革,这些变革给工业界带来了很多变化,比如让我们的程序变得更安全、更高效和更简洁,而这些新技术正在提高工业生产力,谁先掌握这些新技术会谁将会先享受到到新技术带来的红利。在美国,在欧洲,现代C++正在如火如荼的讨论和应用,每年在美国举办的cppcon无疑是工业界、学术界中水平最高的C++技术盛会,cppcon每年有超过2000人参会,上百位来自美欧的C++专家和高手分享和交流C++最新的技术和新的idea。

然而cppcon一直在美国举办,中国的C++爱好者想参与往往受限于距离和英文语言等因素不便参加。现在有一个好消息:purecpp社区将会在今年晚些时候参与举办一场高水平、国际化的C++大会,大会的形式和内容将会与cppcon类似但又具备中国特色,如果你不能亲自前往美国参加cppcon那么就不要错过这次在中国举行的C++大会。

举办方的资质

purecpp社区自2015年成立以来一直致力于现代C++的研究、应用和推广,在各大社区和《程序员》杂质发表了大量的技术文章,同时也开源了一批现代C++项目。purecpp社区的创始人祁宇在今年5月份参加了在美国举办的c++ now技术大会并在会上做了演讲,后面相关视频会放在youtube上。作为深度的参会人员,他知道C++未来的发展方向,知道国际上正在研究的C++热点,也知道广大的C++er希望听到什么内容。cppcon和cppnow为人称道的原因就在于它们的专业性,因此,purecpp社区作为举办方之一就是希望在中国办一场cppcon那样专业的、受欢迎的C++大会。

大会的日程

大会的日期、地点和议程目前还没确定,需要您参与进来,我们希望知道一些基本信息:

  1. 有多少人愿意参加这次大会;
  2. 你想听关于哪些方面的内容;

有了这些条件之后我们才能更好地确定大会日程,请参与我们的调查(文末有一个调查表),这场C++盛会需要您的参与!

大会内容

我们希望这次大会能聚焦于现代C++(C++11/14/17)以及工业界热点,比如C++在人工智能领域、分布式数据处理引擎(GraphLab)领域、区块链领域的应用,当然最重要的是你创新的idea!!

就以Cppcon的主题作为这次大会的主题:

  1. C++ Best Practices
  2. Concurrent Thinking in C++
  3. Crafting Embedded Software in C++
  4. Modern C++ Template Programming
  5. Modernizing your C++
  6. Move Semantics: Everything You Always Wanted to Know, But Were Afraid to Ask
  7. Moving to C++17: The New Language and Library Features
  8. Debugging and Profiling C++ Code on Linux
  9. Exploring the C++ Standard Library
  10. Practical Modern C++
  11. Programming with Qt/Widgets
  12. The Standard Library from Scratch

如何报名

到时候报名的相关信息会放在purecpp.org上,敬请关注,先说一下讲师和观众的报名流程。

讲师报名流程

不管你是什么学历、什么公司、什么国家,只要你有和C++有关的创新的idea,你就可以报名!
讲师报名需要填一个报名表,类似于cppcon,你需要提供演讲者的信息、演讲的摘要信息和主要内容。如果你有很有说服力的证明材料就更好了,证明材料是能证明你演讲内容的代码或之前的ppt。

讲师报名的时间大概在两个月左右,报名阶段结束之后就是评审阶段。采取的是专家评审方式,由两名中国专家和两名外国专家对演讲内容进行评审,评审通过的讲师就可以参会了。无论评审通过与否我们都会告知报名者结果。

这次大会的外国讲师和中国的讲师比例大约为1:2。

观众报名流程

观众需要在官网上购票参会,具体等待后续的通知,学生的话会有折扣。

需要您的参与

 

C++ Now 技术大会将在于今年5.15-5.20在美国科罗拉州的阿斯彭举办

header_image2

C++ Now 2017技术大会的日程已经公布,5.15-5.20将有来自世界各地的50多位讲师分享modern c++的技术和idea。这里有详细的日程表,以及讲师介绍

purecpp社区创始人祁宇也将在这次的大会上做一个演讲,他也是唯一一位中来自中国的讲师。purecpp社区将持续关注c++ now2017技术大会的最新资讯。

欢迎关注purecpp社区的微信公众号。
qrcode_for_gh_300922997283_430
社区微博:http://weibo.com/5558815868

purecpp社区第二期技术课(报名截止到2.28)

背景

modern C++国外已经用得如火如荼了,而国内大多还处于观望阶段,modern C++应该被更广泛地应用。我作为modern C++的倡导者和实践者,希望通过一些技术培训,将最新的C++特性和新技术思想介绍给C++爱好者,让大家不仅仅能深入理解新特性,还能体会到新特性是如何解决一些难题,以及最佳实践。真心希望modern C++能走进更多的企业,让更多的C++开发者享受新标准带来的好处,本次技术公开课算是推广modern C++的一种尝试,看看实际效果如何,我会根据实际效果来决定未来是否继续开课。

课程介绍

本次技术公开课的主题是modern c++实现编译期反射。反射是一种根据元数据来获取类内部信息的机制,通过元数据就可以获取对象的字段和方法等信息。C#和java的反射机制都是通过获取对象的元数据来实现的。反射可以用于依赖注入、ORM对象-实体映射、序列化和反序列化等与对象本身信息密切相关的领域。比如,java的Spring框架,其依赖注入的基础是建立在反射的基础之上的,可以根据元数据获取类型的信息并动态创建对象。ORM对象-实体之间的映射也是通过反射实现的。java和c#都是基于中间运行时的语言,中间运行时提供了反射机制,所以反射对于运行时语言来说很容易,但是对于没有中间运行时的语言,要想实现反射是很困难的。

幸运的是使用modern c++的新特性和一些模版元编程技巧可以实现一种通用的非侵入式的编译期反射

课程面向的用户是C++中高级开发者,总共分为2次课程:

  1. C++11/14实现编译期反射的技术基础(已结束

  2. C++11/14实现编译期反射的实现和应用(已结束

第一次课主要内容

第一次课的主题是:C++11/14实现编译期反射的技术基础(已结束)

这次课程是为后续课程做铺垫,介绍实现编译期反射所需要用到的一些新特性和一些元编程技巧。

主要内容为:

C++11特性

  • 完美转发
  • tuple
  • type_traits
  • 可变模版参数

C++14特性

  • constexpr
  • void_t
  • std::index_sequence
  • auto function
  • auto lambda
  • decltype(auto)

其他

  • 宏元
  • SFINAE

第二次课主要内容

主题:C++11/14实现编译期反射的实现和应用(已结束

  • 实现反射的技术思想
  • 具体实现
  • 反射的应用

如何报名

将报名信息发到我的邮箱qicosmos@163.com, 报名信息包括:姓名,邮箱,电话,所在公司。

公开课以网络直播方式进行,报名费用为400,如果你听课之后发现完全听不懂,退还报名费。

具体的开课时间(在某一个周末或者晚上)我会通过邮件告知报名用户。

如果有企业用户需要modern c++技术咨询服务也可以联系我。

purecpp社区第一期技术公开课(报名截止到1.5号)

背景

modern C++国外已经用得如火如荼了,而国内大多还处于观望阶段,modern C++应该被更广泛地应用。我作为modern C++的倡导者和实践者,希望通过一些技术培训,将最新的C++特性和新技术思想介绍给C++爱好者,让大家不仅仅能深入理解新特性,还能体会到新特性是如何解决一些难题,以及最佳实践。真心希望modern C++能走进更多的企业,让更多的C++开发者享受新标准带来的好处,本次技术公开课算是推广modern C++的一种尝试,看看实际效果如何,我会根据实际效果来决定未来是否继续开课。

课程介绍

本次技术公开课的主题是modern c++实现编译期反射。反射是一种根据元数据来获取类内部信息的机制,通过元数据就可以获取对象的字段和方法等信息。C#和java的反射机制都是通过获取对象的元数据来实现的。反射可以用于依赖注入、ORM对象-实体映射、序列化和反序列化等与对象本身信息密切相关的领域。比如,java的Spring框架,其依赖注入的基础是建立在反射的基础之上的,可以根据元数据获取类型的信息并动态创建对象。ORM对象-实体之间的映射也是通过反射实现的。java和c#都是基于中间运行时的语言,中间运行时提供了反射机制,所以反射对于运行时语言来说很容易,但是对于没有中间运行时的语言,要想实现反射是很困难的。

幸运的是使用modern c++的新特性和一些模版元编程技巧可以实现一种通用的非侵入式的编译期反射

课程面向的用户是C++中高级开发者,总共分为三次课程:

  1. C++11/14实现编译期反射的技术基础

  2. C++11/14实现编译期反射的实现

  3. C++11/14实现编译期反射的应用

第一次课主要内容

第一次课的主题是:C++11/14实现编译期反射的技术基础

这次课程是为后续课程做铺垫,介绍实现编译期反射所需要用到的一些新特性和一些元编程技巧。

主要内容为:

C++11特性

  • 完美转发
  • tuple
  • type_traits
  • 可变模版参数

C++14特性

  • constexpr
  • void_t
  • std::index_sequence
  • auto function
  • auto lambda
  • decltype(auto)

其他

  • 宏元
  • SFINAE

第二次课主要内容

主题:C++11/14实现编译期反射的实现
主要内容待定

第三次课主要内容

主题:C++11/14实现编译期反射的应用
主要内容待定

如何报名

将报名信息发到我的邮箱qicosmos@163.com, 报名信息包括:姓名,邮箱,电话,所在公司。

公开课以网络直播或者视频方式进行,报名费用为400,如果你听课之后发现完全听不懂,退还报名费。

具体的开课时间(在某一个周末或者晚上)我会通过邮件告知报名用户。

如果有企业用户需要modern c++技术咨询服务也可以联系我。

Trump和C++

在美国大选尘埃落定之际,我想聊聊Trump和C++,很多人也许会觉得奇怪,Trump这个新当选的美国总统和C++有啥关系吗,难道他是一位C++程序员?!其实此川普非彼川普,原来是一位叫Trump的C++程序员,他是Trump的粉丝,让我们来八卦一下这位C++界的川普吧。这是他的twitter
qq%e5%9b%be%e7%89%8720161109214839

他的图像就是新当选的美国总统Trump,说明他是支持Trump的粉丝。没想到之前一直不被看好的川普逆袭成功,本来想看看他的twitter上有没有相关的段子,结果没看到。从他的twitter看到,他还参加了今年的cppcon,他的演讲主题我还没查到,应该比较精彩。

qq%e5%9b%be%e7%89%8720161109214905

我之前并不知道C++界有一位Trump,是C++标准委员会的Mike Spertus告诉我的。这次参加C++及系统软件技术大会,晚上大家一起吃饭的时候,我坐在Andrei Alexandrescu和Mike Spertus旁边,和他们闲聊,聊到美国大选和川普。Mike说C++ Trump,我还挺吃惊,以为美国总统候选人和C++有什么渊源,后来听他解释才知道是这么回事。再聊聊美国大选,我问Andrei和Mike他们支持希拉里还是川普,Mike说Trump is crazy,还说希拉里的支持率远远超过Trump,认为Trump的机会不大。Andrei也赞同这个观点,看得出他们挺支持希拉里当选美国总统的,也挺有信心的。同桌的小伙伴问,如果Trump当选美国总统了,他们会怎么办。Mike说如果Trump真当选了,他只有接受现实了。没想到一语成谶,川普逆袭成功^_^。
qq%e5%9b%be%e7%89%8720161109214927

Mike还问我如果Trump当选了会对中国产生什么影响。我说川普当选会对中国等国家更友好。Andrei和Mike酒量不错,每人大概喝了五瓶啤酒,还说青岛啤酒在美国也很知名。
再分享一下C++之父在大会上的风采
qq%e5%9b%be%e7%89%8720161109215211

能聆听这位带领我们cpper前进的精神领袖的演讲,真的很激动,我坚信C++会越来越好,C++程序员的日子也会越来越美好!
希望明年能有机会在cppcon上和那位C++ Trump见面聊聊^_^

C++技术沙龙报名啦!

唯有技术干货才适合这样装B的场合,不止于走码观花,我们力求在每一个脑洞大开的背后,寻找被忽略的蛛丝码迹,继续我们的脑洞大开运动会,在C/C++的世界里做一个 英姿飒爽的骑士 — 致颜值高得不像实力派的攻城狮们。

主题:技术沙龙 — 牛人码面

时间:2015年12月5日,14:00 — 18:00

地点:金山软件大厦1楼VIP室(广东省珠海市吉大莲山巷8号金山软件大厦(519015) )

沙龙课题

  • 《C++17新特性带来的改善与影响》C++编译器开发工程师,<<深入理解C++11>>(第二版)作者   IBM 吴钊
  • 《Nginx 在windows系统下优化》开源项目 Nginx Openresty For Windows 的发起者,360互联网安全中心 张家柱
  • 《C++中使用golang的协程》实战派C++er大型分布式系统架构设计者 魅族科技 于洋子

内容&讲师介绍:

一、吴钊:IBM XL C++编译器开发工程师,目前主要从事Clang与IBM编译器的融合。对C++语言具有浓烈的兴趣,参与《深入理解C++11》(第二版)的编写,长期活跃于知乎社区C++与编译器板块,ID为蓝色。

内容简介:C++17将会是下一个C++标准,不同于C++14对C++11的小改进,这将会是一个大的标准发布。在该标准中,也将计划引入很多让人兴奋的特性,如有利于改善编译时间的Module System,有利于改善编译器模板错误信息诊断的Concept,文件系统、网络库(基于Boost ASIO)、协程、SIMD等,而我将在此次分享中将着重分享Module System和Concept这两个影响很深远的C++17新特性。

二、于洋子:魅族科技,Linux-C++工程师  在大型分布式系统的设计与开发方面有丰富的经验 魅族用户量百万级走向千万级的见证者。

内容简介:作为C++er的你, 是否曾羡慕golang协程极佳的开发效率,而面对自己异步回调满天飞的代码黯然神伤?是否曾羡慕golang\erlang这种并发语言可以很简单地利用多核CPU,

而对C++多线程编程的复杂性望而却步? 在沙龙分享开源项目cpp_features,帮助你利用C++的高性能的同时获得golang一般的开发效率.

KeyNote:

  1. 同步、异步、协程Demo
  2. C++协程
  3. 协程调度
  4. 阻塞网络IO
  5. 三方库
  6. 语法
  7. 其他特性
  8. 上层封装

三、张家柱:360互联网安全中心,开源项目 Nginx Openresty For Windows 的发起者。

内容简介:

1、概述:
与官网 windows 版本对比
子进程启动方式(主要的差异)
代码差异
2、共享内存
共享内存坑一(无法使用共享内存)&解决方案
共享内存坑二&解决方案
3、性能改进
单进程限制
1024 连接数限制
新的网络模型
大名鼎鼎的 IOCP模型
使用 WSAPoll 模型
4、其他
多实例的支持

报名邮箱:lvxuee@kingsoft.com(来信注明姓名+联系方式+擅长技术或领域)免费报名。

互动奖品:小米自拍杆、运动手环、小米充电宝、wifi放大器、小米音响。

活动流程:

项  目 人 员 时 间 备 注
《C++17新特性带来的改善与影响》 吴钊 14:00-14:50 IBM
下午茶 漂亮MM 14:50-15:00 糕点、水果、咖啡
《Nginx 在windows系统下优化》 张家柱 15:00-15:50 360互联网安全中心
抽奖 漂亮MM 15:50-16:00 试手气
《C++中使用golang的协程》 于洋子 16:00-16:50 魅族科技
圆桌交流 ALL 17:00-17:30 自由交流

填写报名信息:

 

对2015.05技术沙龙中江南群主“任性”故事的探讨

五月份技术沙龙第二场演讲中,江南群主讲述的第二个“任性”故事的一个细节引发了一些争议。经小生仔细观察,三位讲师都有使用到相同的技术,但是实现的方法都有所不同,本文特来对这一个问题做一次详细的研究。

众所周知,在C++中实现反射是一件很棘手的事情。但是在确保没有类型退化(decay)和没有隐式类型转换的干扰下,是用模板元编程的一些技巧可以帮助我们完成一些目标。比如判断某个类型中是否含有某个成员函数,本文中的类成员函数仅指非静态成员函数

现实的基本思想是“一瞥”( catch a glimps of )这个成员函数。一瞥实际上是编译期的某种计算,而不会生成实际的代码。例如非求值运算符( Unevaluated Operator ),重载解析模板特化。非求值运算符在C++98下只有sizeof,到了C++11标准又扩充了decltype,typeid和noexcept三个操作符。先来看看C++98的实现。

由于sizeof只能对类型大小求值,因此C++98的版本的基本思想就是利用SFINAE和重载决议,配合sizeof来计算函数返回类型的大小,而获知哪一个test函数是决议的结果。如果是返回One类型的test,那么可以判断出这个类型T含有命名为foo,返回类型为void且有一个形参为void的成员函数。

这里有两个问题。1. 是否含有成员函数foo,单单只知道成员函数名是不够的,还必须知道它的完整签名,如返回值(暂不考虑cv修饰符)。2. 重载解析的规则里面有讲,相同的形参和不同返回类型的重载函数是有歧义的。因此,我们只需要知道形参就足够了,而不需要知道其完整的签名。

问题一很好解决,就是啰嗦点,除了提供函数名称之外,所有的形参和返回值类型一并提供。在c++98中,想做到这一点更啰嗦。我们需要提供形参数目从1到N每种版本的实现,具体实现多少个N由类库作者自行估量。

第二个问题,我们要寻求其他的实现方法了。因为指向非静态成员函数的指针(pointer to non-static memeber function)的签名有返回值类型,还有cv修饰符。基本思路是,假装我们要调用这个成员函数。先看看实现。

sizeof(((T*)0)->foo()),这一句就是假装去调用这个函数并尝试去计算函数返回值的类型的大小。由于sizeof是非求值运算符,因此没有生成运行期的空指针调用foo的代码。从这里就能看出sizeof操作符已经心有余而力不足了。首先sizeof将类型映射到了类型大小,丢失了类型信息;其次sizeof无法对void求值,这也是这个实现版本的硬伤。总之小生受能力所限,一直无法在cpp98版本中寻求比较好的实现方法。拜求得道大神之不吝赐教。

到了c++11的时代,情况好了许多。decltype这个非求值运算符的出现,让C++98中实现has_member_foo的第二种思路得以实现。先看看实现代码。

基本思想同样是SFINAE和重载解析,配合非求值运算符。只不过换成了delctype运算符。相比于sizeof运算符,decltype保留了非求值表达返回类型的完整信息,更重要的是decltype也能对void计算,不会出现sizeof(void)的尴尬。

深入细节,我们来看看C++11的实现版本是如何一瞥foo的调用的。通常,我们在描述数学问题的时候,总是使用假设。这里类比之,“假设”有一个类型的实例,且“假设”有可列的实参的全部实例,“尝试”使用这些实例调用函数foo,让decltype演绎这次假设的返回值结果!由于decltype是非求值运算符,所以计算中对象不需要真正的实例,同样函数只需要声明而不需要函数体。std::declval就是这样的一个函数。在std命名空间中就是返一个universal reference,并没有函数体。std::decltype只能用于非求值的计算当中。小生认为这种实现是最为简单的,如果使用指向非静态成员函数的指针来实现还要考虑返回值和cv修饰符,而这一种是完全不用考虑的。

接下来扩展一下思路。

拓展思路-另外的实现方法。文章的开头提及到的非求值的编译期计算,除了非求值运算符和重载解析外,还有一个模板特化。那么是否可以通过模板特化来实现本文的需求呢?先来看看基本思路。has_member_foo的泛型实现,应当返回false,继承std::false_type即可。在某种情况下的特化继承std::true_type!听起来是不是很美好?!实现细节。首先,为了简化问题,先不考虑成员函数有形参的情况。元函数has_member_foo的第一个参数是T,要判断的类型,应该是雷打不动的。而我们需要额外的一个参数,为特化的实现所用。

先举一个例子。还记得元函数enable_if配合模板特化的技巧吗?元函数template <typename T> struct size_integral;只计算整形类型的大小,其他类型不做任何计算。看看实现的代码。

当编译器尝试使用某个类型T去实例化size_integral的时候,会实例化所有的特化版本,并决议最佳的匹配。如果T是一个整形,那么特化版本会选择;如果T不是整形,那么特化版本实例化替换失败,根据SFINAE,会匹配泛型的实例化版本。

现在的问题是,针对本文的需求,我们需要一个元函数工具,使得传递任意可列个C++参数类型给它,它始终导出一个void. 为了迎合上面给出的例子的形式,小生才选择void。于是我们构建一个这样的工具,其实现如下。

也有了本文需求的另外一个实现

如果decltype能够成功推导出voider_t中的类型,那么决议就会选择这个more specialized的版本;反之,就会选择泛化的版本。实现是不是更优雅了?使用模板偏特化减少了使用重载解析造成的额外代码,至少小生谨以为然。

只可惜目前的编译器都不支持这种实现,原因是因为voider元函数没有使用任何模板参数,而被编译期做了优化。C++委员会也有一个提案来解决这个问题,详见CWG 1558, treatment of unused arguments in an alias template specialization. 其中的原委,小生还不是很清楚,望闻得道大神指教。

拓展思路-易用性。江南群主在这个故事中也提到了,这个元函数只能针对某一个成员函数,换一个成员函数要重新实现一个,中间有重复代码。因此有了使用宏来生成代码的实现版本,详见江南群主ppt. 可是江南群主的版本必须“两步走”!先得使用宏声明,再使用。有没有什么方法可以使用一个宏就能搞定?经过小生的测试,仅在msvc平台下还有一个小坑,把宏写在函数体内似乎有点问题,始终都找不到这个模板,不知道其他平台如何。因此一定要把宏写在函数体以外。此外,还需要考虑命名空间的问题。其实易用性的实现就目前的C++标准还是有些不够。

鄙文先写到这里。对于C++1y技术感兴趣的同学请加入我们社区,加入QQ群296561497讨论,让C++的世界更美好。

Copy Protected by Chetan's WP-Copyprotect.