iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >Ruby 2.0 有哪些新特性
  • 845
分享到

Ruby 2.0 有哪些新特性

2024-04-02 19:04:59 845人浏览 安东尼
摘要

这篇文章主要介绍“Ruby 2.0 有哪些新特性”,在日常操作中,相信很多人在Ruby 2.0 有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ruby 2.0 有

这篇文章主要介绍“Ruby 2.0 有哪些新特性”,在日常操作中,相信很多人在Ruby 2.0 有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ruby 2.0 有哪些新特性”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

本月24日Ruby 2.0终于发布了。

Ruby核心团队的卜部昌平桑昨天在一个内部学习会上的presentation,介绍了Ruby 2.0所包含的一些新特性。

(本文内容选译自该幻灯片:https://speakerdeck.com/shyouhei/whats-new-in-ruby-2-dot-0 )

为什么有Ruby 2.0?

·因为我们在改变事物。

·我们渴望让自己变得越来越快乐、健康、以及高产。

·不必畏惧。“拥抱变化。”

Ruby 2.0有什么新鲜的?

什么不是Ruby 2中的新鲜货

·几乎所有的东西。

·“100%后向兼容”,matz如是说。

·在现实中……

·(举个例子来说)Rails仍然能完好运行如初。

也就是说,

新的东西被加进来了。

许多内部的东西得到了改进。

Ruby 2.0的新句法

关键字参数(KeyWord arguments)

下面的代码在1.x中能够正常工作:

obj.method "with", :lots => "of",                    :args => "in",                    :hash => "fORM"

但是,问题出在哪呢?

问题是在定义该方法的时候: (Mort注:在Ruby 1.x中,只能将多个带符号名称的参数作为一个Hash来传递给方法。要为参数指定默认值,实现起来就很累赘,参见如下代码)

def obj.method(arg, hash)   lots = Hash[:lots] || "default"   args = Hash[:args] || "another"   hand = Hash[:by hand] || "annoying"   ... end

注意到代码中错误的Hash[:by hand]——手写代码是错误产生的根源!

从2.0开始,Ruby将引入关键字参数

def obj.method(a, b = 1, c: 1, d: 2)

其中a为固定参数,b为可选参数,c、d则为关键字参数。这样,局部变量a、b、c和d都将被恰当地赋值。

在调用函数时,原有的调用方式无需更改。

Mort注:虽然幻灯片里没有写,传统的基于Hash参数的调用方法是这个样子的

obj.method("foo", :c => 2, :d => 3)

现在Ruby 2.0同时也支持直接采用关键字参数的调用方法:(python程序员一定会觉得这种语法更亲切)

obj.method("foo", c: 2, d: 3)

更详细的示例,可以参考这里:

Http://brainspec.com/blog/2012/10/08/keyword-arguments-ruby-2-0/

其他细微的句法改进

·引入了符号数组字面值%i和%I。

<code>%i(foo bar baz) # =&gt; [:foo, :bar, :baz] </code>

&middot;Ruby现在默认把所有的输入都视作UTF-8编码。当然你也可以显式地指定需要的编码。

Ruby 2.0的核心性能改进

require的改进

&middot;背景:今天,由于我们有了许多gems,启动Ruby有时甚至需要一次require 128+个库&mdash;&mdash;这带来了糟糕的性能问题。

&middot;解决:require变得更快了(从计算复杂度的意义上来说)。

&middot;若干技术被应用于减少多余的计算上。

Backtrace惰性生成

&middot;起初,backtraces只是字符串数组而已。

&middot;每当抛出异常时,这些字符串就被自上而下地生成出来,即使在它们没有实际用途的情况下。

&middot;这导致了超乎寻常的低效,尤其是当你有1024+个stack frames时(这在Rails应用中很常见)。

&middot;从Ruby 2.x开始,Thread::Backtrace被用来取代字符串。

&middot;它们非常地轻量级。

&middot;当你需要查看backtrace时,只需将它们转换成字符串即可(调用#to_s)。

Flonum类

&middot;在64位平台(如今早就烂大街了)上,指针,整型和浮点型数均是64位宽度的。

&middot;在Ruby中,指针和整型均为C级别的reGISter寄存器变量。而double却是存储在内存中的,如果我们能够如操作指针一样操作它们,将如何呢?

&middot;问题:如何让一个指针和一个double共存于一个uNIOn中?

&middot;解决:一些技巧性的位移。

Mort注:图片懒得搬运了&hellip;&hellip;请参见原幻灯片。

GC(Garbage Collection)

&middot;Bitmap标志:以前,GC标志位存储于每个对象中,但现在已经被转移到了专用的内存页中,以减少缓存的误查询(同时也更加CoW (Copy-on-Write)友好)。

&middot;非递归标志:标志函数如今避免了机器栈溢出的风险。

&middot;惰性清理(从1.9.3起):清理器只有在必须的地方才进行收集(减少了stop时间)。

Ruby 2.0的新核心特性:#1 调试工具

DTrace支持

TracePoint支持

GC stats

Ruby 2.0的新核心特性:#2 核心库

细粒度的异步中断处理

Ruby的执行有时会因为各种原因而中断,例如,超时。

Ruby 2.0提供了细粒度的异步中断处理方案:

Thread.async_interrupt_timing Timeout::Error => :defer do   timeout(rand()) do     begin       Thread.async_interrupt_timing Timeout::Error => :immediate do         setup          handle          ...        end     ensure       teardown      end   end end

模块前插

有时候你想要给一个方法添加需要的安装或拆解代码,而相应的部分却定义在别处。

module ActiveRecordHelper    def save      ???    end end

该如何去做呢?在Ruby 2.0中,你可以:

class Foo < AR::Base    prepend AR::Helper       def save      bar    end end module AR::Helper    def save      foo      super     baz    end end  Foo.new.save

这避开了Rails中的所谓“别名方法链(alias method chain)”的困扰。AMC什么的已经不再必要了。

惰性枚举器

Ruby的foo.bar.baz. ...风格(所谓的“流水作业”)有时会传递许多并不必要的临时对象,而这些理论上都可以通过惰性求值来避免。

File.open(path) {|fp|      fp.each_line. \      select {|line| # 生成了临时数组      /regexp/ =~ line      }. \      each_with_index.map {|line, no| # 生成了临时数组      sprintf("%d: %s\n", no, line)      }. \      first(10).each {|str| # 生成了临时数组          puts(str)      }  }
File.open(path) {|fp|      fp.each_line.lazy \      select {|line| # 没有临时数组产生      /regexp/ =~ line      }. \      each_with_index.map {|line, no| # 没有临时数组产生      sprintf("%d: %s\n", no, line)      }. \      first(10).each {|str| # 没有临时数组产生          puts(str)      }  } # 甚至在到达EOF之前都不读取数据

一个有趣的应用实例:无穷枚举器。

# Leibniz formula for &pi;  (0..Float::INFINITY).lazy.map {|i|      ((-1) ** i) / (2*i + 1).to_f  }.take(65536).reduce(:+) * 4

其他的新方法

&middot;Kernel.__dir__:获取__FILE__所在的目录名。

&middot;Kernel#to_h:通用的Hash转换方法。

&middot;Random类(1.9+):可重复的PRNG。

&middot;IO#wait_writable:等待直到可写。

&middot;Refinements: 实验性的。

Mort注:更多关于Ruby 2.0核心特性的介绍,参考

http://globaldev.co.uk/2012/11/ruby-2-0-0-preview-features

http://www.infoq.com/news/2012/11/ruby-20-preview1

Ruby 2.0标准库的改进

CGI

CGI已经为HTML5做好了一切准备。

net/http

支持SNI(Server Name Indication)。

Zlib绑定

Zlib如今运行在解释器的进程之外。这意味着zlib在多线程的情形下运行速度将更快。

更新的stdlibs(标准库)

Rubygems 2.0.0

JSON 1.7.7

Rake 0.9.5

Rdoc 4.0

以及其它(REXML,yaml,openssl&hellip;&hellip;)

到此,关于“Ruby 2.0 有哪些新特性”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Ruby 2.0 有哪些新特性

本文链接: https://www.lsjlt.com/news/74966.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Ruby 2.0 有哪些新特性
    这篇文章主要介绍“Ruby 2.0 有哪些新特性”,在日常操作中,相信很多人在Ruby 2.0 有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ruby 2.0 有...
    99+
    2024-04-02
  • Play Framework 2.0新特性都有哪些呢
    这篇文章将为大家详细讲解有关Play Framework 2.0新特性都有哪些呢,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Play Framework 刚刚发布了2.0正式版,来看看 P...
    99+
    2023-06-17
  • Play Framework 2.0 RC1有哪些特性
    这篇文章主要介绍“Play Framework 2.0 RC1有哪些特性”,在日常操作中,相信很多人在Play Framework 2.0 RC1有哪些特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Pla...
    99+
    2023-06-17
  • Play framework 2.0 Final有哪些特性
    这篇文章主要讲解了“Play framework 2.0 Final有哪些特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Play framework 2.0 Final有哪些特性”吧!P...
    99+
    2023-06-17
  • JDK1.5有哪些新特性
    本篇内容主要讲解“JDK1.5有哪些新特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JDK1.5有哪些新特性”吧!  1.泛型(Generic)  C++通过模板技术可以指定集合的元素类型,...
    99+
    2023-06-03
  • css3新特性有哪些
    这篇文章将为大家详细讲解有关css3新特性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   CSS3的新特征有:1、圆角效果;2、图形化边界;3、块阴影与文字阴...
    99+
    2024-04-02
  • CSS3有哪些新特性
    这篇文章主要介绍“CSS3有哪些新特性”,在日常操作中,相信很多人在CSS3有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS3有哪些新特性”的疑惑有所帮助!接...
    99+
    2024-04-02
  • Flex4新特性有哪些
    这篇文章将为大家详细讲解有关Flex4新特性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Flex4新特性先来看看Flex4的一些消息吧:Flex4.0的代码编号为Spark,其有新的组件和皮肤架构...
    99+
    2023-06-17
  • ECMAScript新特性有哪些
    本篇内容介绍了“ECMAScript新特性有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. Top-level Await在ES20...
    99+
    2023-07-02
  • Kubernetes1.5有哪些新特性
    这篇“Kubernetes1.5有哪些新特性”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Kubernetes1.5有哪些新...
    99+
    2023-06-28
  • Hibernate3有哪些新特性
    小编给大家分享一下Hibernate3有哪些新特性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Hibernate3新特性Hibernate3在产品的应用性上有了...
    99+
    2023-06-17
  • kubernetes1.4有哪些新特性
    这篇文章主要介绍“kubernetes1.4有哪些新特性”,在日常操作中,相信很多人在kubernetes1.4有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”kubernetes1.4有哪些新特性...
    99+
    2023-06-27
  • PHP8.1新特性有哪些
    这篇文章主要为大家展示了“PHP8.1新特性有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP8.1新特性有哪些”这篇文章吧。当大多数人的 Linux ...
    99+
    2024-04-02
  • Swagger3.0有哪些新特性
    这篇文章主要讲解了“Swagger3.0有哪些新特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Swagger3.0有哪些新特性”吧!支持 OpenAPI...
    99+
    2024-04-02
  • JavaScript新特性有哪些
    这篇文章主要介绍“JavaScript新特性有哪些”,在日常操作中,相信很多人在JavaScript新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScri...
    99+
    2024-04-02
  • jQuery1.6.4有哪些新特性
    本篇内容介绍了“jQuery1.6.4有哪些新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Data:...
    99+
    2024-04-02
  • Vue3.2有哪些新特性
    本篇内容介绍了“Vue3.2有哪些新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一个:<script setup> 正式...
    99+
    2023-06-26
  • Laravel10有哪些新特性
    今天小编给大家分享一下Laravel10有哪些新特性的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Laravel 10 发布...
    99+
    2023-07-04
  • PHP8.2有哪些新特性
    这篇“PHP8.2有哪些新特性”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP8.2有哪些新特性”文章吧。null和fa...
    99+
    2023-07-02
  • Android3.1新特性有哪些
    Android 3.1(Honeycomb)是Android操作系统的一个版本,主要用于平板电脑。以下是Android 3.1的主要...
    99+
    2023-09-13
    Android
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作