很快,11月22日至23日,下届莫斯科DotNext将会举行。
该程序变得更加具体,所以我想分享一些有关硬核和体系结构报告的观察。
首先,有一些“无类别”扬声器。 这些人本身可以填写单独的会议。 您知道他们的名字:
Jeffrey Richter ,
Pavel Yosifovich和
Greg Young 。
通常,在发言人旁边的哈布雷杂志上,我们会立即提供他的照片。 以杰弗里(Jeffrey)和保罗(Paul)为例,您最好在书的封面上记住这些人:

右边是Pavel Yosifovich的书。 他被称为Windows Internals,WPF Cookbook,精通Windows C ++应用程序开发以及Pluralsight的五门课程的作者。 如果您突然对C ++也感兴趣,那么Pavel最近在YouTube上发布了有关C ++内存模型的视频 。 此外,他是一位著名的开发人员,培训师和演讲者,但我们几乎没有看到他这个角色-他几乎从未在俄罗斯发生过。 因此,Pavel-我们在DotNext上拥有它。 这是一个巨大的成功和胜利,一切都解决了,他真的会来。 在他的新报告“面向.NET开发人员的Windows 10内部结构”中,他将讨论Windows 10有趣的内部功能,这些功能如何影响.NET开发人员以及如何有效地将其应用于服务。
左边是杰弗里·里希特 ( Jeffrey Richter)的书。 我们已经为Habr与他进行了详细的采访 ,如果您真的想知道为Azure的发展设定方向的人在想什么,您应该去那里。 杰弗里(Jeffrey)是经典书籍的连载创作者。 早在90年代初期,由于编写Windows 3.1编程这本书而受到欢迎,他没有停止。 下一本大书《 Microsoft Windows的编程应用程序》成为一本经典著作,后来作为“通过C / C ++的Windows”出版,并经历了多个版本。 “通过C#进行CLR”也发生了同样的事情。 人们仍然在问下一次重新发布“通过C#进行CLR”的时间(如果您也有兴趣,请参加会议并问自己!)。 他现在是Microsoft的合作伙伴软件架构师,负责分布式云应用程序和存储,并将整个平台推向更加光明的未来。 我们强烈建议您转到他的“构建响应迅速且可扩展的应用程序” ,这是一份有关如何有效使用云铁的报告-一位了解云铁的人。
至于格雷格·扬 ( Greg Young) ,他没有特别引人注目的书籍。 他是“唯一” CQRS术语的发明者,CQRS是该方向上最著名的标志性人物之一。 正如您可能已经猜到的那样,在CQRS中,一切都不像乍看起来那样简单易懂,而Greg是可以与您讨论所有问题的人。 如果您想了解Greg的意思,他会立即在YouTube上搜索 ,他曾经在CodeBetter上写过 ,并且如果您在Amazon上查看有关CQRS的书,那么他就被委托撰写由导演撰写的《 探索CQRS和事件源 》一书的简介。 Splunk
格雷格·杨(Greg Young)演讲“如何在24小时内提高项目效率”的视频
铁杆
DotNext已将自己确立为一个会议,主要发言人反复出现在会议上,揭示了最复杂的特殊问题。 有几个主题可以使几乎所有报告变成硬核,例如,确保复杂技术的最佳性能和实现细节。
低层细节
我们已经讨论过杰弗里·里希特(Jeffrey Richter)和帕维尔·约瑟夫维奇(Pavel Yosifovich)。 但这还不是全部! 让我们看看Raffaele Rialdi,Chris Bacon和Yegor Grishechko为我们准备了什么。
好吧,让我们开始学习王牌吧,您是否曾经想编写.NET运行时? 奏效了吗? Chris Bacon设法创建了一个试点项目DotNetAnywhere ,它是一个真正兼容的运行时,并支持多线程,PInvoke,垃圾收集等。 他的这个项目就是用来构建Blazor框架的,该框架允许您使用WebAssembly技术在浏览器中直接运行.NET。 (顺便说一下,关于Blazor的报道是Nikita Tsukanov制作的,视频在YouTube上 )。 通常,此DotNext会说: “因此,您要创建自己的.NET运行时吗?” -有关编写运行时的非常令人讨厌和不寻常的报告。
让我们继续讨论更实际的主题。 如果您去过DotNext,那么您必须已经熟悉Rafael Rialdi和他擅长的主题。 如果不是,现在是时候熟悉一下自己了!
Raphael从DotNext 2018 Piter和DotNext 2017莫斯科录制的视频
这次,Rafael将附带一份新报告,
“在互操作性场景中提升内存管理” 。 您可能已经注意到,新的
Span<T>
和
Memory<T>
API出现了,现在您可以访问非托管内存,而不必执行无意义的复制到托管对象的操作。 在报告的过程中,Rafael将深入研究这些API,显示有关诸如IoT之类的实用示例的详细信息,而日常活动中只有凡人就能做到。
最近,ValueTask,类似任务的类型和IValueTaskSource出现在该语言的最新版本中。 许多人甚至都不知道这些类型的存在,并且大多数知道它们的存在的人都不了解它们的原因。 Egor Grishechko在他的报告“ ValueTask:什么,为什么和为什么”中将告诉您这些新工具是什么,为什么使用它们,何时使用它们以及何时不使用它们。
最高性能
几乎所有的报告都以一种或另一种方式与绩效相关,即使通过也是如此。 这是开发人员工作的功能。 但我想特别强调一些,这些是四个发言人的报告:
- 康拉德·科科萨(Konrad Kokosa)
- 埃戈尔·博加托夫(Egor Bogatov)
- 叶夫根尼·佩什科夫(Evgeny Peshkov)
- 亚历山大·穆特尔(Alexandre Mutel)
我们已经看过有关我们自己的.NET运行时的讨论。 那你自己的GC呢? 我们是否需要修补一个大小为2 MB的生成的C ++代码的可怕文件 ? 幸运的不是。 在.NET Core 2.1中,他们添加了一项称为Local GC的新功能,该功能使您可以用通用的东西完全替换标准的垃圾收集器,反之亦然-在通常的.NET环境之外使用标准的垃圾收集器。 在报告“使您的自定义.NET GC –为什么”和“如何”中, Konrad Kokosa将向我们介绍如何完成此操作。 主要对于那些想更好地了解内存管理和GC行为的人来说,它将是有趣而有用的。 该报告的主要实质不是要让您从会议中回家然后立即将产品转移到自己编写的内容中。 相反,这是一个很酷的鼓舞人心的报告,它扩展了一切可能性的范围。 您不必这样做,但是现在有了尝试的机会。 GC本身似乎越来越难理解,越来越多的人将其作为一种方便而顺从的工具落入您的手中。
但是GC仅仅是个开始。 近年来,在许多运行时中,授予用户访问权限来生成SIMD处理器指令(例如SSE和AVX)已变得很流行。 例如,在JS中,添加(和删除)了SIMD.js,在Java中,Panama项目执行了此操作,依此类推。 这个mod也没有绕过.NET。 它们赋予了我们超能力,但拥有这样的能力还不够,您仍然需要能够使用它们,这很困难。 一方面,要在这样一个级别上进行控制,需要巨大的动力和资格:编写性能优于标量的矢量代码,不仅需要调整对齐方式,还需要遵循特定的指令集,思考生成的结果以及那些如果您离开快速通道,就会发生这种情况。 另一方面,如果您确实编写了性能
最高的应用程序并保存了所有度量,则即使是最高级的编译器也可能会遇到麻烦。 即使是一个相对较深入研究的问题,例如寄存器分配,也是NP完整的(
一个 ,
两个 ),需要人工干预,SIMD的情况似乎并没有改善。
今年,Yegor Bogatov收到了一份新报告
“ .NET Core内的优化” ,其中他将告诉您如何从高级代码生成SIMD。 与Yegor一起,我们将很快发布有关Habré的详细采访。 现在,我想说Egor在Microsoft工作,专门研究Mono和.NET Core,这不是他第一次在DotNext上进行演示。 保留几个先前的条目:
Egor与DotNext 2017 Moscow和DotNext 2016 Moscow的报告的录像
Egor对创建可以应用所有这些优化的计算机和手机游戏非常感兴趣。 最近发布的刺客信条奥德赛
故事证实了这一点:尽管客户端数量有所减少,但开发人员
必须在最低系统要求中指定支持AVX / SSE 4.1的处理器(这些处理器是英特尔第二代处理器:英特尔酷睿i5-2400及更高版本,称为桑迪桥(Sandy Bridge),但并非所有人都有)
如果最畅销游戏的例子不能说服您,那么亚历山大·穆特尔(Alexandre Mutel)一定会说服您。 这是第二位发言人,我们将与Habr进行详细访谈。 他在Unity Technologies工作,该公司创建了最受欢迎的游戏引擎之一Unity 。 (顺便说一句,他们最近打开了C#代码以进行读取)。 Alexandre肯定知道常规C#仍然无法处理如此关键的代码。 因此,他们发明了一种特殊的“突发”编译器:它使用LLVM将有限的C#子集转换为优化的本机代码,从而使您可以达到与C ++相当的性能,有时甚至更快。 如何比RyuJIT更好地生成代码? C#的哪个子集适合编写超快速代码? 这些和其他问题将在报告“突发编译器的背后,通过使用LLVM将.NET IL转换为高度优化的本机代码”中解决 -您一定不会错过!
我想以直接受益的方式结束对此类的描述。 显然, “系统指标:收集陷阱”非常适合此角色。 Kontur的Evgeny Peshkov将告诉您如何克服指标:指标之间的差异,如何Process
和PerformanceCounter
性能问题,如何在内部布置性能计数器,以及由此得出的结果等等。
Evgeny的上一份报告“ .NET中的特殊异常”在DotNext Piter 2018大会上排名第二。 它讨论了每种异常类型的功能,例如, StackOverflowException
, ThreadAbortException
, AccessViolationException
和OutOfMemoryException
,它们在操作系统或运行时级别发生错误时发生。
最佳做法和架构
在我们宣布之后,有时候DotNext似乎是低级开发人员的坚实基础。 实际上,该程序还有足够的其他类别。 请仔细查看该程序-大多数报告旁边都有标签。 选择下一份报告时,请注意它们。 核心是关于性能和编译器详细信息的标签,旁边是带有“山羊”的对话图标。 但是,看看您现在可以应用多少个通用主题!

同时,找到有关“良好实践”和“架构”的出色报告是一件非常困难的事情。 对于其他人来说,一个似乎是一个绝妙的主意,这听起来像是胡说八道,反之亦然。 公司的发言人是否对系统具有特定的体系结构,但对我们而言却以不同的方式? 那是什么意思呢? 幸运的是,不仅出于口味原因,还可以讨论一组主题。
最佳实务
首先,这些领域显然正在发生麻烦。 每次乘飞机飞行时,您都想听音乐集,并且一个著名的俄罗斯云服务说,将您的音乐集下载到内置磁盘并脱机是很好的,但是您可以检查许可证吗? 在进行许可证验证之前,垂直十公里。 下次您将高分辨率中的所有内容下载到内置磁盘上时,将收听播放器应用程序。 在飞行途中的某个地方,一个诚实购买的玩家问-一切都很好,但是我忘了检查许可证并下载了一些东西。 您垂直跳了十公里。 从开发人员的角度来看,这看起来更加令人难堪,因为许多熟悉的框架根本不表示没有网络连接。 在某些情况下,您必须编写很多难看的东西,例如重复代码以直接读取和缓存。 现在,我们将所有这些乘以跨平台并保留在谷底。 还是一开始看起来是这样? 在评论中写。 在DotNext上,来自Gerald Versluis的关于该主题的精彩报告
“创建飞机模式证明Xamarin应用程序” ,您可以从许多
演讲,博客文章和几本书中了解到。 尽管名称如此,即使对于那些不熟悉Xamarin的人来说,该报告也会很有趣。

有永恒的话题,尚未找到确切的答案,但随着人们的了解,每年的理解都在迅速增长。 TDD vs TestLast是一场永无止境的战斗。 首先,很多人通常在流程级别上遇到测试方面的问题-在按时限驱动的开发世界中,您不会特别开发。 我们甚至举办了一个特殊的测试会议
Heisenbug 。 程序员仍然更加复杂-TDD于99年左右发明,是极限编程的一部分。 尽管有很多天才,但它从未占领世界,这是由许多因素促成的。 在平常的生活中,结果甚至不是测试优先,而是真正的测试末。 这种方法还具有优点(很容易在截止日期之前完成)和许多明显的缺点。 还记得Ruby on Rails的创建者无情地大肆宣传的文章
“ TDD已死”吗? 它写于2014年。 4年过去了,并且摆锤没有留在原地。 您对此问题有何感想? 在DotNext上将有
“最后测试,首先测试,TDD:何时使用一种或另一种方法” -亚历山大·古古舍夫(Alexander Kugushev)的演讲标题。 亚历山大将详细介绍所有这些方法,并考虑它们在特定而复杂的示例中的适用性。
另一份报告与该报告相呼应-Vladimir Khorikov的“实用单元测试” ,这是另一种类型的专家,也是节省大量企业旧有项目的专家。 是的,我们不喜欢谈论它,但是有时候最愚蠢的事情甚至导致永恒建立的最持久的项目崩溃。 正确的单元测试是技术公司长期成功的技术因素之一。 我们都知道很多做法,但从长远来看,并非所有做法都同样有用。 该报告不适合初学者-适用于可以编写测试并希望将其理解提高到一个新水平的人。 顺便说一下,弗拉基米尔(Vladimir)拥有一个出色的博客 ,他在其中分析了最有趣的建筑问题。 强烈建议小说初学者和高年级的学生对小说进行系统化。
在关于良好实践的部分中,我想提到另一份报告: Igor Lukanin的“如何在负载下生存:容错服务器,智能客户端” 。 伊戈尔(Igor)是Kontur的代表,他几乎参加了我们最近的所有会议。 Phillennium和我反复采访了他,很快注意到他能够对大量的实际问题给出深刻而准确的答案。 没必要专门为采访伊戈尔做准备-我们问他任何问题,他几乎回答了所有问题。 除了最重要的问题:您何时会以发言人身份参加我们的会议? 事情就这样发生了。 报告描述只是说:“您将从报告中学习如何创建此类微服务并进行压力测试,以确保它们能够承受负载。” 毫无疑问,它将如此,这值得很多。 最后,Contour基础架构可能是俄罗斯最大的.NET产品。 无论如何,您始终可以在讨论区中向Igor提出其他问题。
建筑学
最后,我们今天的最后一个类别是建筑。 我们中许多人还记得乔尔·斯波斯基
( Joel Spolsky
)的文章
“不要让建筑宇航员吓到您” 。 如果您还没有阅读,请看,此后并没有太大变化。 “请记住,架构迷通常会解决他们认为可以解决的问题。 根本没有那些
有用的解决方法,” Spolsky提醒我们。 我们的“建筑”报告是在共同基础上选择的:它们必须具有具体的实际用途,特定的目标受众,在分配给该报告的四十分钟之内即可清晰地传达思想。 尽管这些要求在表面上很简单,但并不是所有的应用程序都可以通过它们。
那么这次我们是谁? 我们已经在本文开头讨论了Greg Young。 这是一位发言者“不合类别”,值得一提,因为它是格雷格。
Vagif Abilov( VagifAbilov )将随附一份报告“集群中演员的生活:原因,时间和方式 。 ” Wagif是著名的演讲者和DotNext程序委员会的成员。 顺便说一句,对PC参与者的报告提出了特别高的要求-这应该是如何讲述良好的体系结构报告的一个示例。 这次将有一个关于参与者模型,Akka及其适用范围的有力报告。 我们将讨论扩展和基本集群决策模板。 显然可以说更多,但是没有破坏者很难做到。 只是来到报告中,自己找出所有这一切。 所有的决定都不是宇航员的想法,而是经过挪威广播公司(NRK)经验的检验。
Vagif并不是立即成为PC的成员,而是以以前的DotNext的发言人身份开始的。
人们从为Java编写的旧书中学习体系结构。 这些书不错,但是它们使用当时的仪器为当时的问题提供了解决方案。 时间已经改变,C#与light Scala相比,与Java更相似,而且几乎没有新的好书。
在“即时设计”报告中,Maxim Arshinov将讨论好的代码和坏的代码的标准,如何以及如何对其进行度量。 他将概述典型的任务和方法,并分析其优缺点。 最后,他将为设计Web应用程序提供建议和最佳实践。 Maxim-您可能已经猜到了,著名的habro 作者@marshinov 。 他是高科技外包公司High Tech Group的联合创始人,除了开展业务外,他还在信息技术高等学校任教。 也就是说,这是一个在“路障两边”都遇到问题的人的报告:既从学习新技术的角度来看,又从在实际业务中的使用角度来看。
您可以从圣彼得堡在DotNext上的演出中了解Maxim
最后是今天评论中的最后一份报告。 Alexey Merson的报告“域驱动设计:实用主义者的食谱”将向我们揭示DDD的实质。 更确切地说,不认识的人会发现。 谁知道-更了解。 丰富的个人经验允许用一种简单易懂的语言告诉Alexei复杂的事情。
您已经可以在SpbDotNet社区会议上看到他的演讲之一。
我们提醒您,DotNext 2018 Moscow即将于11月22日至23日在莫斯科雷迪森皇家会议公园举行。 门票仍可在会议网站上购买。
而且,我们的朋友DevZen Podcast最近发布了PC版本DotNext,您可以在闲暇时收听。