说来惭愧,虽然我很久前就声明自己加入了RHG的中文翻译团队,但是最近因为项目和部门工作的原因,迟迟没能进入状态。重新拾掇起RHG,是在读了《Programming Ruby》和《Ruby Cookbook》关于metaprogramming以及《acts_as_statemachine》的源代码以后,我在前些天的blog中也预告了准备整理一下组织机构模型和权限模型的DSL,但实际接触Ruby的metaprogramming代码后,我发现自己还是太天真了些,这个DSL一定要整理,不过,要等我把ruby的元编程理论掌握了之后。
在重新拾起RHG后,中文翻译团队已经将书的第一部分全部翻译完毕了,因此,我可以从头来阅读(和修订)中文稿了。今天看到了chaofan,问他RHG中文第一章的图是否有人做了,他说要问DreamHead。DreamHead已经去了Thoughtsworks,而且看他的blog,工作很开心,再此先祝贺一下。
不谦虚的说,虽然目前没能完全掌握元编程技术,但已经跟几天前的我不可同日而语了。呵呵。我也想明白了,大家可能不光需要的是组织模型的DSL,更希望我能够把考虑该DSL的过程写下来。其实,说写给别人看,是个幌子。这些年的写作经验告诉我,真正受益的,是我自己。举个例子说,若干个月前,我花时间整理了javascript Hacking Guide 系列,并重点提炼出javascript的内存模型。在公司内部,真正认为这个东西有用的人为数不多(,当然对某几个人来说(如老梁)用处还是蛮大的,他负责的EditGrid的Ajax实现部分,从我的内存模型中受益颇多)。而我,要想看某个家伙写的js库,如老梁写的,或者prototype的,或者ExtJs的,都会先找出并温习一遍我整理好的内存模型。这就是写作给我带来的好处。
在第一章中,作者举了很多的ruby程序片断,教给读者ruby语言的最常用特性,对我而言,读过《programming ruby》后,本章内容已经不是太新颖,感觉重要的是,我原先认为Class 的superclass是Object,读此章并写代码验证后,发现错了,Class的super 是Module,Module的super 才是Object。另外,关于顶层(top level)的描述部分也颇有意思,打开irb之后,输入self,返回的是“main”,这才理解了其中的顶层的确省含义。
第二章,RHG中规中矩的讲对象,对象的3大构成要素:1 标识 2 方法 3 实例变量。比较吸引眼球的部分,是对各个结构体的剖析,从中,你可以看到为了节约内存,ruby做出了种种的努力,例如 Fixnum的实现和symbol的实现,再比方,通用的RBasic结构体以及RClass结构体、类型转换宏的使用、union的使用,还有generic_iv_table的get 和set方法等。
第3章讲hashtable的实现,在《programming ruby》中,用Symbol的好处已经讲了不少了,这里主要讲解了些Symbol的内部机制,看本章的关键,是把几个结构体看懂: st_table,st_table_entry 。。。我看了一会,感觉没有意思,就跳过了,等以后有时间补上吧。
第4章,先给大家讲了个小噱头,叫作对象的singleton 方法,我开始想到的是类的静态方法,后来仔细考虑,才发现自己错了,作者其实讲解的是: class << obj 这部分的实现。读者了解了object的singleton类是如何和object attach在一起之后,作者才开始深入讲 Class的Class的实现(也就是我们平常说的metaclass部分)。记得有人在javaeye上写作者画出了八卦图,现在想,作者用的这种图真是不太直观,不如《programming ruby》中的图看上去舒服,嘿嘿。后面的include和extend部分还没有看,初步估计,看了以后还会对《programming ruby》中的相应部分加深理解。
总结一下,看Acts_as_statemachine的源代码,感觉要想写这么一个DSL的插件,还是很考验作者对ruby内存对象模型的掌握能力的,重点要看的部分是:include 和extend的使用、Module的嵌套与作用域、对象与类对象、对象方法和类方法的关系与实现等。
写一个扩展话题,通过对Acts_as_statemachine的使用,我发现它的使用方法是在某个Model的子类中进行定义,但是如果同一个类有不同的实例,每个实例有不同的状态迁移关系,acts_as_statemachine好像就不能用了。举个例子:公安的缺陷管理和质检的缺陷管理流程,是缺陷(Defect)这个model类的不同的实例,不应该为这两个实例生成新的类(如:class GongAnDefect < Defect),因为明天我可能会考虑为税务增加自己的Defect处理流程,大后天我又考虑为技术中心添加新的Defect处理流程。组织模型的DSL实现也会遇到类似的问题,谁有好点的处理方法呢?
应该会有解决办法的,豆爹,加油啊,努力啊,我很看好你吆~~~~~(在没有人鼓励的情况下,我总是这样对自己说。嘿嘿)
分享到:
相关推荐
《Ruby黑客指南》是由Minero Aoki撰写的书籍,旨在深入探讨Ruby解释器——即Ruby语言的官方C语言实现——的内部工作原理。为了充分理解本书内容,读者需要具备扎实的C语言和Ruby语言知识。本书不仅涵盖了Ruby语言的...
Ruby Hacking Guide是一本探讨C Ruby实现的书,这次发布的部分包括对全书的介绍和本书的第一部分。第一部分的内容包括对Ruby语言一个概要介绍和对Ruby对象模型的讲解。从我个人阅读的感觉来看,第一章对于Ruby语言的...
《Ruby Hacking Guide》是一本深受Ruby爱好者喜爱的中文教程,它主要面向已经对Ruby有基本了解的读者,旨在深入挖掘Ruby语言的内部机制,帮助读者成为Ruby编程的高手。这本书详细介绍了Ruby语言的核心概念、语法特性...
通过阅读《Ruby Hacking Guide》,无论是Ruby初学者还是经验丰富的开发者,都能提升自己在Web安全领域的知识和技能,更好地保护自己的应用程序免受潜在威胁。同时,也能为那些对Web安全充满好奇的黑客提供一个合法且...
Hacking_ A 101 Hacking Guide,hack参考书,值的一看。
Web Hacking 101: How to Make Money Hacking Ethically By 作者: Peter Yaworski Pub Date: 2018 ISBN: n/a Pages: 255 Language: English Format: PDF Size: 10 Mb With a Foreword written by HackerOne Co-...
本书籍虽然名为“不可靠”,但实际上包含了丰富的实践经验和技术细节,是内核开发者和研究人员的重要参考资料之一。 #### 内容概览 - **第1章:介绍** - 介绍本书的目的和适用对象。 - **第2章:参与者** - 描述了...
### Unreliable Guide to Hacking the Linux Kernel:关键知识点概览 #### 1. 引言 本文档《Unreliable Guide To Hacking The Linux Kernel》由Rusty Russell撰写,旨在为有经验的C程序员提供一份Linux内核开发的...
《Hacking Electronics: An Illustrated DIY Guide for Makers and Hobbyists》是由Simon Monk所著,他是一位在英国Preston出生的博士,拥有控制论和计算机科学学位以及软件工程的博士学位。Monk博士在成为全职作家...
Learn the basics of ethical hacking and gain insights into the logic, algorithms, and syntax of Python. This book will set you up with a foundation that will help you understand the advanced concepts ...
iOS逆向手册详细介绍了iOS应用的黑客测试指南,涵盖了从设备获取、越狱、安装软件、生成和安装iOS应用二进制文件、理解iOS应用包结构、编译源代码到测试、iOS安全模型、文件系统探索、应用数据加密和保护等多个方面...
Guide to Hacking
Hacking: The Art of Exploitation explains things that every real hacker should know. Table of Contents Hacking—The Art of Exploitation Preface Chapter 1 - 0x100—Introduction Chapter 2 - 0x...
Chapter 1: Preparation For Hacking Chapter 2: Python Basics Chapter 3: Writing Python Programs Chapter 5: Operators and Expressions Chapter 6: Functions and Modules Chapter 7: Setting Up for Hacking ...