2015 年 Ruby 大盘点
2015 年 Ruby 圈发生了很多有趣的事,让我们跟随 Glenn Goodrich 来回顾一下 15 年 Ruby 的年度标志性事件。
2015 将要结束,这一年对于 Ruby 来说非常重要。如果回顾一下本年度的标志性事件及其相关故事,一定会妙趣横生。有点类似敏捷型开发流程的回顾,笔者将把 2015 年分为一系列的短跑冲刺,从中查看我们的收获。
为顺利完成这一构想,首先需要定义什么是「标志性事件」。其实,几乎每年,Ruby 都在以下主要领域/标志性事件中要求社区有所突破,从而在该冲刺阶段/年份取得成果:
- 改善语言
- 壮大用户社区
- 紧跟编程界的步伐
以上便是笔者定义的「标志性事件」。为了衡量 Ruby 社区的成果,笔者将再次浏览涉及以上主题的博客、文章以及视频。肯定会有遗漏,但如果十全十美,那还要评论做什么呢?
最后,要写出一篇真正有价值的回顾,也需要探讨一下不足,因此本文也会涉及这一点,力臻完美。不过估计一些机敏的读者会想补充更多内容。
改善语言
Ruby
Ruby 2.2早在一年前就已发布,不过本文会将其划为本年度的积压任务。该版本添加了许多新内容,具体如下:
- 加入超级方法元数据使得调试过程更加简单。
- Symbol GC 大大改善了 Ruby 垃圾收集器的性能,可能是多年以来该语言获得的最佳改进。
- 对了,GC 的另外一项改进是递增GC,这有助于在垃圾收集时保持稳健的性能。
- 还有一些不得不提的小变化。
Ruby 2.3.0 于圣诞节发布,其中包括以下“好礼”:
- 可通过CLI选项冻结所有字符串,以便了解为了处理代码中的字符串需要做多少工作。
- 如果你没有听说过安全导航运算符,那你活得恐怕有些闭塞了。
- 所有版本都包含漏洞修补,但是该漏洞听起来实在可怕,这篇文章详细说明了如何修补这个漏洞,写得很不错。
有时,改善语言意味着告别旧版本。因此Ruby停止支持1.9.3 版本了。晚安,1.9.3,我们会记住你的。
Ruby解释器中最受期待的同时也是最大改进的是JRuby 9000:
- 这儿是版本发布公告,其中列举了一些主要的变化。
- JRuby EU主题视频十分值得一看,从中能了解到 JRuby 9000 有多强大。给 Charles Nutter 和这个团队点赞。
另一个改善语言的方法就是,多多学习新鲜且有用的东西。比如下面这些:
- Reddit上有一个关于你最爱的 Ruby 小技巧的提问,收到了无数回复。
- 建议学习如何使用 rack-mini-profiler 进行分析。
- 下面的整个站点都是超好用的 Ruby 技巧。
- 对正规表达式的了解,永远都不嫌多,对吧?
关于这一点,2015 年对于 Ruby 来说,充满了有关性能提升的深度好文:
- Richard Scheeman (今年的 Ruby 博主 MVP 非他莫属)写了两篇非常好的堆转储系列文章。这是第一篇和第二篇。
- 这篇文章关于如何运用 Ruby调试内存泄漏。
- 有没有折腾过 Ruby 垃圾回收器的设置?笔者也没有,或许可以试试。
年度大战
最后,如果一种语言向其使用者提供多种选项,那么它就上升了一个台阶。RSpec 与 Minitest 的竞争便是绝好的例证。
- 如果你的默认工具为 RSpec,那下次可以试试 Minitest,可能会有惊喜哦!
- 如果想要实现最佳选择,这篇文章可能有用。
好吧,或许“年度大战”的说法有点夸张,但笔者确实认为本年度 Minitest 和 RSpec 的对决很有看点。
Rails
和 Ruby 2.2 相同,Rails 4.2 也是在去年12月底左右发布的。笔者也将其划为 2015 年的积压任务,因为直到今年,才收到针对该版本的反馈。以下是该版本的新变化:
- 当然,要想了解其变化,最好的方法是参阅发布说明,你会看到 ActiveJob、异步邮件和充分记录等内容。
- ActiveJob 非常好用,大大简化了队列系统的使用。
- 发送异步邮件这一常见任务变得更加易于测试和实现。
随着后端 Web 布局的变化,Rails 也随之变化。下面几篇文章可使变化过程变得更易理解:
安全一直都是导致 Rails 出现问题的主要因素。对此,也有一些改进:
- 这篇文章阐述了如何确保安全配置 Rails。
- 了解最常见的攻击形式,比如CSRF 和 Rails,能够大大提升工作效率。
- 当然,4.2 有数次修正发布,大多都是关于安全和漏洞修补的。欲知详情,请参阅各个版本。
当然,还有大量与Rails性能相关的文章:
- Collective Idea 博客中有关优化 Rails 内存使用的 4 篇系列文章。
- 不过,在此之前,最好了解一下你的 Rails 性能。
- 对性能有所了解之后,可以参阅ActiveRecord 优化,这两篇文章出自另一位 MVP 候选人,Justin Weiss。
Ruby 的主要变化并未出现在 Rails 4.2.x 中,但笔者认为,5.0 在 4.2 的基础上会有非常明显的变化。
Rails 之外
理所当然的是,全新的基于 Ruby 的非 Rails 开发框架和代码库能够改善 Ruby语言。以下是 2015 年出现的一些新内容:
- 这一年对Lotus来说非常重要,如果想尝试 Rails 以外的面向对象的优秀 Web 开发框架,可以试试 Lotus。
- Opal也是 2015 年中成绩斐然的一个库,作为从 Ruby 到 Javascript 的编译器,非常受欢迎。
- Volt或许是站在 Opal 肩膀上的 Web 开发框架,其利用 Opal 帮助开发者编写前端和后端的 Ruby 程序。
- 另外一个新的 Web 开发框架 Pakyow 致力于使实时应用更加好用,当然也值得参考。
壮大用户社区
任何一门想要发展壮大的语言都需要使越来越多的人知道这门语言。听起来很难吧?下面的文章可帮助那些不了解 Ruby 的人入门:
- Kingsley Silas 写了一篇Ruby 入门宝典。
- Nihau Sahu 在 SitePoint 上发表了让新人了解 Ruby 群体。
技术多样性已然成为非常热门的话题,这也合情合理。Rails Girls 和RailsBridge 都专注于鼓励 Ruby 多样性。本年度围绕多样性的故事有:
- Stephanie Burns 描绘了她在 Ruby 代码营(code camp)中的经历。代码营越来越多,其形式也越发符合 Ruby 社区的需求。
- 类似于 Makers 学院的组织为其女性学员提供奖学金。
- 笔者觉得 Hello Ruby 非常棒,这是一本儿童书,能引起小孩子对写代码的兴趣。真的,可以考虑买一本送给小朋友。
总之,Ruby 的多样性发展在 2015 年可谓可圈可点。希望这一主题在 2016 年能获得更多积极的支持。
跟上科技新宠的步伐
任何一门语言要想在当前形势中保持活跃,都必须跟随语言之外的技术不断变化,甚至实现整合。从根本上来说,Ruby 满足这一点,因为它默认将两个大的解释程序(MRI和JRuby)接入外部运行。以下为 2015 年一些重要的科技话题,并就 Ruby 如何融入技术进行了解释。
Docker
集装箱化在2015年末风行一时,以下是有关 Ruby 和 Docker 的一些文章:
- 阅读来自 Travis Reeder 的这篇文章,可为 Ruby 应用创建最小的 Docker 镜像。
- 使用 Docker 测试 Rails 会非常简单,Marko Locker 的这篇文章写得很清楚。
- Nick Gauthier 阐述了如何使用 Docker 并行开展 Rails 测试。
真的,在2015年,一不留神就能看见10篇关于Docker的文章。如果还没有学习 Docker,那就赶紧学吧,它名副其实。
Slack
你在使用 Slack 吗?当然!因为每个人都在用。Slack 很好用,其价值能赶得上大多数发达国家的 GDP。Ruby 和 Slack 相结合非常好用,看看下面的文章就知道:
- 利用 Rails 创建一项 Slack 服务吧,非常有意思。
- 或者用 Sinatra 创建也行。Slack 适用于各种开发框架。
- 这篇文章提到了所有利用 Rails 创建 Slack 服务所需完成的工作。
其他语言
Ruby 开发者总在寻找可以利用或学习的其他语言,以期让开发过程变得更加愉悦。下面是一些关于寻找编程架构的小故事:
- Parse 从 Ruby 转为 Go,变得更加健全了。
- 今年有关 Rust 的报道可谓不计其数,Robert Qualls 的这篇文章展示了如何通过 Ruby 使用 Rust。
- 不过,Ruby 开发者的新欢一定是 Elixir。阅读本文,看看为什么有人坚信 Elixir 是未来之星。
最后,其他引起躁动的 Ruby 相关文章:
- React 是目前的 javascript 开发框架。通过这篇文章学习如何通过 Rails 使用它吧。
- 如果你用 Ruby 写 Web 应用程序,又不是 David Heinemeier Hansson(Ruby on Rails 创始人),那么微服务对你而言就是全新的概念。这篇文章阐述了如何将 Rails 应用设计打造为微服务。
缺点
每篇回顾都应花一点篇幅讲讲不足。做一个消极者是非常容易的,所以这一部分本可以很长,不过笔者只会列出以下几条:
- 人们对于 Rails 开发工作流中 Spring 的加入毁誉参半。许多人和这位作者想的一样,完全放弃了 Spring。
- Adam Hawkins 提到了 Ruby 需要改进的大量问题,并且展示了一幅高要求的产品规划图。
- 笔者之前也提到过微服务,它受到了大量的反对。Nick Sutterer(许多超棒的程序和Trailblazer 开发框架的开发者)写的这篇文章就说明了如何在被微服务折腾之前做好设计工作。
- 最后,Refinements 怎么样了?有人用吗?MVP 候选人 Starr Horne就会用,但是笔者并不觉得很多人在用 Refinements。我们应该用吗?
- 2015 年,我们了解到,宕机简直是噩梦。的确,宕机真的是太恐怖了。
本文肯定遗漏了 Ruby 领域中比较不起眼的一些内容,请在评论区告知。
原文地址:http://www.sitepoint.com/a-retrospective-on-ruby-in-2015/
Cloud Insight 集监控、管理、计算、协作、可视化于一身,帮助所有 IT 公司,减少在系统监控上的人力和时间成本投入,让运维工作更加高效、简单。
本文系国内 ITOM 行业领军企业 OneAPM 工程师编译整理。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
本文转自 OneAPM 官方博客
2015 年 Ruby 大盘点的更多相关文章
- 世界名校网络课程大盘点,美国大学CS专业十三大研究方向,世界50所知名大学提供开放课程
世界名校网络课程大盘点 加州大学伯克利分校http://webcast.berkeley.edu/ 加州大学伯克利分校与斯坦福大学. 麻省理工学院等一同被誉为美国工程科技界的学术 领袖,其常年位居 ...
- 2015年十大热门Android开源新项目
2015年十大热门Android开源新项目 2015 即将结束,又到了大家喜闻乐见的年终盘点时刻啦,今天给大家盘点一下 2015 年 Android 开发领域新出现的 10 大热门开源项目.数据来自于 ...
- 当今游戏大作share的特性大盘点
极品游戏制作时的考虑要素大盘点 不知不觉入坑Steam已近4年,虽然说Steam的毒性让很多人走向一条不归路,但是想我这样即使"中毒"还是很快乐很感恩的.那么本期文章就谈谈我对其中 ...
- Python玩转硬件:TPYBoard-Micropython开发板大盘点
学习python能做什么? 可以快速搭建一个漂亮的网站 可以写爬虫 实现微信机器人助手 可以实现很多自动化的任务 -- IEEE发布2017年编程语言排行榜:Python更是高居首位,那么Python ...
- 2018 AI产业界大盘点
2018 AI产业界大盘点 大事件盘点 “ 1.24——Facebook人工智能部门负责人Yann LeCun宣布卸任 Facebook人工智能研究部门(FAIR)的负责人Yann LeCun宣布卸 ...
- 回望2017,基于深度学习的NLP研究大盘点
回望2017,基于深度学习的NLP研究大盘点 雷锋网 百家号01-0110:31 雷锋网 AI 科技评论按:本文是一篇发布于 tryolabs 的文章,作者 Javier Couto 针对 2017 ...
- 2015 年最受 Linux 爱好者欢迎的软硬件大盘点
Linux 爱好者都喜欢用哪些硬件,哪些发行版呢?近日 OpenBenchmarking.org 做了一个 2015 年度数据的统计和梳理,Linux Story 特意整理了一下,分享给大家. 转载于 ...
- 《.Net 的冰与火之歌》寄雁传书,你必须知道的C#参数知识大盘点
引言 参数,也叫参变量,是一个变量.在方法签名中随处可见,实现了不同方法间对于数据的寄雁传书,基本上充斥在代码的各个角落里.在方法签名或者原型中,方法名称后的括号包含方法的参数及其类型的完整列表.参数 ...
- fir.im Weekly - 热门 iOS 第三方库大盘点
本期 fir.im Weekly 收集的热度资源,大部分关于Android.iOS 开发工具.源码和脑洞大开的 UI 动画,希望给你带来更多的工作创意与灵感. 盘点国内程序员不常用的热门iOS第三方库 ...
随机推荐
- NDK开发之调用方法
与NDK开发之访问域中介绍的一样,Java中的方法也是分为两类:实例方法和静态方法.JNI提供了访问两类方法的函数,下面我们一起来看看怎么在C中访问Java中的方法. 我们的MainActivity中 ...
- JavaScript 应用开发 #5:为完成的任务添加样式
判断一下任务的状态,如果是完成的任务,可以在任务项目的上面,添加一个额外的 css 类,在这个 css 类里,可以去定义完成的任务的样式.比如,把文字的颜色变成浅友色,并且在文字上面添加一条删除线.这 ...
- SQL语句中格式化时间
给数据库中的字段格式化(): to_char(CREATETIME,'yyyy-MM-dd') 给程序中的字段格式化(InTime为数据库字段): InTime = to_date( '" ...
- Java 之 MYSQL 数据库搭建
1.首先要去加载java的mysql驱动,将下载的mysql-connect-bin-java.jar包添加到该项目下2.然后通过 Class.forName("com.mysql.jdbc ...
- iBATIS缓存cacheModel属性浅析
iBATIS缓存cacheModel属性的应用使得在Mapped Statement中缓存常用的数据,那么本文将会给你介绍iBATIS缓存cacheModel属性的信息. AD:2013云计算架构师峰 ...
- excel取值
1.获取excel表格中的数据的表达式“&(A-Z)” 2.excel表格取值时,如果遇到表达式中要包含引号的,两个引号表示一个引号,因为取值的时候已经用了一对引号了. ="||&q ...
- help python(查看模块帮助文档)
查看模块帮助文档: help(len) -- docs for the built in len function (note here you type "len" not &q ...
- Javascript面试题浅析
分享几道JavaScript相关的面试题. 字符串反转 这这里提供了两种解题思路.如果各位读者还有其他的思路,可以分享交流! 第一方法: function reverse(str){ var sp = ...
- 比较ArrayList和LinkedList
比较一:添加内容 涉及方法:add public void add_test(){ List<Person> addlist = new ArrayList<Person>() ...
- 看es6 字符串新方法有感
'x'.repeat(3) // "xxx" 'hello'.repeat(2) // "hellohello" 'na'.repeat(0) // " ...