当前位置: 首页 > 科技观察

编程语言Ruby如何再存活25年?

时间:2023-03-18 16:16:16 科技观察

【编者按】全球Ruby社区是友好和支持的代名词,人们用“Matzisnice,sowe'renicetoo”来形容。Ruby语言多年来一直很流行,尤其是在承担大量繁重工作的初创公司中。今年2月,Ruby迎来了它的25周年纪念日,Ruby已经成熟。Ruby的流行部分来自RubyonRails(RoR)Web应用程序框架的成功,但RoR不再是超级巨星。它面临着激烈的竞争。竞争,每个人都怀疑它能再活25年。翻译如下:软件是如何诞生的?这可能不是您希望在编程会议上从主讲人那里听到的第一个问题,但它是来自日本的和蔼可亲的Matsumoto,Ruby编程语言的创造者YukihiroMatsumoto(称为Matz)向500多名Ruby提出的第一个问题为期两天的一年一度的BathRuby会议上的开发人员。尽管Ruby的第一个版本0.95于1995年12月正式发布,但在2月,Ruby庆祝了它的25周年。在回答他自己的哲学问题时,Matz建议软件在命名时诞生。1993年2月24日,也就是Ruby诞生的前两年,东京和社交媒体上都举行了盛大的庆祝活动。Matz说他想用一种宝石来命名它,他开玩笑说:“Ruby很短,Ruby很漂亮而且很贵,所以我把我的语言命名为Ruby。”然而,Matz近五年来第一次来到英国,而不仅仅是为了一个生日蛋糕。Ruby可能已经成熟,但它能否再活25年仍存疑。就像它的创造者一样,Ruby语言很讨人喜欢并且拥有忠实的追随者。例如,它的语法可读性很强,但表达却很简洁,是一种动态的、反射性的、面向对象的、直观易学的通用编程语言。Ruby不想限制用户,还是引用Matz常说的一句话:“Ruby是为了让程序员开心而设计的。”但并不是每个人都开心。由于RubyonRails(RoR)Web应用程序框架的成功,Ruby语言已经流行了很多年,尤其是在需要完成大量繁重工作的初创公司中。这种显着的优势使Ruby在2012年的RedMonk语言排名中飙升至第五位,该排名结合了GitHub和StackOverflow上的语言排名来评估语言流行度,然后跌至第八位。少量。RoR虽然很受欢迎,但并不是它最大的明星,它面临着激烈的竞争,因为扩展等问题已成为互联网公司更关心的问题。例如,基于Java的框架Node.js之所以流行起来,是因为它的回调函数可以用更少的内存处理大量的连接。自2012年以来,Ruby在RedMonk排行榜的编程语言前十名中慢慢下滑。并且一直在第十名左右摇摆,这反映了Ruby的成熟和RubyonRailsweb应用框架优势的减弱。很明显,Matz知道任何编程语言的使用都是由语言社区和从生态系统中产生的项目和框架驱动的(RoR是一个令人惊讶的例子),通常不是语言本身。Ruby也不例外,尽管Ruby赢得了很多用户。因此,在BathRuby会议上,当他为自己在语言中犯下的错误而感到遗憾时,他也想阐明前进的方向,解决使开发人员远离Ruby的性能和规模问题。Matz解决关键问题的方法也表达了他看到的两个关键趋势:可扩展性和他所谓的更聪明的合作伙伴。为了解决可扩展性和创造更高的生产力,Matz认为:“更快的执行、更少的代码和更小的团队是提高生产力的关键。”尽管计算机变得越来越快,但这还不够,Matz说:“我们需要更快的执行速度,因为我们需要处理更多的数据和更多的访问。我们已经非常接近内核性能的极限。这就是为什么Ruby3.0旨在比Ruby2.0.triple更快”,Matz称之为“Ruby3x3”。“说起来容易,”Matz承认Ruby1.8“太慢了”,这是一个错误。KoichiSasada在YARV(YetAnotherVirtualMachineforRuby)方面的工作提高了Ruby1.9的性能,Matz说:“从那时起,我们一直在努力提高虚拟机的性能,但这还不够。“JIT时代为了进一步提高性能,Ruby进一步引入了JIT(即时编译)技术,JVM和其他语言已经在使用该技术。Matz证实:“我们已经创建了这个JIT编译器的原型,Ruby2.6可能会在圣诞节发布。在2.6预览版本1中可以看到MJIT的初步实现。已经可以使用–jit选项检查并将Ruby程序编译为本机代码,但Matz表示该选项仍然“未优化”,但至少“对于CPU密集型任务,它的运行速度是Ruby2.0的两倍”,他说这“非常有前途,而且JIT编译器的性能还有很大的提升空间。”特别是对于CPU密集型任务,Matz认为他们可以三倍的性能。根据JohnHawthorn在MJIT代码中的评论,目前的JIT编译器原型使用了一种不同寻常的方法:使用C编译器、GCC和LLVMClang,虽然Ruby代码是单线程的,但MJIT是在第二个线程内编译的。ShannonSkipper对MJIT的工作原理提供了最清晰的概述:“使用MJIT,某些RubyYARV指令被转换为C代码并放入.c文件,该文件由GCC或Clang编译为.so动态库文件。然后下一个当RubyVM看到相同的YARV指令时,它可以使用从动态库预编译的缓存本机代码。”Matz还认为可扩展性应该意味着创建更少的代码,他打趣道,因为“更多的代码意味着更多的维护、更多的调试、更多的时间,更少的生产力,更多的噩梦。然而,更少的Ruby代码并不意味着语言的语法会发生重大变化。主要是因为Ruby几乎没有变化的空间,Matz说:“我们使用所有字符。”所有字符都是used.”作为自由开发的代表,他不打算为了自尊而去改语法,而且看到现有的Ruby程序都是坏掉的,所以他很小心的说:“我们不会对红宝石语法。根据Matz的说法,处理可扩展性和提高生产力的工作应该留给小团队。引用亚马逊CEO杰夫贝佐斯的“两个披萨原则”:“如果团队足够大,两个披萨都不够,那么你的团队就太大了。老实说,这可能取决于团队中的成员以及他们是否就像披萨(开玩笑)。但Matz说原则是经验法则,“团队越大,需要的沟通就越多,而沟通本身就是一种成本。“更多抽象近年来,关于需要更多Ruby抽象来为开发人员提供服务,以便他们可以构建适合不同领域的应用程序的争论非常激烈,所以很高兴听到Matz说Ruby需要“更多抽象”并提到RubyonRails是模型-视图-控制器(MVC)抽象的典范。Ruby的创始人并不认为它们是完美的,”但它们提供了对未来生产力至关重要的抽象。Matz阐述的关键抽象之一是关于一个名为Guild的并发抽象项目。Matz承认:“我对Ruby的设计感到遗憾的一件事是线程……它太简陋了。”但是Ruby的成功也有一个缺点:太多人在使用这种语言,所以Matz决定删除线程为时已晚。“我认为有可能包括一个新的抽象并阻止更多人使用线程,”他说。Matz还告诉Bath与会者:“Guild是Ruby中的一个实验,以提供更好的方式,Guild是完全独立的。”“Guild之间基本上没有共享状态。这意味着我们不必担心状态共享,所以我们不不必关心锁或互斥量。Guild通过通道或队列进行通信。Matz期望在Ruby2.7或2.8中发布Guild的并发抽象。另一个Ruby代码项目是Steep。这是对Ruby静态类型分析的一次尝试,Matz解释说:"分析Ruby的类型信息很困难,因为Ruby是一种动态语言,所以你可以随心所欲地使用所有类型。“Ruby的某些子集可以静态分类,因此Matz说他们可以添加这些静态类型检查,这“有点像用户定义类型信息的Type”。我们将尽可能地推断类型,并从外部获取信息运行时类型定义文件或配置文件类型分析……”Matz说,通过这种分析,开发人员可以在编译时检测到更多错误。“我们不能做到100%的安全检测,Ruby做不到,但我们可以检测到20-40%的错误,”Matz说,这比完全没有检测是一个巨大的进步。Matsumoto还谈到Ruby是“聪明的“伙伴”和程序员最好的朋友。“现在我们有了智能计算机,RuboCop[静态代码分析器]是一种可以帮助你的方法,”不过Matz对一群笑着的观众说,他也“不太喜欢RuboCop的默认规则。Matz建议,在将来编译一个成功的程序时,“Ruby可能会建议‘你向这个方法传递了一个字符串,但它需要一个整数。’”在主题演讲之后,Matz详细阐述了他对编程交互的期望,同意这些听起来很像TonyStark的Jarvis。Matz说他很乐意看到“人工智能与我互动并帮助我构建更好的软件。注意版本更改的幅度版本更改可以阻止软件按预期工作。过去的错误已经Matz很担心,他说:“过去我们有很大的版本变化,比如在1.8和1.9之间,引入了很多重大变化,所以在五年内我们的社区一分为二。”虽然这在过去发生过,Python2和Python3就是典型例子,但Matz认为这是一个悲剧:“我们不会再犯这个错误,所以我们会不断改进。我们将在2.6中添加JIT编译器,而不是等待Ruby3.0。未来我们将在Ruby2.7-2.8中添加一些并发抽象类型,但不会有重大变化......我们将确保每个Ruby2程序都能在Ruby3中运行。当前逐渐下降,Matz似乎明白这一点。在他的主题演讲的上午,当他看到最近的StackOverflow开发人员调查结果时,他的笑容消失了,“Go和Rust是最受欢迎的语言,不幸的是Ruby不在其中他们。我相信Ruby在未来会复活。人们喜欢新技术。十年前,随着Rails的推出,Ruby风靡一时。Ruby现在并不热门,但它非常稳定。然而,Ruby已经跨越鸿沟走向成熟,而Matz并没有放弃:“Ruby是一种伟大的语言,可以帮助你提高生产力,我希望Ruby永远保持这种状态。”这意味着我们在不断改进,所以我们不能停下来。“上周在Cookpad的新国际总部布里斯托尔举行了首次日本以外的RubyHack挑战赛,这是我们向前迈出的一步,这是一个广泛使用Ruby开发平台的食谱共享网站。这些挑战是有抱负的代码提交者学习如何扩展Ruby的功能、修复错误和提高Ruby性能的机会。Cookpad的CTO和BathRuby会议的组织者MilesBathroffe表示,该会议主要针对Ruby解释器,其中解释器解释计算机如何运行用Ruby编写的程序。会议的目标之一是让参与者直接为下一版本的Ruby解释器贡献代码。随着Ruby3发布的临近??,非官方计划在2020年,它是很明显,Matz希望继续提供一种工具,帮助程序员专注于编程的有趣和愉快的方面。在与YukihiroMatsumoto(Matz)交谈时,我注意到两个事物。首先,他竭尽全力让Ruby保持活力和成长;其次,他真的很享受他正在做的事情。他对Ruby及其社区充满热情,外表谦虚:编程很有趣,在过去的25年里他玩得很开心,现在52岁,他希望在接下来的25年里,继续愉快地从事他的语言17岁时梦想并写在笔记本上。