美文网首页
Ruby的Block浅析

Ruby的Block浅析

作者: Amosasas | 来源:发表于2020-05-17 14:45 被阅读0次

最近在看Ruby Under a Microscope分析Ruby内部的运行机制,准备写一些总结
首先从Ruby的Block写起吧(原文是第8章)

Ruby的Block就是Ruby中的Closure Closure.Closure这个概念是从Lisp中得到的,有两个部分构成

1.一个能够运行的代码片段
2.供这个代码片段运行的环境

Ruby中是这么处理Block的,在运行闭包前,会创建一个rb_block_t的结构,这个结构中有两个指针,一个iseq指向闭包的代码片段(字节码),另一个EP指向YARV internal stack的运行环境。

Example

str = "The quick brown fox"
10.times do
  str2 = "jumps over the lazy dog"
  puts "#{str} #{str2}"
end 

这个代码就会在internal stack上创建三个rb_control_frame_t ,最底下的是整个代码已进入压进去的(你可以想象这个代码是在一个函数中实现并被调用的),第二个是10.times运行的时候Fixnum#times为了调用内部的C code压的,第三个是运行闭包时压的。但是第三个运行闭包的时候压的不是rb_control_frame_t而是rb_block_t,这两个结构十分像,你可以当作是差不多的东西,在创建第三个stack frame的时候,他的环境EP跟第二个是一样的(实际上应该就是使用第二个stack frame所在的内存,因为这两个结构很像,只需要加上一个offset就能得到rb_block_t所需要的struct element了)

相关文章

  • Ruby的Block浅析

    最近在看Ruby Under a Microscope分析Ruby内部的运行机制,准备写一些总结首先从Ruby的B...

  • iOS-2 Block

    block块 系列文章: iOS Block浅浅析 - 简书 iOS Block实现原理 iOS Block __...

  • Ruby的block

    初识block 带block方法的定义 假设我们自己要定义一个可以接受block的方法,我们应该怎样来定义,又怎样...

  • Block 原理浅析

    Block 浅析 一、Block内存 (堆、栈、全局) 知识点: 栈区(stack)— 由编译器自动分配释放 ...

  • Ruby代码块

    Ruby最强大的语言就是他的代码块 [root@master1 ruby]# cat test_block.rb

  • Ruby: Code Block

    代码块是什么? 代码块是由 {...} 或 do..end 包围起来的一块代码。代码块通常用于实现自定义的运算,有...

  • ruby中的block

    首先,我们先为Array新增一个迭代方法iterate!,如下: 那么我们看看应该怎么调用? 与属性不同,在方法中...

  • Block浅析

    先看一道关于block的面试题: 解答:arc下打印的是block内存地址,mrc下会crash原因:block默...

  • Block浅析

    参考了网上的一些Block的文档,加上自己对Block的使用、理解,对Block做一个简单的分析。 Block是C...

  • Block浅析

    block是语言的的扩展功能,它是一种带有自动变量(局部变量)的匿名函数. /******************...

网友评论

      本文标题:Ruby的Block浅析

      本文链接:https://www.haomeiwen.com/subject/pwfsohtx.html