关于C ++的对话:WP 21,Boost,会议

大家好!


最近,下一届C ++ Siberia 2019在新西伯利亚举行,会议气氛舒畅,报道很多。 报告的录像带正在准备出版。 我借此机会与我们经常讲话的两位演讲者交谈,他们很少错过会议,并且总是做出色的报告:安东·波鲁欣· 安托什卡和帕维尔·费洛诺夫。


Anton是C ++标准化工作组国际会议上俄罗斯的ISO代表,是C ++语言标准,Boost库和Boost C ++ Application Development Cookbook的一些公认建议的作者。


Pavel是卡巴斯基实验室的开发人员和研究员,他参与了机器学习方法的应用,以确保网络物理系统的安全,并从事教学工作。 在等待会议视频时,建议您阅读我们谈话的笔录。



谢尔盖:大家好! 我是Sergey Platonov,我们现在在C ++ Siberia会议上。 今天,我们正在与我们的常规发言人– Anton Polukhin和Pavel Filonov进行交谈。 你好吗


帕维尔:太好了! 我们回到了新西伯利亚。


谢尔盖:现在我们正对着西伯利亚森林坐着。


帕维尔(Pavel):风景不错,人很好,非常有趣的话题。


安东:此刻这里比莫斯科温暖。


Sergey:今天我想和您谈谈C ++,但是在C ++会议上听起来很奇怪。 关于不同的事情。 例如,我对您为什么要从莫斯科到新西伯利亚参加会议非常感兴趣,这不是第一次。


帕维尔:就我自己而言,我可以说我有一个主要原因-我真的很想告诉别人一些事情。 我不能把它留给自己。 一方面,当我了解到一些有趣的新事物时,我总是怀疑它是否真的很好,很有趣,我需要去告诉人们,看看他们将如何对此做出反应-他们是吐口水还是要求他们再来。 从不吐口水,不撒番茄的事实来看,人们可能会喜欢我身上爆满的东西。 我想听并讨论它们。 另外,骑车始终是我的荣幸。 我第一次在新西伯利亚参加C ++西伯利亚会议,第二次也是在西伯利亚会议。 那样我就不会来了


安东:去其他城市总是很有趣。 在新西伯利亚,这很棒,比莫斯科温暖。 湿雪不会倒在脖子上。 一加!


谢尔盖:当然,我很虚伪,问这个问题是有原因的。 我对第21工作组以及它的出现方式有记忆。 我有兴趣听实际做到这一点的人。 俄罗斯现在在委员会中有什么代表?


安东:这发生在圣彼得堡的C ++俄罗斯。 我记得我和我的妻子Gor Nishanov( Twitter )已经站在电梯里了,我意识到这是了解如何进入国际标准化委员会的好方法。 实际上,我问过他。 戈尔是这样的:“您知道,今天您还远远不是第一个为我提出这个问题的人。 Yandex的人走近了您。” 我回答我在Yandex工作了一段时间,并要求描述这些人的样子-我也将与他们接触。 戈尔告诉了我一切。 我去找他描述的人。 事实证明,Yandex将创建一个工作组来跟上C ++的发展,并在一个国际委员会中代表俄罗斯开发人员的利益。 该组已创建。 不仅有Yandex员工,还有其他公司的员工。


帕维尔:现在,卡巴斯基实验室的成员安东·比基涅耶夫(Anton Bikineev)也在那里工作。 不幸的是,今天他不在我们身边。


安东:顺便说一句,安东做了一件很酷的事情-他用胳膊和腿爬到编译器的内部,并尝试实施我们的建议之一。 他甚至拥有或多或少可以工作的原型。


Pavel:顺便说一句,他抱怨您编写提案的速度超过了他在编译器中实现提案的速度。


安东:是的。


Sergey:也就是说,Anton Bikineev在这里是我们工作组的核心小组? 很高兴听到会议对此有所帮助。 我希望每个人都知道这是多么有用和有趣。 事实证明,您不必进入Yandex即可加入工作组?


安东:总的来说,不必将您的想法传达给C ++标准化委员会,也不必成为工作组的一员。


帕维尔:看来您可以去网站留下您的建议。


安东:是的,在https://stdcpp.ru 。 在这里您可以分享想法,讨论其他参与者的想法。 有很多想法,但手头不足以承担一切。 因此,如果一个人来并开始撰写至少一些想法提案的特定草稿,那么每个人都将变得更加容易,并且这些想法将很快进入委员会。


帕维尔:安东,您认为工作组最大的贡献是在哪项提案或其他方面?


安东:我们为专业人士中的所有静态反射指明了方向。 就像我现在记得的那样:有一个建议使constexpr_vector一个单独的类,只能在constexpr上下文中使用。 大卫出来(David Vandevoorde)谈论这件事。 整个大厅都在快乐地尖叫,让我们开始吧。 他是这样的:“但是我们想像这样复制标准库中的所有类吗? 没有其他办法。” “也许是constexpr_new? “”不,它不起作用。 我就是这样:接受挑战。 三个月后,我和Sasha Zaitsev制作了一个原型,该原型允许std::vector在constexpr上下文中工作。 它可以直接在clang上运行,甚至在编译器中我也不需要玩任何东西。 我们给大卫看了看,他说:“啊! 那样吗? 不,你在这里骗了。 我们同意了。 他说:“不,当然可以。 顺便说一句,为什么不呢。” 在那之后,他用constexpr_vector抛出了这篇论文,开始工作,以便标准库的所有容器都可以使用constexpr上下文,现在已经有很多人了。 工作组中的我们基本上错过了constexpr的所有算法,Louis Dion使constexpr的容器丢失了,而David使语言的核心巧妙地使某种constexpr成为新的。


谢尔盖:这是关于分配器的吗?


安东:是的。 分配器中存在问题。


谢尔盖:太好了! 这些似乎是巨大的变化。


安东:再过6年,它们就会出现在标准中;-)


帕维尔:不,可能是,我们没有时间这么快就触及它们。


安东: constexpr容器应符合第二十标准。 constexpr算法肯定成功了。


帕维尔:那只是几年?


谢尔盖(Sergey):如果2019年现在已经开始,那么第20个标准将在2020年出现。 好吧,可能是几年了。


Pavel:此外,如果我没记错的话,与标准编写器相比,编译器一直落后于现在,现在我经常看到尝试通过编译器进行实验作为先尝试的尝试-Anton所做的就是您在说的。 然后才以标准的形式采用它。


谢尔盖:我记得以前还有TR。


安东:但是他们赞成TS。 很多变化,是的:-)


谢尔盖:也就是说,现在在现代编译器中,您还可以连接名称空间ts


安东:现在已经完成了带有扩展编译器的复选框,即有Coroutines TS,您可以在Clang和Visual Studio中尝试它们。 有模块TS,并且它们到处都不相同。 有关库内容,多线程,网络的TS。


谢尔盖:这仍然是带有分配器的语言的核心,这是否也由某个单独的标志设置?


安东(Anton):不会给它单独的标志。 David(David Vandevoorde)-一位编译器开发人员,一位EDG前端开发人员,他只是实现了它。 可以相信,这没关系,它不会破坏任何东西,我们不希望有其他新东西,这里没有什么东西可以尝试,一切都可以。 太好了,我们在拉。


谢尔盖:非常酷。


帕维尔:顺便说一句,回到会议主题。 安东,您不仅是C ++俄罗斯的常客,而且还参加了CPP Con,Meeting CPP,CPP Now,也许还有其他事情。 您能以某种方式比较并说出您看到的区别吗? 这些人是同一个人,同一主题,还是感觉,根据您的移动方式,会议的主题或工作语言会发生变化吗?


安东:原则上,人们认为在俄罗斯的会议上有非常强大的开发商。 您可以告诉他们非常复杂的主题。 我试图在另一个会议的某个地方讲一个非常困难的话题magic_get,我还记得一个家伙,正如我所说的,他不再对外部刺激做出反应。 他只是坐着,没有眨眼。 我想,也许我可以开个玩笑-我开玩笑,开玩笑-他甚至都没眨眼。 然后他绕了过去。 但是最好只在某个地方告诉这样的铁杆。


谢尔盖:只对安东·比基涅夫Anton Bikineev)有用 。 只是我们在晚餐时间回想起了这个故事,当时您在其中一个会议上谈论magic_get。


帕维尔(Pavel):安东(Anton)参加了这次会议,并向您提出了一个非常棘手的问题,以至于他显然超出了您所说的范围。 看来类型列表中的搜索不是线性的,而是借助二进制搜索。 您回答了他,问他怎么知道。 Anton向他提到,他一直在报告之前整晚阅读GitHub上的magic_get源代码 ,并试图弄清楚它是如何工作的。


安东:我们与安东·比基涅夫(Anton Bikineev)有一个古老的奇怪故事。 我知道他是如何在Boost中做出几次承诺的,甚至还没有我们彼此认识之前。 之后,我看到他在Clang和constexpr中都发出了请求请求。 我看到了这个请求请求,由于某种原因,我当时记得这个名字。 可能是因为Boost致力于Clang的家伙很棒! 然后,我在C ++ Siberia中谈论第17个版本,以及constexpr和花花公子在观众中大喊:“是的,我什至在Clang中也做了一些。” 我就像:“你是Anton Bikineev!”


谢尔盖: C ++西伯利亚连接。


帕维尔:另外,如果我没记错的话,正是在西伯利亚,我们开始在大师班上进行第一个实验。 最初,他们尝试尝试一下,看看这种格式是否会成功。 正如最近3-4次会议的实践所显示的那样,如果您算上C ++ Russia,在我看来,新格式运行得非常好。 例如,我现在有机会(不是在40分钟之内)尝试推销某个话题,而是冷静地6个小时告诉别人我认为必要的一切。 如果人们准备好了,我会尽一切可能告诉我,甚至超过六个小时。


安东:工作坊很有趣。 有时他们会问您这样的问题:“该死,为什么呢?” 几天来,您一直在试图理解为什么在这种特定的不满意笔记本电脑上,这种方法无法在这种特定的编译器上运行。 而且编译器中存在某种错误或其他错误。 看来您来大师班只是为了讲些什么,但是您会得到有用的反馈,可以帮助您解决某些问题并加以改进。


谢尔盖(Sergey):从会议组织者和社区策展人的角度来看,我会说这些研讨会对我非常有用,因为有时人们会去参加它,获得一些基本知识,进一步发展它,应用它并返回一份报告。 有几个人走近我,说他们对你们中的一个人去了大师班,他们对这个话题非常感兴趣,并做了自己的报告。


帕维尔:安东,我记得你也是关于Boost的作者,现在第二版已经出版了。 告诉我你是怎么决定写的? 例如,我认为我仍然不会以如此复杂的形式表达自己的想法。


安东:在Boost那里度过了繁忙的一个月,我当时正在和那里的某个人争吵,骂一个人,说应该怎么做错。 他们说服了我,似乎也说服了我。 出版商只是在寻找可以在Boost上写书的人。 他们似乎进入了Boost邮件列表,看着最活跃的参与者发言比其他所有人更有信心,然后选择了我。


帕维尔:您甚至是如何开始为Boost做出贡献的? 是工作还是业余爱好?


安东:这是由于我不了解Boost的工作原理。 我们在工作中使用了Boost。 我的第一批作品之一就是Boost,但我什至不知道它在那里如何工作,为什么会这样工作。


保罗:到目前为止,Boost有点像魔术库。


安东:我开始看,理解,并在某个时候突然意识到,在lexical_cast您可以做得更好。 然后我写信给lexical_cast维护者Alexey,让我们应用此补丁,但他没有回答我。 我给他写了两个或三个补丁。


帕维尔:如果我没记错的话,您必须在宣传补丁时要果断。


安东:当然。 始终使用开源。 结果,维护者说他现在已经完全在缝制,他还有很多工作要做,并向我提出要成为lexical_cast维护者。 我很高兴并同意。 然后是Boost.Any,Boost.Variant,我慢慢挂断了电话。 那时,他编写了两个库Boost.TypeIndex,Boost.Stacktrace,这些库现在已被接受为标准库。


Pavel:在现成的库中,您从何处获得新功能的想法?


安东:有些事情,例如Boost.DLL-这个人写了一封Boost邮件列表,他们说,看,我拥有一个很酷的库,它做了很多非常可怕,复杂和有趣的事情。 我这样看着她:“好,是的,是的,哦,但是我想要那样!” 我联系了这个家伙,建议我拿出一些单独使用插件的方法。 他们分开拿出来,结果发现这块东西比男人本人要早得多地进入Boost。 使用Stacktrace时,我意识到在某种程度上没有获取Stacktrace的机制。 是的,有时候它会慢慢传到我身上。 那只是我意识到专业人士无法获取Stacktrace的那一刻。


帕维尔:看来,在两次不同的作品中,我两次编写了一个类似的库,以便在秋天打印堆栈跟踪。


安东:所以我接受了它,尝试了一下,然后把它扔给了Boost公司的人们,他们说不,它不会那样做。 然后我又尝试了两次,这是其中的一种,她安排了一切并扎下了根。


帕维尔:但是您是否以某种方式在工作中使用它?


Anton:是的,Yandex.Taxi的我们非常积极地使用Boost.Stacktrace,例如,使用相同的动作就非常好。 您是否有共同点-例如使用JSON。 用户有时会访问不存在的JSON字段。 只是抛出异常? 好吧,它上面的某个地方会抓住。 通常,用户在哪里打电话? 在那里,在使用JSON的整个代码中,用户是否有未到达的确切字段? 他在什么时候要求它? 而且Stacktrace可以完美地帮助您了解哪里出了问题,哪里出了问题,用户搞砸了哪里。


Pavel:您经常在工作中使用的版本开始与开源中的内容分散在一起? 还是您一直在尝试来回传递功能?


安东:我来回转移功能。 当然,要得到领导的许可。 我会说这是非常有用的互动。 例如,在Yandex.Taxi中,我们注意到缺少Stacktrace的toString()函数。 它在标准化提案中,到处都有描述,但在Boost中却没有。 尽管在我看来她在那里,但我还是从Boost中删除了整个标准化建议。 已添加到Boost。 大家都很开心


帕维尔:顺便说一句,回到工作组。 也许您会在C ++ Siberia之后立即参加下一次会议?


安东:是的,我明天早上登机,飞行40个小时,当天我将飞往科纳。 在会议议程上,整个委员会必须决定C ++ 20的外观,以及它的含义。 C ++ 20之前的最后一站将仅是一个错误修复。 模块和协程现已列入议程。


帕维尔(Pavel):关于这两个重要特征,存在着长期而激烈的争论。


安东:模块几乎一切都变得清晰了,它们似乎会被接受,但是对于协程,这是完全不可理解的,因为在这次会议上,出现了第三个相互竞争的协程提案。 它与Coroutines TS完全不同,完全不同,并且有长处。 当然有弱者。 目前尚不清楚它将如何进行。 以及人们如何适应协程​​。


帕维尔:您对下一个C ++俄罗斯的计划是什么? 您要您举报吗?


安东:是的,当然可以。 我想出一些办法。 也许关于Pilorama。


谢尔盖:好,非常感谢你,朋友们! 我不会再拘束你了。 再见! 在C ++ Russia中见


关于C ++俄罗斯会议的培训的几句话


正如帕维尔(Pavel)在这次采访中正确说的那样,培训和大师班具有不可否认的优势:主持人有机会在几个小时内提出整个主题,而不是像常规报告那样在50分钟以内。


大师班正逐渐成为一种传统。 我们首先在2017年举办了它们,然后在C ++ Siberia中对其进行了测试。 今年将有三个硕士班。 您在这次采访中已经遇到了其中两个的领导人。


大师班为六个小时,结合了理论知识和实践练习。 少数参与者分别提供各自的工作。 首先,这当然是实践。 因此,所有主类都需要一台装有现代C ++编译器的笔记本电脑。


提供了三个主类供您选择:IvanČukić将进行“ C ++中的应用函数编程”,而我们的开发人员Pavel Filonov和Anton Polukhin将进行“ C ++开发人员的持续集成”和“ Smart and modern C ++”的工作。


伊万(Ivan)的大师班不适合入门级学生,它适合想要打开感知之门的中产阶级。 Ivan是贝尔格莱德大学的研究员,KActivities,Contour守护程序,Lancelot和其他KDE项目的维护者。 正如您所了解的,它将是关于函数式编程的。 以防万一,建议参与者使用最新版本的GCC和Clang。 稍后,我们将为您提供VirtualBox映像,其中包含您需要的所有内容。 在主类中将涵盖以下主题:是远离函数编程的STL,什么是函数对象,std :: invoke和monad,monad,monad。 还有更多的单子。


您已经熟悉卡巴斯基实验室Pavel Filonov的开发人员研究人员。 他将邀请参与者与柯南和特拉维斯一起建立自己的CI。 Pavel还将解释持续集成的方法,并且在实践部分中,他将使用一个家庭项目/有关开放源代码的工作以及一个具有封闭源代码的工作项目的示例来教解解决问题。


当然,您应该能够使用C ++进行编程,带一台装有任何操作系统的笔记本电脑,一个主要的编译器,一个新鲜的cmake(您需要了解CMakeLists.txt的语法),git,python 3和pip3以及大量的帐户。 有关此操作的更多详细信息,请参见网站上的说明


最后, 来自antoshkka大师班致力于适当优化的技能。 以防万一,我提醒您:他是Yandex.Taxi服务的高级开发人员,在C ++标准化委员会的国际会议上担任WP 21的代表,接受了语言标准的建议书的作者,Boost的开发人员,等等。 Anton将考虑经常出现过早优化错误的示例,然后参与者将考虑标准库的算法和复杂性,具有功能的容器,Move语义及其意外行为,多线程。 由于该课程实用,因此将使用Google基准基准测试的C ++库对所有主题进行实验性研究。 对于本课程,您只需要基本的C ++知识和具有C ++ 11支持的最新编译器。


以上所有内容当然只是简要参考,供您参考。 唯一真实的真理来源是会议现场 ,所有内容均已详细说明。 例如,它清楚地列出了笔记本电脑上的必要软件及其版本。


C ++俄罗斯会议将于2019年4月19日至20日在莫斯科举行。 门票可以在官方网站上购买。 重要提示:从3月1日起,票价将上涨。 如果您想以2月的价格购买,应该立即进行。

Source: https://habr.com/ru/post/zh-CN441800/


All Articles