为四川人民祈祷! www.onefoundation.cn
logo of kjam.org

OO vs NS

面向对象技术很早就已经出现了,在过去的十多年中被人认识,熟知并追捧⋯⋯在那之后,如果某种语言不声称自己是面向对象的,必然遭到大众的遗忘

面向对象技术是重要的软件技术之一,但是说实话,也不是那么神圣。大多数的时候,我们几乎无需使用它

很多人认为写类就是面向对象了,在这里我必须指出,很多人写了无数个class以后依然没有使用过面向对象技术,其实他在使用的叫做命名空间(namespace)。没错,在C++等很多种语言中,都有这样的概念存在,C和PHP没有。许多人定义类实际上只是为了使用命名空间。

为什么,因为问题远没有复杂到需要OOP的程度。我们没有使用继承,没有抽象类,没有虚函数。我们不需要设计模式,我们要做的仅仅是做在一台电脑面前,默默的敲下代码,完成一件事情,一个程序只需要main()一个函数。

是的,最简单的情况正如上面所说的,当退出main()的时候,函数中的所有数据都被清除了。问题再复杂一点的时候,全局变量就是我们最简单的选择。但是事实远不像我们所想的那么简单,这也就是为什么世俗的眼光如此仇视全局变量的原因。

很明显,在程序简单的情况下,这样完全没有问题。一旦你的程序需要为别的程序服务,所有人必须保证自己的全局变量不会被别人使用,要不你可以在变量前面加上复杂的前缀,要不我们开始在迫于世俗的压力下用类来封装自己的代码。

我相信,迫于这样的压力做这样的事情的朋友都不会承认自己在使用OO技术。还是同样的原因,问题根本没有那么复杂。他们一定相信函数就可以解决这类问题,只是迫于世俗的压力去把代码封装成类。他们使用的技术实际上就是命名空间

我们很容易发现一个观点,似乎全局对象比较容易被别人接受,然而全局变量却被人所不齿。崇尚设计模式的人,一定空想着一个低耦合性的世界。然而,理想世界很遥远,或许真的有这样的完美世界,现在,我们依然要忍受着现实的缺憾⋯⋯哈哈,扯远了

我想说的是,就算你是一个OOP的坚决反对者,或者标榜自己对lambda是如何,那也不妨碍自己定义几个class

就像zen of python中所说的,命名空间是个好东西,让我们用吧
comments: 1964  
by kernel1983

Get Ready for RRobots

说ruby还年轻吧!一点也不错

为了玩一个RRobots的ruby游戏,你得忙活上一整天(对一个有开源经验的小伙子,要是换了我老爸级别的,花上一个月不知道玩的上不)

在windows下面使用ruby的one-click installer都不能解决问题,安装完成以后,tk是不能用的,唯一的解决方法是去ActiveState下载一个ActiveTcl完全安装,问题就解决了⋯⋯当然有人告诉你很快就解决了,没有人提示的话,就自己摸索吧!

Python的安装包应该是把tk包括在内了,不知道ruby的one-click installer是谁做的?

在Mac下面想跑起来就更复杂了,Pre-installed的1.8.2因为我无意中删除了/usr/X11R6目录就罢工了?又不是Linux要那玩意儿做什么!升级一下版本,用下面的命令编译
./configure --with-tcllib=tcl8.4 --with-tklib=tk8.4
 --enable-mac-tcltk-framework --enable-pthread
sudo make install

OK,我们可以玩上面的游戏了。

顺便介绍一下,RRobots是个机器人项目,tank大战,不过这些战争武器的行为可以通过编程来决定。我们自己写程序决定策略。对于程序员来说绝对是个有挑战的游戏!
comments: 2  
by kernel1983

Zope Plone 不要打架

经过番老大的指点,我知道了这样一个事实
Zope 2.9 可以安装 Plone2.5 Python必须是2.4 Zope 2.10 需要Plone 3 使用Python 2.5似乎没有什么问题
Zope 3 要和什么东西一起玩,现在还不是很清楚,不过我们可以自己在上面写程序玩
comments: 0 | tags: plone   
by kernel1983

无聊的速度比较

本质上Python是written in C。
翻译需要时间,但是不仅仅是翻译浪费了时间
差异的原因很多,尤其需要注意的是,Python的内存使用与C的本来就有许多的不同之处

C语言直接的使用内存,而且相当随意。玩C语言的时间长一点的,基本上都知道点内存中那些乱七八糟的分配情况。

接着,就有人拿出一段经典的代码开始测试C语言有多快:
for(int i = 0 ; i<=10000 ; i++){}
妄图用计算执行时间这样的方法,来告诉其他的朋友们C语言是多么的快

哈哈,按照常规的想法,如果用Python来写话,那就是这样:
for i in range(10000):pass
事实上,这两段代码做的事情完全不一样,这样的比较完全没有意义。

首先,我们需要考虑的是内存使用情况,C语言使用的是一个4bytes的内存,而Python则使用了10000个Python自己的Int对象,每一个对象占用的内存大小都至少大于4bytes,需要不断的malloc⋯⋯

这样看来,程序速度的比较本身就对Python不公平,因为他们根本没有做同样的事。表示一个数字100,可以用阿拉伯数字100,也可以直接找100个实物,所花的时间当然是不一样的。

事实上,我们可以这样来稍稍修正比较的结果:
for(int i = 0 ; i<=10000 ; i++)free(malloc(sizeof(int)));
这样似乎对Python稍微公平一些!不过我猜,还是C语言快啦,否则的话,为什么我们还需要C语言呢?所以说,根本就是无聊的比较,太无聊了
comments: 17  
by kernel1983

Jython Installion

知道故意排斥某些东西是不对的,于是我今天怀着忏悔的心情第二次跑到 www.jython.org 并下载了jython_21.class

命令行下:
java jython_21.class
出错,难道这次和上次一样,无功而返?那是在是太对不起自己了

忽然灵光一现
java jython_21
一路回车安装好了jython

低级错误,post出来活跃气氛
PS: CPython玩多了,IronPython都1.1了,不加油不行了
comments: 12  
by kernel1983
1...13141516171819