Tag搜索结果
|
Tag:向下走
模块中的类方法 2008-09-02 09:38 Tag: 向下走 Ruby Blog: 梦想风暴 作为Ruby程序员的你正在编写一个权限管理的模块,受到DSL风潮的影响,你希望用户这样使用它: class User include Permission grant :operation, Role::Admin end 这样的话,意味着grant是一个类方法,于是,按照惯性思路... Hello, ASM——代码生成 2006-12-10 16:59 Tag: 向下走 ASM Blog: 梦想风暴 这里要说的ASM,并不是指汇编语言,而是一个操作Java bytecode的框架。对于Java平台而言,bytecode便是它的“汇编语言”,所以,ASM这个名字倒也算是实至名归。ASM本身很强大,有不少软件和框架选择它作为底层的实现,比如cglib。在这篇blog中,主要来关注 Javac背后的故事——创建对象 2007-06-30 17:29 Tag: Java 向下走 ASM Blog: 梦想风暴 要让Java这个面向“对象”的世界正常运作,创建对象就是一项不可或缺的操作。 public class NewMain { public static void main(String[] args) { &... ID和Symbol(二) 2007-05-22 18:43 Tag: 向下走 Ruby XRuby Blog: 梦想风暴 从抽象的角度来说,C和Java相比有很多不尽如人意的地方,它的数据和方法不能像Java那样封装在一起。但是,某些地方它的抽象可以做得比Java更好,比如typedef。如果我们要面对的是一个复杂类型,Java的优势尽显无疑,但是如果我们面对的是一个简单的类型呢?比如,只是一个long类型。我们这里要讨论的ID和Symbol就面临着这种问题。 之前,我们已经见过... 生成方法的Wrapper 2007-07-08 23:35 Tag: 向下走 XRuby Blog: 梦想风暴 在《管窥Ruby——方法定义》中,我们曾经讨论过在Java中实现方法定义时,因为Java语言的限制,我们不得不为方法加上了一个Wrapper,让它可以满足接口定义的需要。事实上,XRuby一直就是这么做的,通常Wrapper放在com.xruby.runtime.builtin这个包中,而诸如Array、Hash、String之类的具体实现放在com.xru... 编译与解释 2007-10-10 14:03 Tag: 向下走 Blog: 梦想风暴 如果我们想将程序设计语言编写的源代码运行起来,通常情况下,我们有两条路可以走:解释和编译。 计算机能够认识的只是01串,所以,我们编写的源代码要想真正启到应有的作用,必须经过转换,转换成一种可执行的格式,然后,由专门的执行引擎将它运行。 解释,通常是将源代码解析为一个中间形式(比如抽象语法树,AST),然后,经由一个软件的执行引擎执行这个... 用Ruby编写builtin 2007-05-23 19:16 Tag: 向下走 Ruby XRuby Blog: 梦想风暴 或许你已经知道了,XRuby在用Ruby编写builtin。 XRuby很早就开始用Ruby编写builtin,甚至在我加入XRuby的时候就是这个样子了。在这个问题上,比XRuby走得更远的是rubinius,这个项目中用Ruby所写的builtin的比例比XRuby要大得多,事实上,XRuby从中借鉴了不少东西。 其实,我对用Ruby... 管窥Ruby——包含模块 2007-01-15 23:13 Tag: 向下走 Ruby Blog: 梦想风暴 在《管窥Ruby——类层次结构》中,我们已经见识过Ruby是如何实现包含一个模块的,不过,那里的侧重点不同,我们忽略了很多东西。 让我们回顾一下那段代码: void rb_include_module(klass, module) VALUE klass, module; 管窥Ruby——类层次结构 2006-10-30 19:45 Tag: 向下走 Ruby Blog: 梦想风暴 关于一个RClass结构,我已经写了几篇blog来讨论其中的内容,没办法,谁让Ruby是一种面向对象的程序设计语言呢!类是核心的概念之一,而且很多看似魔术的东西,就是靠这些基础的东西支撑起来的。前面的讨论,我们已经见识过方法和 管窥Ruby——类的变量(更新版) 2007-09-19 09:13 Tag: 向下走 Ruby Blog: 梦想风暴 《管窥Ruby——类的变量》写在去年,写成之后便更新了一次,因为最初的描述存在一些偏差。即便如此,jxb8901依然指出了其中的一些不足。最近,dennis-zane再次提出了这个问题。回过头来仔细品味,确实有些地方写得不是很到位,索性把它重新写过。 管窥Ruby——类的变量 ... 管窥Ruby——方法缓存 2007-01-04 23:51 Tag: 向下走 Ruby Blog: 梦想风暴 Charles Oliver Nutter,JRuby的开发者,最近一直致力于解决JRuby臭名昭著的性能问题,在他的一篇blog中,他谈到了动态调用的问题: Making Dynamic Invocation Fast: An Idea? 谈到 用Annotation标记Ruby方法 2007-07-30 20:23 Tag: 向下走 XRuby Blog: 梦想风暴 JRuby最近在讨论是否要支持Java 5。 JRuby邮件列表的讨论 http://www.nabble.com/Moving-to-Java-5--tf4131923.html InfoQ报道 Javac背后的故事——空类 2007-06-18 23:35 Tag: Java 向下走 ASM Blog: 梦想风暴 程序员最熟悉的是源代码,但是要让程序真正的发挥功效,少不了编译器的帮助。javac的作用就是将Java代码编译为JVM指令。由于Java语言和JVM同出一门,所以,稍微熟悉一下,我们便不难发现,二者几乎是直接对应的。当然,为了简化代码的编写,javac除了直接翻译之外,还暗地里帮我们做了不少工作,我们从最简单的情况看起。 public class Test {... 一个多核程序的优化方法小结 2007-04-04 20:43 Tag: 向下走 Blog: 梦想风暴 最近一个月时间,周围的所有人在做的是一件事,优化。让一个物理模拟的程序尽可能快的运行在多核平台上。一个月前,知道要做什么,但心里完全没有 底,一个月后,坐在计算机前看着程序运行的录像时,心里还是挺有成就感的。当然,优化是一条无止境的路,即便程序做到目前的状态依然有很大的提升空间,这 里只是简单总结一下之前用到的一些方法。 硬件 CPU 说 过 优化XRuby的方法调用 2007-06-12 17:50 Tag: 向下走 Ruby XRuby Blog: 梦想风暴 方法调用是一种在Ruby运行过程中常见的不能再常见的行为了,据说即便是一个空的Rails应用,也有十万次以上的方法调用。所以,对于XRuby来说,方法调用的性能优劣会对Ruby程序运行产生很重要的影响。方法调用分为方法查找和执行两个部分,其中,方法查找的主要优化手段就是方法缓存,这个问题我已经在《管窥Ruby——方法缓存》解释过了。这里来看看XRuby中对方... 等在循环内 2007-03-06 21:33 Tag: 向下走 wait 多线程 Blog: 梦想风暴 《Effective Java》的第50个条款,不要在循环外调用wait。其中告诉我们,wait的标准用法如下: synchronized (obj) { while (<condition does not hold>) &nbs... ID和Symbol(一) 2007-05-21 21:17 Tag: 向下走 Ruby Blog: 梦想风暴 ID和Symbol是Ruby中同字符串相关的两个东西,他们的存在是为了一个共同的目的:替代字符串。因为字符串的比较通常代价不菲,以ID和Symbol代替字符串可以提高字符串比较的性能,所以,用到字符串比较的地方都可以选择用ID或是Symbol作为替代品,比如,做Hash表的键值。不同的是,ID用在C层次,而Symbol用在Ruby层次。 下面是ID的定义:... 添加方法的小魔术 2007-05-14 22:58 Tag: 向下走 Ruby Blog: 梦想风暴 Ruby中有很多钩子,可以用来监控系统中的各种事件,比如,添加一个新的方法时,会调用类的method_added方法,下面是一段示例代码: class A def A.method_added symbol p symbol... 整数对象 2006-11-27 23:54 Tag: 向下走 Blog: 梦想风暴 整数,对于程序员来说,再熟悉不过了。在那个C/C++年代,很少有人认为在程序中使用整数是个负担。 当Java走入人们的生活,“Everything is an Object”成了街知巷闻的口号。为了让这个口号叫得更加彻底,于是,在Java里,有一个类对应着整数,这样,每个整数便被对应为一个对象。后来,为了更方便的在二者之间进行转换,C#把autoboxing和unboxing... Hello, Java Compiler API 2006-12-12 22:06 Tag: Java 向下走 Blog: 梦想风暴 Java 6发布了,想必很多人还不没有来得及玩熟Java 5,很多人还在与1.4打交道,稳定归稳定,发展是不能停止的。Java 6并不像Java 5那样在语法上下了很大的功夫,更多的力气用在丰富API上。其中有一项是我比较感兴趣的,就是Compiler API,也就是JDK为我们提供的访问Java编译器的接口。下面便是一个使用Compiler API编译Java程序的例子。 有趣的属性赋值 2007-04-11 21:20 Tag: 向下走 Ruby Blog: 梦想风暴 beanworms问了一个有趣的问题,下面这段Ruby代码的输出是什么?为什么? class A def m=(value) @m = value ... Hello, Java Compiler API 2006-12-12 22:06 Tag: Java 向下走 Blog: 梦想风暴 Java 6发 布了,想必很多人还不没有来得及玩熟Java 5,很多人还在与1.4打交道,稳定归稳定,发展是不能停止的。Java 6并不像Java 5那样在语法上下了很大的功夫,更多的力气用在丰富API上。其中有一项是我比较感兴趣的,就是Compiler API,也就是JDK为我们提供的访问Java编译器的接口。下面便是一个使用Compiler API编译Java程序的例子。... 管窥Ruby——类的变量 2006-10-17 22:22 Tag: 向下走 Ruby Blog: 梦想风暴 UPDATE 这篇blog的叙述存在一些偏差,所以,又重新写过:《管窥Ruby——类的变量(更新版)》 变量和方法是面向对象难以割舍的两个重要组成部分。在《 栈的增长方向 2007-03-23 22:53 Tag: 向下走 栈 Blog: 梦想风暴 如何判断栈的增长方向? 对于一个用惯了i386系列机器的人来说,这似乎是一个无聊的问题,因为栈就是从高地址向低地址增长。不过,显然这不是这个问题的目的,既然把这个问题拿出来,问的就不只是i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。 在一个物质极大丰富的年代,除非无路可退,否则我们坚决不会使用汇编去解决问题,而对于这种有系... 锁住数据 2007-02-08 22:52 Tag: 向下走 多线程 Blog: 梦想风暴 这几天在写多线程程序。 有了一定的开发经验之后,写程序主要是查找API用法的过程。对于多线程来说,主要就是线程创建、同步互斥这些基本API的用法。互斥主要是用锁,我查了一下用Mutex做锁的方法,基本上是看一下用法就知道怎么用了。不过,写代码的时候,突然发现一个很别扭的地方,我不知道自己的锁该锁在哪里了。想来想去,原来是我找到那几篇教程的误导。 通常多线程教程中,给人的... 扩展Ruby 2006-09-24 23:04 Tag: 向下走 Ruby Blog: 梦想风暴 这个例子来自《Programming Ruby》(第二版)的第21章《Extending Ruby》,实现的功能类似于下面这段Ruby代码: class MyTest def initialize @arr = Array.new end def add(obj) @arr.push(obj)... 管窥Ruby——方法定义 2006-11-06 21:53 Tag: 向下走 Ruby Blog: 梦想风暴 在C/C++中,函数虽然不像functional语言中一样,拥有first class的地位,但函数指针的存在,还是让它在一些表达上显得很简洁。在C层次上,定义一个Ruby方法的API是这样的: void rb_define_method( VALUE classmod, char *name, VALUE(*func)(), int argc ) 它为类或模块(cla... 管窥Ruby——Allocator 2006-11-02 21:35 Tag: 向下走 Ruby Blog: 梦想风暴 Allocator,熟悉编程的人一看到这个名字,自然就会把它与内存分配联系起来,再近一步,它通常是与对象初始化联系到一起。在《对象的生命》中,我讨论过对象初始化的过程,将它分为“分配内存”和“初始化对象”两个动作,Allocator主要就是承担分配内存的工作。 如果以Java之类可以合分配与初始化于一体的语言来实现Ruby 体验YARV 2007-02-02 23:21 Tag: 向下走 Ruby YARV Blog: 梦想风暴 YARV,Yet Another Ruby VM,又一个Ruby VM。 其实,我觉得它的名字算不上准确,因为原来Ruby算不上拥有VM。当然,按照作者的本意,这个名字不会长久的存在下去,因为项目如果成功,它就会成为Ruby的一部分,不成功的话,没人会记住它。事实上,它正一步步走向成功,因为现在它已经被合并到Ruby的主干代码中。 我不想苦苦等待YARV随着发行版来到我... 管窥Ruby——方法调用 2006-11-21 23:56 Tag: 向下走 Ruby Blog: 梦想风暴 在进入正题之前,先声明一下,这里讨论的是方法调用的结构,而非方法执行的过程。 我一直觉得了解Ruby内部结构的一个很好的入口点是Ruby的API,讨论方法定义的时候,我们便是从Ruby API起步。同样,这次先来看看方法调用的Ruby API。在方法调用这个问题上,Ruby显得特别的大方,一口气提供了四个API: |