字典(或者叫哈希表、关联数组..)与动态语言的渊源可谓极深。动态语言之所以动态,归根结底是因为把对变量的求值放在了运行时完成而非静态语言的编译时确定。动态语言程序中众多的不同层次的名字空间(或者说作用范围)其实就是一个个的字典,变量名为 key,对象为 value。 而对变量求值的过程就是对所在名字空间查找的过程,根据变量名,找出相应的对象,有时候在局部名字空间中没找到,还可能会自动跑到外部名字空间或是全局名字空间去找。 对于支持 OO 的动态语言,对对象的实现其实也都是字典,属性名为 key,属性值为 value ,属性的获取也就变成了对字典的查找。有时子类中找不到还会到父类中去找,这也就是动态语言对继承的实现。 javascript 的 prototype 可能是动态语言实现继承最直接最简洁的方式了。python 为 OO 加了几个新语法,新概念,还有对多重继承的支持,不过本质上其实还差不多。 字典的核心地位在 lua、javascript 中表现得最为明显,在 javascript 中字典和 object 其实就是同义词;在 python 中其实也不难找到字典的身影:locals()、globals()、还有(几乎)所有对象都有的 __dict__ 属性;ruby 这样的语言中这一点会藏得深一些。 【以下为个人感受】 字典是动态语言的灵魂,要使用好动态语言首先肯定是要认清这一点的,不过在实际软件开发中像 lua 一样直面字典编程未免太简陋了一些,javascript 稍微好点,python 完美,而 ruby 过了。
Profile
- 黄毅
- 深圳, 广州, China
- I Love Python !
Recent Posts
Recent Comments
Tags
- 设计模式 (1)
- ajax (3)
- allegra (1)
- cherrypy (1)
- compiler (1)
- continuation (2)
- descriptor (1)
- django (17)
- dotnet (1)
- framework (2)
- functional (1)
- genshi (1)
- gtk (1)
- haskell (1)
- inkscape (1)
- IronPython (2)
- javascript (1)
- libevent (1)
- mako (1)
- metaclass (4)
- mochikit (1)
- network (1)
- newforms (1)
- orm (1)
- others (18)
- paste (1)
- PEAK (1)
- pickle (1)
- ply (1)
- pocoo (1)
- pypy (3)
- python (38)
- python3000 (3)
- rails (2)
- REST (3)
- sqlalchemy (3)
- stackless (3)
- turbogears (1)
- tutorial (1)
- vim (1)
- web (11)
- wsgi (1)
1 评论:
我傾向于 JavaScript 的設計, Python 過了, Ruby 和 Lua 不參加對比。
发表评论