大家好! 10月6日,莫斯科将举办
RubyRussia会议-很好的旧RailsClub,但有了一个新名称。 今年的演讲嘉宾:亚伦·帕特森,查尔斯·纳特,戈弗雷·陈,马克西·门斯菲尔德,马库斯·希尔普等等。 当然,有600名参与者,最好的公司,在大堂设有摊位,并在聚会后开火。
传统上,在会议之前,我们谈论Ruby和Rails中最相关的主题。 今天,我们向您介绍前Rails核心团队
Godfrey Chan ,他在Tilde工作,在创建智能Rails分析器
Skylight ,在Ember.js上工作以及在TC39上开发JavaScript之间,他陷入了困境。
Evrone Dmitry Matveev的 Tim
Leader问了客人一些重要的问题。
让我们从关于您的RubyRussia报告的几个问题开始?我不想透露所有秘密! 我的报告称为“深入研究”。 我将讨论如何使用元编程来编写与JavaScript类似的奇怪的Rubu代码。 当然,我们将无法编写完整的JavaScript解析器和运行时,但是我将展示一些魔术,这些魔术将使部分类似JavaScript的代码在使用本地Ruby运行时的Ruby中执行。 很好玩,至少我真的很喜欢。 这是与您可以在Ruby中编写rspec,rake或其他DSL之类的技术相同的技术。 我将向学生展示Ruby如何解析和运行您的代码,以及可以使用哪些挂钩。 我认为该报告不仅会很有趣,而且还会教一些有关使用Ruby进行元编程的有用的知识。
好酷! 也就是说,会有一些实用技巧,对吗?我不确定是否可以专注于它们,但是我相信从这30分钟开始,您将学到一些对自己有用的东西。
太好了! 我认为该报告对于有经验的程序员和初学者都将是有趣的。 对不对我希望如此。 至少我会尝试。
顺便说一句,昨天我读了您关于“重新思考计算机科学教育”的文章 。 这篇文章非常有趣,我同意关于程序员的经典大学教育和现代课程之间差异的想法。 顺便说一句,您为什么决定成为一名程序员?只是fl幸,我从没计划过要当程序员,对我来说这有点爱好。 我真的很喜欢弄乱计算机,很容易想到一些事情-意外删除系统文件或深入Windows注册表。 然后我想要更多。 放学后,我开始上有关网站开发的课程。 我很高兴有机会在计算机上创建新的东西。 但是很快我意识到这对我来说还不够。 我可以用HTML创建某种类型的计算机游戏,但是此工具包非常有限。 有一天,我的老师给了我一本关于PHP的书。 我阅读了所有内容,出乎意料的是,我发现了一个全新的可能性世界,它提供了比HTML和CSS更多的东西。 太酷了,之后我开始阅读有关该主题的越来越多的书籍。 我学习的第二种语言是Java。 一旦我在Linux Magazine上阅读了有关Ruby的文章(实际上不是关于Ruby的内容,而是关于Rails的内容),并认为学习它会很好。 从那里开始,直到今天,就像滚雪球一样。
因此,您选择了Ruby,对吗?在大学学习计算机科学的那段时间里,我发现了Ruby,所以同时我也在学习Java,C ++,Haskell,不仅一次学习了许多编程语言。 作为研究的一部分,我们没有Ruby作业,我真的很喜欢他,所以我一直尝试在那些您可以自己选择技术的课程中使用它。 好吧,在他们的第三方项目中。 大学毕业后,我决定找一份与Ruby相关的工作。 这很简单,因为Rails那时正处于普及高峰:许多创业公司都使用了这项技术。 因此,兴趣已成为我的工作。
现在,您是否使用Ruby作为主要工具? 还是您正在其他工作?在我目前的Tilde工作中,我编写的Ruby不如以前。 我会说我的作品是JavaScript / TypeScript,Rust,Ruby和Java的混合物。 但是,无论如何,我所做的所有工作都与Ruby有关。
蒂尔德(Tilde)的主要产品是Skylight。 并不是其中的所有组件都是用Ruby编写的:前端是用JavaScript和Ember编写的,后端是用Rails编写的,但是所有传入的数据处理都是Java和Rust。 但是Skylight本身是Rails应用程序的性能监视工具。 从这个意义上讲,我所做的所有工作仍然与Ruby有关。
太好了! 几天前,我本人在Skylight中注册了其中一个项目,现在我正在对其进行测试。 看起来很有趣,而且从一开始就很清楚一切工作原理。 我还没有加深很多,但是我计划下周非常紧密地开始使用它。 我希望我可以解决一些问题。太好了,很高兴收到反馈!
将Ruby与其他语言进行比较很有趣。 例如,使用Rust。 Ruby具有很高的表现力,旨在使代码可读。 如果将它与Python或C ++,C#,Java进行比较,我认为它们不像Ruby那样容易阅读。 您如何看待?我会同意的。 有两种方法可以“学习”新语言。 首先是很肤浅的:我研究语法的基础知识,玩弄示例,然后立即忘记它。 Go就是这样。 我是在周末做的,然后花了两个星期,我在上面写了一些小项目。 但是后来我没有理由继续在Go上编程。 我只是出于好奇而研究了它,并很快忘记了。
另一方面,我一直使用JavaScript / TypeScript,Rust和Ruby。 这些语言中的每一种都为我打开了新的机会,这非常激励人。
例如,当我开始使用Ruby时,我被表现力所吸引。 没有其他语言允许您执行诸如method_missing之类的疯狂事情。 元编程,表达能力和代码可读性是我喜欢Ruby的关键。 如果其他语言可以,那就太好了。
但是在其中您可以执行Ruby中不可能完成的工作。 例如,JavaScript。 他和Ruby完全不同,我一见钟情。 我开始根据需要使用JavaScript,需要编写浏览器代码。 无论我们喜欢与否,都无法摆脱JS。 如果您想编写一个交互式浏览器应用程序,例如Skylight(正是我当时感兴趣的应用程序),那么JavaScript是唯一的出路。
我想将我在Ruby中喜欢的想法转移到JavaScript,所以最后我开始使用Ember。 反过来,这导致我进入TypeScript。 当您使用JavaScript编写大型框架(例如Ember)时,使用类型和用于检查错误的编译器确实会有所帮助。 JavaScript和TypeScript帮助我理解了这一点。
Rust教给我的想法与TypeScript非常相似。 能够编译整个程序并确保它能正常工作真是太好了。 对我来说,太棒了。 我以前使用过编译语言:Java和C。您还应该在它们中等待代码编译,但这并没有多大用处,因为这些语言的类型系统不能很好地捕获错误。 但是在Rust中,编译器可以保证程序不会引起内存问题,并且在执行过程中不会出现分段错误(segfault)。 C编程中最困难的事情之一是内存问题,这是很难避免的。 对我来说,Rust的主要功能是可以进行低级编程而无需担心。
顺便说一下,我对Rust的兴趣与Ruby有关。 我刚开始在Tilde工作,我知道Skylight的宝石是用Rust编写的。 我认为学习如何以相同的方式为Ruby编写本机扩展会很棒。 我想学习如何用Rust编写脚本,这样就不必担心会破坏自定义的斩波过程,就像在C语言中错误地取消对指针的引用那样。因此,对我来说,学习Rust的主要目的实际上是为Ruby编写本机扩展。
就在今天早上,我正在与Tilde的Peter Wagenet和Shopify和核心Rails团队的Sean Griffin一起进行一个项目。 肖恩(Sean)正在开发用Rust编写的Active Record新版本,以加快速度慢的部分。 就在这次采访之前,我正在Rust中进行一个名为libcruby-sys的项目,该项目使您可以在Rust中为Ruby编写本机扩展。
最后,我们可以说所有语言都已连接。 我学习和编程的语言只是使我能够创建自己想要的东西的工具。
非常有趣! 很酷的ActiveRecord将更快。 据我了解,ActiveRecord的想法不会改变。 我的意思是,它将是相同的ActiveRecord,而不是Data Mapper吗?当然,基于Ruby的Active Record不会走开,它正在积极地开发和使用。 对于JRuby,这是首选。 Sean的实现与本机API 100%兼容。 内部内容是用Rust重写的,因此一切工作都更快,但最终用户的API不会改变。
我最近几年一直在从事的项目也是如此。 它称为
Helix ,并且与我在Rust上进行的实验相关联,以为Ruby创建本机扩展。 由于一堆内存安全问题需要解决,因此启动非常困难。 Helix允许您只专注于用Rust编写代码,他负责在Ruby扩展中进行编译。
我认为Ruby中使用了许多JSON gem。 实际上,此gem有两种不同的实现。 有一个纯Ruby实现和一个实现相同API的C扩展。 这不是很明显,但是如果您编写`require json`,则很可能会加载C版本;如果不支持当前平台,则它将是ruby版本。 但是,在两种情况下,API的使用方式也完全相同。 唯一的区别是其中一个的内部组件是用C实现的,因此它的运行速度更快。 除了更高的性能外,没有任何区别。 这是所有此类项目的目标-能够使用我们喜欢的Ruby,但在必要时获得本机代码的性能优势。
Ruby更快会很棒。 尽管有一种观点认为执行速度对于Ruby程序不是很重要,但是我敢肯定,如果性能提高,每个人都会很高兴。在大多数情况下,我都同意。 一般来说,是这样。 但是,在提高了生产率的前提下,我们可以执行以前在该平台上根本无法实现的工作。 就像我说的那样,我学习JavaScript是因为我想为浏览器编写程序,否则是不可能的。 我认为性能也是如此。 我不在乎代码运行速度是否快20%。 这很好,但是不是那么重要。 但是,当代码运行速度提高10倍时,这开辟了全新的可能性。
例如,如果您从事机器学习,则必须进行许多复杂的计算。 最有可能的是,您将无法在Ruby上实现此功能,因为Ruby太慢了。 但是,如果有一个接口可以轻松地与本地机器学习库进行交互,那么即使在Ruby上,您也可以使用ML。 您可以编写代码来协调Ruby中所有计算的过程,以及其所有的表现力和宝石生态系统。 对我而言,性能是带来新功能的工具。
绝对是这样! 我一直在为性能不佳的Ruby程序而苦苦挣扎。 我不得不编写大量SQL代码来加快速度,将部分逻辑转移到数据库端,因为它的工作速度快了数百倍。是的,但是我宁愿将有问题的代码移至本机扩展,而不是将其重写为Go或Haskell上的微服务。 我认为能够编写尽可能多的Ruby代码并将性能关键的部分移到可以在Ruby中轻松进行交互的位置是个好习惯。 机会本身就是美好的。
是的,在业务任务方面应该更快,更轻松,更高效。 无需雇用具有不同技能和堆栈的程序员,因为所有内容都可以用Ruby编写。 听起来很有希望。 您如何看待Rails的未来? 每年都有谣言说Rails快要死了...我之所以有偏见,是因为我为一家主要产品是Rails中的性能监视工具的公司工作。 就我个人而言,我不认为它们会死,但Rails肯定变得更加成熟,“成熟”。 对于社区中的许多人来说,这是全新的东西。 当Rails成为宣传主题时,我们许多人都加入了Rails和Ruby社区。 有很多热情,很多创新。 虽然,我们的许多“创新”在其他更成熟的生态系统中是司空见惯的。 那时,很多事情是不可能的,因为生态系统仍然不成熟。
那是一个非常激动人心的时刻。 每个星期一,我都期待着RailsCasts的新一集。 每周都有新宝石。 例如,本周我们创建PDF文件,下周我们上传文件,然后出现一些根本性的新内容,例如捆绑程序。 那是一个崭新的想法,令人兴奋的时期,每个人都有很多精力。 许多人认为Rails或Ruby快要死了,因为这些情绪已经消失了。
在我看来,生态系统刚刚成熟并变得更加稳定。 我们已经尝试了5种完全不同的方式来上传文件,而不必每周都这样做。 在情感方面,我肯定会错过那些时间。 但我认为现在情况不会更糟。 我们可以这样说:“好吧,我们经历了所有这些冒险,尝试了不同的方法,获得了教训。 现在我们已经选择了每个人都会使用的最佳选择。” 我觉得很好。
我的一部分肯定怀念当时的驱动力,即当时在Ruby社区中不断变化和进步的感觉。 现在,我在Rust社区中看到了它。 在那里,我可以体验到同样的情感。 是的,在Ruby中,激情消退了。 但是从生产率和实际工作的角度来看,一切都还不错。 我了解到,一个喜欢不断学习新事物的人需要这种情感。 我在其他生态系统中寻找它们。 社区正在成熟,变化较少。 但就我个人而言,它很适合。
我认为这是事物的自然顺序,Rails仍然很漂亮。 发生的一切-使开发商业应用程序的实际业务受益。 我喜欢Rails允许使用不同的方法。 例如,您可以在Rails上下文中使用开拓者宝石或dry-rb宝石。 您可以在代码中使用各种抽象,但最终它仍将是Rails应用程序。 这就是我喜欢的。我绝对同意你的看法。 我认为整个生态系统正在成长。 那时,我们现在称为Rails的“高峰”,出现了许多新的创业公司。 没有人关心稳定性和稳定性。 然后,您会不断涌入新的情感和活力。 现在,这些公司中的许多已经成长为Github或Shopify之类的大公司,并且已经开始关注稳定性。 这对许多人来说都是正确的。
作为一个社区,我们集体决定优先考虑稳定性而不是实验。 从语言的角度来看,由于Ruby保持不变,因此仍有很大的实验空间。 Ruby之所以能够出色地进行实验,是因为它一无所获。 但是,社区决定专注于创建可在Rails上使用的东西,因为Rails已被广泛使用了很长时间。 编写gem时,可能会支持多种版本的Rails,因为有许多公司使用它们。 结果,Rails本身也变得更加谨慎,不要不必要地破坏其API。 就个人而言,我很高兴能参与此过程。
从业务角度来看,稳定性非常重要。 特别是对于重载系统。 框架接口的稳定性使工作更加轻松。 我记得曾经很难从一个版本的Rails切换到另一个版本。 例如,当应用程序由于编码不兼容而开始引发一堆错误时。开拓者是一个很好的例子,显示了社区和生态系统的当前状态。 一方面,它存在的事实很好地证明了Ruby社区中仍有很大的实验空间。 但是我认为,如果5年前问世,它将更加受欢迎,因为现在我们围绕着Rails建立了一个更大的生态系统,其中包含许多宝石。
最后,您将更关心如何使用熟悉的堆栈进行操作。 当您只需要编写可开具发票,创建PDF文件和使用Web套接字的应用程序时,许多人会更喜欢使用其他人已经使用过的应用程序-在这种情况下,您可以共享瑰宝,讨论,找到StackOverflow的答案等。
, Ruby- . 5-10 , , , “”. “” . , , .
, .. , .
? Ruby?, JavaScript TypeScript. JavaScript Ruby. , , . TypeScript — JavaScript , JavaScript . , , , , . TypeScript, JavaScript.
, . TypeScript. Ruby. , TypeScript JavaScript, , JavaScript . . , . , , . JavaScript, , , , - JavaScript. , TypeScript JavaScript, , .
, Ruby, . , , , , , , , , Rails, , , , . , Ruby .
. , . : . , , . , , , , . , ., , . , TypeScript . . , JavaScript . , - , .
, — . , . TypeScript , . , Ruby. , Ruby , .
, RailsClub . , , . , . , ., , , , , , , , - .
, , , , ., . , , Rails, . . - , , Rails. , JavaScript , . , Ember, TypeScript. , , JavaScript . , , . , .
? 5 ?, . 2 .
-, , «», , . , , . Ruby, , . , Ruby , open source, . . , . , , , .
Medium. , , , — . , , , , , . — , , .
, . , . . , . , . ?我同意,大学仍然很重要。我个人从高等教育中获得了很多。但是,我不喜欢术语“基础”。除了“基本知识”之外,您总能学到一些东西。最主要的是要了解,总有比您所知道的更深的东西,并且它正在等待发现。如果您开始挖掘,这可能会以惊人的方式为您提供帮助。, , . . , Ruby. , , Rust Ruby. . , . , . , , , , , . — .
, ?, . , — , . , .
, . , Rust . Java Rust. , Rust. , . Rust — , .
, — . -, .Rust, , . , , , , -, . , , , , . .
, «This Week in Rails» .谢谢你 , , . , , . , , .
, , 2 . , Rails!! , .
谢谢你 . RubyRussia . ?, , , . , . , , . ? -, ?
-, , , . : , , . ! , , .! - , . , . , !
.!
! ! ! !! ( :) 6 .
, . 8000 .
hype.codes .
, Ruby- :
—
Toptal—
Gett—
Instamart ,
UCHi.ru ,
JetBrains—
Bookmate InSales