
CoreHard是每年春季和秋季两次在明斯克举行的C ++会议。 自2015年以来,我们已经从一个小型的爱好者社区发展成为一个大型的区域会议。 我们试图将公认的C ++领域大师的知识与本地C ++运动的发展相结合,积极吸引来自白俄罗斯,俄罗斯和乌克兰当地公司的演讲者。
我们急于与哈布罗夫斯克居民分享我们
最近举行的噪音会议上刚出炉的十大录像带。
因此,让我们开始吧:观众评分最高的10个报告。
10.出色的记忆模型-阿列克谢·特卡琴科(Alexey Tkachenko)
计算机中的内存概念远远超出了计算机中安装的一组“铁”动态内存芯片的范围。 长期以来,内存一直被视为某些可寻址空间,由内存管理模块-MMU管理。 这种方法使我们能够区分物理内存和虚拟内存,这在所有使用进程概念作为资源管理单元的操作系统中都得到了积极使用。
在报告中,我们将讨论在MMU中实现的保护方法的一些不寻常的应用,即通过寄存器文件模拟硬件与中央处理器的交互的方法。
该报告将涵盖Windows和Linux操作系统以及各种体系结构。
该报告主要是嵌入式(Embedded)软件开发人员感兴趣的,但是,该报告中描述的技术对于“大型”计算机的开发人员将非常有用。
关于演讲者阿列克谢·特卡琴科(Alexey Tkachenko)在Peleng公司从事太空软件产品的软硬件测试和试验台开发工作已超过12年。 基本工作工具:C ++用于底层任务,以及与硬件和C#/ .NET与客户端软件的交互。 在业余时间,他喜欢嵌入式的微控制器。

9. C ++出租车技巧-Anton Polukhin
在编写大型框架时,必须处理人们早已知道解决方案的典型任务。 但是,这些解决方案不够有效,可以做得更好。
在报告中,我们将讨论缓存友好的pimpl,优化用户类型的日志记录,从JSON / XML / YAML转换为用户类型以及其他有趣的技术。
关于演讲者Anton Polukhin是标准化C ++工作组国际会议上俄罗斯的ISO代表。 C ++语言标准的多个已接受建议的作者。 Boost库的作者TypeType,DLL,Stacktrace和活动维护者Any,Conversion,LexicalCast,Variant。 他是《 Boost C ++应用程序开发食谱》和第二版的作者。

8. C ++ 20:小事情-Timur Doumler
C ++ 20为该语言带来了许多新功能:模块,协程,概念,太空飞船操作员和许多新库。 但是,此外,C ++ 20还添加了许多小的改进,使C ++更强大和更具表现力,同时也更加安全和完整。
在此报告中,我们将研究语言核心的一些小改进,这些改进可以帮助简化程序员的工作:lambda表达式,CTAD,结构化绑定,初始化等等。
关于演讲者Timur Doumler是一位C ++开发人员,专门从事声音处理和合成技术,是ISO C ++标准化委员会的活跃成员,并且是#include <C ++>社区的积极分子。

7.争取极低的延迟-Mateusz Pusz
在此报告中,我们通过低延迟域来了解C ++世界。 在这个世界里,动态内存分配和异常不受欢迎,我们可能没有足够的STL容器,并且开发人员经常被迫降低到汇编程序级别,以确保代码确实以最佳方式确实完成了所需的工作。
关于演讲者Mateusz Pusz是现代C ++的架构师,工程师和安全专家,顾问,老师和推广者。 C ++标准化委员会工作组WG21和SG14的成员。

6. Windbg:当我们不参加比赛时-Alexander Golovach
在编程实践中,经常会出现无法在开发人员方面进行复制和研究的问题。 在这种情况下,有时甚至无法组织对机器的远程访问。 该报告将讨论并提供一些技巧,以Windbg调试器为例,调试多线程应用程序中的典型任务,例如崩溃,资源泄漏和同步错误。 该报告将主要吸引使用Windows平台的新手开发人员关注。
关于演讲者Alexander Golovach是Windows系统程序员,是Checkpoint Endpoint Security的开发人员。 他参与了反漏洞利用,反勒索软件和端点取证等产品的创建。

5. C#中的LLVM后端如何工作-Egor Bogatov
LLVM包含大量优化,适合作为许多编程语言的后端。 但是对于托管语言和JIT脚本来说,事情变得有些复杂。 Yegor在本报告中将讨论C#开发人员在实现LLVM后端时遇到的困难。
关于演讲者Egor Bogatov在Microsoft .NET / Mono团队中工作,对微优化和LLVM感兴趣。

4.有关缓冲的研究:异步警报,更新复制,未决请求的合并-Vadim Vinnik
开发特定应用程序的实践可能导致对该问题的陈述,以成熟的思想,事实证明该问题足够笼统,可以将其隔离为对许多不同应用程序都可能有用的抽象。 与满足特定应用程序需求的解决方案相比,将解决方案提供给适合重复使用的形式需要更多的精力来突出显示任务的各个方面并使用语言对它们进行建模。 该报告介绍了实现三个抽象的经验,它们结合了一个共同的主题-多线程处理中的数据缓冲。 显示了从任务分析到通过C ++ 17语言实现的思路。
关于演讲者瓦迪姆·文尼克(Vadim Vinnik)是物理和数学科学的候选人,在为学生(包括基辅塔拉斯·舍甫琴科国立大学)教授编程课程方面拥有10年的经验。 在工业编程方面(主要在C / C ++ / C#中)拥有超过10年的经验,重点是备份和数据恢复域。 Vadim-《算法语言和程序设计基础:C语言》,《 C ++面向对象程序设计基础》一书的作者; 29篇关于程序设计理论的科学出版物的作者; 将“面向对象程序设计原理”(Anton Eliens),“组合程序设计理论”(Charles Hoar,Hee Jifen)的英语译成俄语。 感兴趣的领域:用C ++和功能语言编程(Haskell)。

3. C ++ 14中的静态SQL-Evgeny Zakharov
演讲者将讨论C ++ 14中SQLite3的
sqlite_orm ORM库库的开发,并分享他在尝试创建ORM时的经验,您可以使用它忘记文本查询以及如何使用模板将其适应C ++。
关于演讲者Evgeny Zakharov是C ++游戏开发人员,sqlite_orm库的作者。

2.元编程:构建有限状态机-Sergey Fedorov
使用切换案例或使用虚拟函数继承手动实现状态机非常耗时且容易出错。 演讲者在报告中讨论了状态机库AFSM(另一个有限状态机),该库使您可以使用声明性语言来描述状态机。 还有关于该库代码示例中的一些小技巧和元编程技巧。
关于演讲者Yandex.Taxi的领先开发人员Sergey Fedorov正在为Taxi后端开发异步框架。 元编程和开源的忠实拥护者。

1.保护C ++-Pavel Filonov
通常将C ++与双节棍相比:在熟练的人中,C ++是一种有效的工具,在初学者的手中,对自己的健康有危险。 显然,这种比较是受C ++作为一种不安全的编程语言的观点启发的。 一些新语言甚至将此观点用于自己的晋升。 但是“不安全”一词背后有哪些特定的危险? 详细的答案显然会提出几个方向,其中之一就是网络安全。 该报告将涵盖利用C / C ++代码中漏洞的简单示例:在堆栈上执行shell代码,返回libc,重写vptr,堆溢出。
但是主要重点放在防范此类攻击上:堆栈中的金丝雀,ASLR,不可能的区域,测试和消毒剂,模糊测试,SDL进程。
关于演讲者Pavel Filonov以C ++开发人员的身份参与了Max Patrol SIEM系统的开发,以数据科学家的身份参与了卡巴斯基MLAD的开发。 俄罗斯C ++会议程序委员会委员。 专门研究CI / ML /性能主题。

还有一些奖金报告!
自动化-Kirill Tikhonov
我们将使用C ++编写来自客户端和服务器的最简单的Web服务。 在此C ++部分中,将结束,并建立环境和基础架构。 我们将确保组装和测试运行的可确定性。 便于后续更新相关库。 我们自动执行静态检查,代码验证和测试运行。 我们将确保服务的可用性,配置基础架构,平衡负载以及添加自动和手动扩展。 最后,我们将设置连续交付,以便在请求后5分钟内将代码投入生产,甚至无效的更改和程序员错误也将无法影响其工作。
您还在用手编写代码吗? 那我们去找你! -谢尔盖·萨多夫尼科夫
在C ++开发的世界中,有许多任务需要编写大量的样板代码:序列化,RPC,ORM,脚本语言绑定等。当然,有许多方法可以简化此类代码的编写,例如,进行序列化:用手编写所有内容,将所有内容放在宏中,拖入Hana领导的模板中,将其中的一个与另一个结合。 但是有一种方法最终应该替代所有其他方法:代码生成。 json,bson,xml,yaml,protobuf-您可以使用多种格式保存数据。 每种格式都有其自己的库,而没有一个。 库始终提供自己的数据描述方式,有些提供了整个基础结构,您需要适应这些基础结构并微调代码。 这并不总是很方便,因为人们想要自由。 我希望源文本尽可能少地依赖于数据如何序列化。 而且现代的代码生成方法可以提供这种自由,您只需要知道如何正确使用它们即可。
C ++ rvalue终身灾难-ArnoSchödl
自C ++ 11起,Rvalue链接就已在该语言中出现。 引入它们是为了使移动物体更有效。 加上这种优化,这项创新为每个自重程序员都必须知道的语言带来了许多细微差别。 让我们进入右值链接的世界,并仔细检查它们!
通过编译器优化的棱镜实现C ++异常-Roman Rusyaev
在院子里是21世纪,基于setjmp / longjmp的C ++异常处理的无效实现已经在过去。 诸如gcc和clang之类的现代编译器使用C ++异常的高级实现,称为零成本异常处理。 但是,零成本到底有多真实? 是的,我们通过增加二进制文件的大小以及实际抛出异常的情况进行支付,开始堆栈展开过程,为本地对象调用析构函数,等等。 但是,如果不引发异常,我们是否会失去性能? 编译器优化是否有任何限制? 该报告描述了C ++异常如何影响编译器优化。 如果函数可以引发异常,则不能应用哪些优化,哪些优化变得更难应用。 在LLVM的基础上考虑了实现异常和编译器优化的示例。 该报告旨在让人们了解何时使用-fno-exception构建应用程序以及何时可以享受使用C ++异常的所有乐趣,并且知道与禁用了异常的代码相比,其代码并未显着降低性能。
发生器,协程和其他解开大脑的甜味-Adi Shavit
C ++ 20为我们带来了协程,并具有编写生成器,可迭代类型和范围的能力。 我们将看到协程如何通过更浅的抽象和泛化来帮助编写更清晰,更易读的代码。
如何不on大项目-Yuri Minaev
世界已经改变。 以前起作用的东西并没有停止工作,但是变得不够用。 结对编程,代码审查,单元测试仍然很重要和必要,但它们再也无法提供C ++项目的适当质量和可靠性。 许多项目已经增长了数百倍。 增长是渐进的,并不是每个人都了解发生了什么。 任何大型的旧项目都包含不同的层次(地质沉积),最重要的是,还没有人知道它是如何工作的。 现在是使用工具和方法来维护代码质量和完整性的时候了:DevSecOps,静态分析,动态分析,质量测量平台。
如何帮助和如何防止编译器-Andrey Oleinikov
通常,您可以依靠以下事实:编译器会优化生成的二进制文件,以使其尽快运行。 但是编译器不知道程序将在什么数据和什么硬件上启动。 另外,我希望编译花费可接受的时间。 因此,结果可能不是最佳的。 我建议使用LLVM示例,以了解如何告诉编译器如何优化程序并使结果更好或更糟。
下一届CoreHard(C ++ CoreHard 2020年春季会议)正在进行中,将于2020年4月10日至11日在明斯克举行,在官方网站上查找门票和完整计划。
您可以在此处提交报告(生活黑客:演讲者无法支付机票费用!)