
Ruby语言
文章平均质量分 77
wolftop
秋风落叶乱为堆 扫尽还来千百回 一笑罢休闲处坐 任它落地自成灰
展开
-
我4年前写的第一个ruby程序
获取给定目录下给定扩展名列表的所有文件,包含其子目录。因为我这第一次试手ruby,后来也爱上了ruby。tl = 0if ARGV.empty? or ARGV[0].nil? or ARGV[1].nil? puts "plase run this module with the cmd-params,e.g /"folder/" /"file-expansion-list/"" exitendfts[0]=ARGV[1] if (fts=ARGV[1].split(",")).empty?Fin原创 2010-12-10 02:35:00 · 752 阅读 · 0 评论 -
Ruby源文件指引
ruby的一些源文件的用途:ruby语言核心:class.c class相关API error.c 错误相关API eval.c eval 相关 gc.c 垃圾收集 object.c 对象系统 parse.y 解析 variable.c 常量,全局变量,类变量。 ruby.h ruby的主要宏和原型 intern.h ruby的C API的原型。intern是はinternal的略写 实用工具(util)dln.c 动态载入 regex.c 正则表达式引擎 st.c hash table util.c 基数原创 2010-12-13 03:30:00 · 4622 阅读 · 2 评论 -
Ruby用6行搞定P2P
一个人用15行写了一个p2p的Python程序,然后有人用Perl写了一个9行的。这里有一个6行的Ruby版本:(作者:"Florian Gross" )#!/usr/bin/ruby# Server: ruby p2p.rb password server server-uri merge-servers# Sample: ruby p2p.rb foobar server druby://localhost:1337 druby://foo.bar:1337# Client: ruby p2p.rb p原创 2010-12-13 03:36:00 · 1039 阅读 · 0 评论 -
一个有意思的Ruby脚本
32.times{|y|print" "*(31-y);(y+1).times{|x|print" #{~y&x==0?"A":"."}"};puts}32.times{|y|print" "*(31-y);(y+1).times{|x|print" #{~y&x==0?"A":"."}"};puts} A A A A原创 2010-12-13 03:39:00 · 666 阅读 · 0 评论 -
Ruby的GC机制源码分析(4)
<br /> 标记<br />正如说过的那样,ruby的GC是标记和清除型。具体来说,标记就是设置FL_MARK标志。搜索已用的VALUE,设置FL_MARK,全部检查过之后,再来看对象堆,释放那些没有设置FL_MARK的对象。rb_gc_mark()<br />rb_gc_mark()是一个递归标记对象的函数。<br />▼ rb_gc_mark()<br /> <br /><br /> <br />首先,RANY()定义如下。没什么特别的。<br />▼ RANY() 295翻译 2010-12-19 21:08:00 · 849 阅读 · 0 评论 -
Ruby的GC机制源码分析(2)
停止与复制停止与复制型GC是标记与清除型GC的一个变体。首先,准备多个对象域。为了简化讨论,假设只有两个域:A和B。将一边标记为“active”,生成的对象都放到active域中(图5)。图5: 停止与复制(1)执行GC时,按照标记与清除同样的路径进行搜索。但是,与标记不同的是,对象本身移到了另外一个空间(图6)。搜索全部链接之后,只要抛弃留在A中的对象,将B标记为active即可。图6: 停止与复制(2)停止与复制也有两个优点。·翻译 2010-12-18 13:48:00 · 1161 阅读 · 0 评论 -
Ruby的GC机制源码分析(3)
对象的管理ruby GC的目标只是Ruby的对象。而且一定要是ruby生成和管理的对象。反过来说,它无法照料到用户随意分配的内存。比如,下面的函数在ruby的操作中就会引起内存泄漏。void not_ok(){ malloc(1024); /* 获得内存后丢弃 */}然而下面的函数不会引起内存泄漏。void this_is_ok(){ rb_ary_new(); /* 生成Ruby数组后丢弃 */}rb_ary_new()使用了ruby的正式接口分配内存,翻译 2010-12-18 13:54:00 · 1178 阅读 · 0 评论 -
Ruby的GC机制源码分析(1)
本文来自作者的日文书GC可以做的事讨论GC算法之前,需要解释一下“GC是什么”。也就是说,“无用的内存”处于一种怎样的状态。为了让讨论更加具体,将对象间的链接结构简化。也就是图3所示的状态。图3: 对象首先,全局变量所指的而且在语言堆栈上的对象“确实必要”。对象实例变量所指的对象也是必要的。从这些对象出发,顺着链接前进可以到达的对象,都是必要的。稍微理论点说,以“确实必要”的对象为起点,递归的沿链接前进可以到达的所有对象都是必要的。图4表现了这种情况。线左侧是翻译 2010-12-18 13:33:00 · 2069 阅读 · 0 评论