RubyRussia2019。NikitaShilnikov谈代数效应

RubyRussia会议之前的时间非常短。 那些未能设法获得门票的人仍然有机会在该网站上获得最后一张门票。 大会上的妮基塔·希尔尼科夫(Nikita Shilnikov)将讨论代数效应,但现在您可以阅读有关报告主题的访谈。

图片

告诉我您的工作以及它与Ruby的关系如何?

我为两家公司的项目都是用Ruby编写的公司工作。 在一种计费方式中,我们可以说这是一种半企业,在另一种计费方式中,我们创建了SaaS服务。 碰巧我做了很多开源工作。 四年前,我开始对一个项目感兴趣,发现其中存在功能缺陷,决定对其进行修复。 现在,我是两个组织和社区的核心开发人员。 一切都可以在我的github上看到。 这项工作的一部分涉及rom-rb数据库,另一部分涉及针对不同场合的一组库。

您关于代数效应的报告告诉我它们给开发人员带来了什么好处。

在这里,您需要进行一次小访谈。 dry-rb生态系统受到功能编程的启发。 但是在它的发展过程中,有些事情困扰着人们。 例如,您正在开发SaaS服务,并且有一个隔离数据的简单任务。 一切似乎都很清楚,有某种服务,公司已经在其中注册,他们不应该访问彼此的数据。 您可以通过多种方式解决。 但是从纯粹的功能角度来看,除了在整个代码中显式传递参数外,我找不到如何执行此操作的答案。 他提出了他的“非功能性”解决方案并与他同住。

在2018年底,钩子出现在React中。 当我第一次看到他们的API时,我认为不可能这么简单地做这些事情。 我对JavaScript的工作原理非常了解,并决定这里的所有内容显然都不干净,使用了全局变量或其他。 在我对程序如何工作的想法中,这是不可能的,或者使用了某种肮脏的技巧。 我决定研究这个问题。

原来,我不是唯一对此主题感兴趣的人。 我发现有这样一种形式化的信息,即编写似乎使用全局变量或某种一般状态的程序。 但是,它们仍然是干净的。 这个问题是相关的,我开始更深入地研究。 结果,非常代数的结果成为了答案。 我用Ruby编写了一个小型原型,令我惊讶的是,它起作用了。 在生产中实施,启动并开车数月,然后为每个人做出决定。

您直接用React钩子吸引了我。 我以为有一些非常简单的东西,例如调用堆栈,关闭,当前作用域。

真的是 问题是您有某种文章描述了语义以及从科学的角度来看应该如何工作。 如果遵循规范,则可以创建一个库。 在React的情况下,这也是一个提供某种API的库或框架。 如果使用正确,则一切正常。 但是,如果您向左或向右走,则可能会严重结束。 在React中,他们只是禁止在条件中使用钩子。 他们必须这样做。 这是限制之一。

这在某种程度上与代码正确性的数学证明有关吗?

不完全是 这不是需要证明某些东西的问题,而是更多地在程序验证方面的问题。 代数效应的全部含义只是语义的描述。 那里没有任何证明,但是显示了它应该如何工作。 如果此实现代数效应的库本身本身不包含错误,则通过描述语义,可以保证您的代码将按预期工作。

您对类型和静态类型的编程语言有何看法?

非常积极。 例如,我们在Ruby上有一个后端,在ReasonML这样的东西上有一个前端。 这是OCaml,但是语法不同。 在其他所有条件都相同的情况下,我在这种类型的系统的方向上做出选择。 这非常简单,并且许多语言都具有相似或相似的实现。 类型越多越好。 但是,我正在用Ruby编写后端,一切都很好。 我是我使用的工具的开发者,他们一直致力于类型: 干类型干结构干模式干验证干单子 。 它们是关于描述来自数据库,用户,外部系统的类型。 因此,您始终知道什么Ruby代码适合您。 即使不是单独输入,也可以确定要使用的变量类型。

有传言说Ruby 3中会有类型。 您对此有何评论?

我有使用Python的经验。 当类型被带到那里时,学习不是很发达,我也没有留下深刻的印象。 现在那里的情况好了。 您可以去那里用类型描述所有内容并进行某种调整,这将验证您的程序是否正确。 这是关于编译器的某种替代,关于sorbet现在正在做什么。 Python用了好几年的时间。 我一直欢迎向类型运动,但是我没有幻想。

寻找您打算根据Ruby代码实现的新语法?

特别是没玩过,去聊天,看了看。 但是我不认为这是值得实施的。 可以改进语法,更改语言等。 现在,他们已经制作了通常的Ruby兼容语法。 我不认为语法在这里是绊脚石,绊脚石正在调整,正如我已经说过的,这是一条漫长的路。

您还想在Ruby中看到什么,如何看待它的发展?

我会对协作多任务处理感兴趣。 我们已经有纤维形式的协作式多任务处理。 我们仍然缺乏在多个线程上运行它们的能力。 对于如何完成此操作有多种选择,但尚不清楚以哪种形式。 考虑到Ruby,C实现具有相当坚实的传统,因此Matz不想破坏向后兼容性。 我倾向于同时运行多个纤维和多个线程的组合。 也许像Guild这样的东西会起作用。

今年,Ruby的作者Yukihiro Matsumoto参加了会议。 您想在聚会后与他讨论喝杯咖啡还是一杯清酒?

与语言甚至库的作者进行交流时,我们能做的最好的事情就是向他们展示我们如何在现实生活中使用该产品。 而且,即使作者没有想到。 这将使作者有机会考虑到这种经验并将其应用于进一步的开发中。 我想用代数效应展示整个故事。 我会说-看,用您创造的奇迹语言可以做什么。 也许之后,他会为我们提出其他建议。

RubyRussia见!

记得会议已经在这个星期六举行了, 注册仍然开放。

不仅会有报告,而且还有最好的公司的代表:

主办单位-Evrone
一般合伙人-Toptal
金牌合作伙伴-Gett
银牌合作伙伴-ValarmJetBrainsBookmateCashwagon
铜牌合作伙伴-InSales

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


All Articles