饮马流花河

倚楼听风雨,但看江湖路

吹响反击Ruby On Rails的号角

  最近Ruby On Rails(ROR)的火热程度真的让人很惊讶,九月份的《程序员》也用了大量的篇幅来介绍这个新兴的Web Application快速开发框架。对新鲜东西向来都很好奇的我却对ROR提不起兴趣,也许是因为Ruby由日本人创造的缘故吧,我对Ruby一直有着抗拒感,尽管ROR是丹麦的小伙子David开发的。
        抗拒归抗拒,ROR的成功着实是一种促使我去思考的动力。最简单的,Ruby与Python有着无比紧密的联系,那么在Python下有没有类似
ROR的开发框架呢?答案是有,而且还非常的多!大家可以从两个site中找到很多很多的选择:WebProgrammingWeb Development with Python。在这让人眼花缭乱的框架中,Zope是最为有名的,但是利用它来做开发却不见得高效,而且Zope所充当的角色更像是一个Application Server,与ROR所关注的范畴并不是很吻合;接下来就是CherryPyKarrigellTurboGearsDjango了。对于CherryPy的了解其实是来源于TurboGears,因为TurboGears是Python世界中直接与ROR对话的框架,它是ROR的竞争者,因此最早进入了我的视野,大家可以看到ROR与TurboGears同时出现在了这条新闻中:TurboGears: Python on Rails? 。它最大的特点是并没有reinvent the wheel,而是充分利用了现有的优秀框架,提供了从前端至后端的解决方案,而CherryPy正是TurboGears的组成部分之一。Django也是ROR的竞争者,不过它还处于beta阶段,官方版本至今还没有发布,但是它已经受到了广泛重视,而国内的Python大牛limodou更看好Django,认为它会比TurboGears做得更好。推荐Karrigell也是受到了limodou的影响,他对Karrigell也是宠爱有加,大家可以浏览他的blog,里面有一篇文章说明了他选择Karrigell的理由。
        说了半天,面对那么多的选择,大家是不是有些厌烦了呢?是的,我一开始见到这样的一个列表的时候,我也有点蒙了。我开始明白ROR的
成功或许不仅因为它本身的强大,而是众人拾柴火焰高啊!Web Programming Framework在Python世界里所面临的困窘丝毫不亚于纷扰的J2EE世界。由于对这些框架了解还不多,我无法为大家作出Professional的推荐,只能够说说自己的想法了。
        在这众多框架中,我真正尝试过的只有CherryPy,它真的很小巧,而功能一点都不差。小小一百多K的体积竟然还包含了一个Http S
erver,所完成的应用程序可以放到一个.py文件中,部署起来会非常的方便,如果仅仅是开发一个小型网站,CherryPy是一个不错的选择。大家可以从IBM网站上的CherryPy for CGI programmers这篇文章中获得一些对CherryPy的感性认识。从中你会很惊喜的发现,代码量竟然是如此之少!由于CherryPy简单而不失强大,更重要的,它是TurboGears的重要组成部分,因此从CherryPy开始了解Python的Web Programming确实可以作为千里之行的第一步啊!
        在利用这些框架来开发Web应用程序,你会发现Template是一个十分重要概念。Template就是MVC中的View一样,定义了应用程序的表现
层。因此要开发一个实用的Web应用程序,成熟易用的Template系统是必不可少的,在TurboGears中,Kid就是这样的一个Template System。同时,Karrigell框架中Template系统对中文的支持是最好的,更加重要的是你可以从limodou的blog上找到丰富的参考资料。因此,你需要做更规模稍大一点的网站的时候,不妨考虑一下Karrigell了。BTW:limodou兄是一个热心的人,呵呵~~~
        以上四个列举出来的框架就差Django还没有细说了,对于它我还真的不知道该说些什么了,大家还是看看Python wiki上对它的介绍吧。而且
,limodou兄也是对它倍加推崇的。最后不得不提一下一种现在还没有出现也许在不久的将来会出现的Web开发方式——利用IronPython来开发ASP.NET!这种方式会在什么时候出现,它的影响将会有多大我们不得而知。但是这确实值得期待,我相信这样的开发方式会提高ASP.NET的开发效率。
        以前学习Python还是停留在一个纯粹的学习阶段,而现在有了ROR的刺激,我想对于Python的关注也将转移到Web Programming上了。我相信这样的一个学习实践过程是很有价值的,毕竟我学习.NET,学习J2EE,学习Portal,都是围绕着Web Programming。偶是一个花心的人,喜欢去了解很多的东西,虽然都不深刻。其实,了解那么多就是为了能够拓宽自己的思维,从不同的开发方式中为各种问题寻求更好的solution,也就是T型发展的一个面了,至于某一点的深入就放到以后再说吧!吾好读书,不求甚解也,呵呵~~~
        让我们都来关注Python在Web Programming的发展吧!欢迎各位与我一起讨论Web Programming with Python!

        [后记] 这只是一篇介绍性的文字,以“吹响反击Ruby On Rails的号角”似乎有点名不副其实了。虽然我在文中提到我对Ruby有些抗拒,但是我也深信对于技术不该有偏见。因此,我也会关注ROR的发展,毕竟它获得了广大开发人员的认可,忽视它可是不明智的!当然,我还是希望Python能够在这场竞争中迎头赶上,最终胜出。:)

Feedback

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 12:12 by idior
---
对新鲜东西向来都很好奇的我却对ROR提不起兴趣,也许是因为Ruby由日本人创造的缘故吧,我对Ruby一直有着抗拒感,尽管ROR是丹麦的小伙子David开发的。
---
haha same to me.
对ruby一点兴趣都没有,看了ror就不爽。python我喜欢。

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 12:23 by 寒枫天伤
俺与你一样,就是觉得Rudy是小日本的玩意,不喜欢

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 14:05 by 分享书籍——freeagle
因为发明人是日本人而不喜欢,似乎有些狭隘。美国鬼子也跟我们打过仗,干嘛还用美国人发明的计算机?

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 14:16 by FantasySoft
因为师夷长计以制夷,所以不喜欢决不代表我会贬低它,而且我还会去关注它,毕竟技术是不应该有偏见的。可惜我不是圣人,我还是或多或少有着偏见~~

我使用计算机是因为计算机中的二进制思想源于中国的周易,呵呵~~~


# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 14:32 by linkin
CASTLE就是.Net里的ROR设计思想的实现,既然讨论ROR为什么没有提到CASTLE?

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 14:53 by FantasySoft
To linkin: 偶比较偏心,只是介绍Python世界里的竞争者,毕竟Ruby与Python更有渊源。 要谢谢你告诉我有这样一个新鲜的东西,不过新鲜应该是只对我而言的了。:)

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 16:21 by 蛙蛙池塘
还真有人玩ruby,python,lisp,smalltalk这些东西呀,

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 16:41 by FantasySoft
To 蛙蛙池塘: 从应用广泛程度而言,lisp和smalltalk乃至Ruby根本不能与Python同日而语。事实上,玩Python在国内还是比较普遍的。

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 20:31 by progame
ror的命名约定 代码生成等技术我觉得都非常不错 至于ruby本身 我兴趣并不大
楼主反击是想找一个python下的类似ror框架的话 那岂不是成了一种ror的肯定了?

另外我觉得稍复杂点的应用的话,ror并没有多少快速而言,也许是我对ror的了解不深吧

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 20:54 by WWW_1
支持Pyhon,呵呵,我也是讨厌ruby.
第一次听说ruby在矩阵计算上很有特点,还看了一下.
可后来,因为同样的原因,呵呵不再关心了.

关于ROR
在JE上有人说过一句"这是关于 coding by convention 和 聪明的缺省行为"
--
这更多的是和j2ee中的现有框架比较.
如果说在ms阵营,Asp.net在vs的支持下,已经很快速了。
--------------
python目前国内的WEB应用我看还是zope/plone为主
其他就是在业务脚本上。
python其实还是更多的在程序员中流行,而没有进入主流商业市场啊.

BTW:limodou是个好人,国内有python的地方,就有他。

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-14 21:58 by FantasySoft
To Progame:很有见地的Feedback哦! 其实,RoR已经得到了相当多程序员的肯定了,至于我自己肯定与否是没有代表性的。

我想RoR之所以能够得到肯定,其开发效率之高是获得首肯的。因此我就想着在Python世界中是否也有这样高效的开发框架,从我现在了解到情况来看,Python在这个方面也不弱的,只是没有集中推广而已,因为框架太多了。Sigh~~~

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-15 00:36 by 木野狐
不喜欢 Ruby 的原因也是因为 Japanese...
我学了三天 Python 了,语法基本弄明白了,现在开始学 wxPython, 庆祝一下,hoho~

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-15 11:26 by Teddy's Knowledge Base
尽管理智告诉我主观排斥任何一种技术都是不对的,但是,同样因为是小日本的东西,所以,尽管听了无数的说ruby的赞誉,还是提不起精神去看:)要不怎么说“民族仇恨能支撑起为革命献身的信念”呢~~欣喜地看到中国的现代有志青年对日本大多厌恶之极,不过还是要化作超过小日本的动力才好~~

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-15 15:37 by idior
Teddy好像你多老似的 ;

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-17 13:27 by ppgo
技术无国界,我喜欢python

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-17 21:38 by n/a
一帮狭隘、偏激、肤浅的家伙。看看你的周围,你用到、看的、坐的、戴的,都是源自哪里?

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-17 21:50 by FantasySoft
To n/a:每个人都可以拥有自己的见解,你在发表自己的看法的时候,也请尊重别人的看法!

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-18 09:23 by JEK
楼主是强人啊,最好不要用键盘,用算盘的好。支持你。哈哈

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-18 09:33 by mulder
最成熟的 Web 框架还是在 Java 这边,我虽然喜欢 ROR (为此还专门写了篇文章 http://www.5dblog.com/vip/mulder/index.asp?id=91925 ),但是我认为它的易用性很快会被其他成熟Java Web 框架所采用, 而且 ROR 和其他脚本语言的 WEB 框架是否能在性能上达到企业要求,还未有很成功的案例。 我和大家相反,我非常喜欢 Ruby ,也很看好这种脚本语言,因为它更加 OO , 它的很多特性,比如 Iterator ,Closure 使得写起脚本非常舒服。. 工作中采用它编写各种 Code generator 来生成文件真是很容易的事情

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-18 10:18 by 疾风
都有哪些地方介绍CASTLE阿,呵呵。
BTW:大家觉得ROR的生产率很高吗?我看了一些介绍ROR的例子和文章,怎么觉得其中只是内置了一些应用的模版而已阿。而且,感觉有VS支持的Asp.net 2.0其生产力并不比ROR低呀

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-18 10:49 by FantasySoft
To JEK: 偶算盘用得不见得比键盘差,哈哈~~~

To mulder: Ruby确实有很多很好的特性,譬如说更OO,开发更加高效等等。其实我在选择一门动态脚本语言的时候,Ruby、Python和VBScript都是我的候选项,最终我选择了Python。毕竟有Raymond的推荐,而且Python有更广泛的应用范围。同时Python有一大特性:Python能够与C无缝集成,现在IronPython又能够与C#集成。哈哈~~~

说实在的,技术真的不应该有国界,有偏见。 偶对于Ruby也只是有点抗拒而已,它的优点还是要学习的。

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-20 13:35 by 沈崴
用过 Python 后 Ruby 的语法适应起来会变得极为困难,美学上的不兼容估计会成为最大障碍。

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-25 08:54 by 豬豬多多
市場決定一切。 python比php美,又怎樣呢?你要知道ROR裏有一半是從php跳過來的,想不熱都不行。另外,就算是turbogears和django的作者也沒說過什麽要“吹响反击Ruby On Rails的号角”之類的話,不過就是各個community之間取長補短相互學習罷了。

(英文系統下輸入總是繁體,見諒)

# re: 吹响反击Ruby On Rails的号角  回复   

2005-10-25 09:07 by FantasySoft
To 豬豬多多: 也许这样的标题可以吸引到更多的眼球吧,呵呵~~~ 至于turbogears和django的作者有没有说过这样的话并不重要,不管是隐性的竞争还是公开的叫板,只要是一种良性的竞争氛围,对于我们开发者而言,有的只会是好处。

# re: 吹响反击Ruby On Rails的号角  回复   

2005-11-05 14:14 by Zoom.Quiet
http://wiki.woodpecker.org.cn/moin/PyWebAppFrameworks
汇集了一些大家共同体验的 PyWeb 开发平台,一起来完善吧!

# re: 吹响反击Ruby On Rails的号角  回复   

2005-11-07 10:57 by zhaokun
支持 python,坚决不用小日本的东西!
首先在精神上、在气势上就不能输给小日本,期待着我们中国自己的东西,大家一起努力。

# re: 吹响反击Ruby On Rails的号角  回复   

2005-11-20 20:34 by 自由梦想
科学无国界。怎么在这里也有FQ

# re: 吹响反击Ruby On Rails的号角  回复   

2006-01-24 16:10 by janhail
我决定造一个脚本,在这个脚本的基础上希望有人能开发出和小日本竞争的东西出来

# re: 吹响反击Ruby On Rails的号角  回复   

2006-03-05 19:44 by Doro
@janhail
如果你是说真的,建议尽量找点新意出来吧,有创新才有进步。

# re: 吹响反击Ruby On Rails的号角  回复   

2006-03-16 18:29 by simpleboy
我对比过两种语言,感觉还是Python比较好用!Ruby的语言形式并不简洁!台湾有个中蟒大杂院,有篇文章描述了两种语言的特点,但是我不太同意其中的一点,就是他们认为ruby比Python 功能强大!我认为这么说真是很好笑,如果想开发功能强大或者规模宏大的项目,用C++/Java就可以了,而且这两种语言的语法形式是最简洁的(个人观点),ruby的出现岂不是多余,我认为ruby vs python 就像 C# vs Java,ruby & C# 本身对于程序语言的进步并没有实质上的改进,更多的是商业竞争和民族情绪的产物。ruby之所以流行,是因为日本人想在IT领域显示其影响力的产物罢了,我也不同意中蟒的做法--将python中文化,使用中文写程序!我不是说中文不好,而是目前的计算机体系不适合中文程序,程序性能会损失很大!我喜欢中文的文学诗词,但是不想她被编译成二进制代码执行掉!(哈哈,有些感性!)
目前,我用python来处理日常数据和开发一些小工具,我认为python在提高程序员的工作效率方面是很好的工具。
商业程序设计最好选择C++或者JAVA;
系统相关的程序设计最好选择C/C++;
而如果想体验或者享受程序设计带来的乐趣和自由,python---最好的选择!

# re: 吹响反击Ruby On Rails的号角  回复   

2006-03-24 23:41 by tongshou@gmail.com
我用了多年的业余时间设计出一个脚本语言(姑且称为Cx吧),其动态程度应该超过现在所有语言,变量、函数、类型、方法(method)和属性等的名字,不仅可以用任意字符(当然包括中文),而且可以运算!Cx的程序结构简洁易读,它基本上使用C/C++程序结构,甚至支持指针,数据结构与C/C++相同、或者相近,因此与C/C++可以很好沟通,但是其编程过程要比C/C++简单很多,因为许多细节上核心程序会自动处理,内建自动垃圾回收机制(GC),不象JAVA、C#、LISP等语言,程序员无法控制、预知垃圾回收过程,Cx程序可以明确控制垃圾回收:数据宿主(变量)无效时,所属动态数据自动清除。包括文件句柄在内的各类句柄,也会在数据宿主(变量)无效时自动关闭。Cx的class定义支持多重继承,但是完全没有C/C++中多重继承的复杂性。支持系统级且支持MFC的多线程(对于脚本语言来说这是很不容易的,看看Ruby和PyTon)!程序可以在多线程下动态装载、或者构造。Lambda函数即可以作为独立函数运行,也可以成当前运行函数的一部分运行,有时候这两者会有微妙不同:比如含 return语句时。
Cx可以方便定义C/C++级的回调函数,直接用于C/C++,而且该回调函数可以是类(class)中的普通成员函数!因此可以非常方便地封装数据!
Cx可以直接调用电脑系统数以千计的Win32 API,也有通用ActiveX接口,非常容易调用COM构件,比如操作MS Excel:
xApp = CreateDispatch("Excel.Application");
xApp.Visible = TRUE;
xApp.Workbooks.Add();
xSheet = xApp.Sheets[1];
xSheet.Cells[1,1] = "Hello, my friends!";
.........

目前正在把VC中的MFC设计进Cx,让Cx中定义的class 可以直接继承MFC中的类。下面给的一个Demo就是定义一个继承于 MFC CFrameWnd 的class.

Cx语言用在 AutoCAD 二次开发非常成功。下面的例子就是用在AutoCAD里:定义一个AutoCAD命令Demo,运行该命令时,启动一个窗口,在窗口中显示电脑当前桌面图象。



/////////////////////////////////////////////////////////////////////////
#include "windows.h"
#package demo

/////////////////////////////////////////////////////////////////////////
public defun [C:Demo]() //AutoCAD 入口(命令)
{
var MyF;

MyF = new CMyForm;
MyF.Create(NULL, "Hello", WS_OVERLAPPEDWINDOW, NULL);
MyF.Loop();
}

/////////////////////////////////////////////////////////////////////////
class CMyForm : CFrameWnd
{
public:
sub Loop();

protected:
afx OnPaint ();
afx OnCreateClient(pcs, pcc);
afx OnClose ();
afx OnDestroy();

private:
int m_recycle =0;
};

/////////////////////////////////////////////////////////////////////////
defun CMyForm::Loop()
{
var msg = new MSG;


m_recycle = 1;
while (m_recycle) {
GetMessage(msg, NULL, 0, 0);
TranslateMessage(msg);
DispatchMessage(msg);
}
}

/////////////////////////////////////////////////////////////////////////
defun CMyForm::OnPaint()
{
var hdc;

hdc = BeginPaint(GetSafeHwnd());
api.user32.PaintDesktop (hdc);
}

/////////////////////////////////////////////////////////////////////////
defun CMyForm::OnCreateClient(pcs, pcc)
{
SetWindowText("MyDemo");
SetWindowPos(NULL, 80, 60, 800, 600, 0);
ShowWindow(SW_NORMAL);
UpdateWindow();
}

/////////////////////////////////////////////////////////////////////////
defun CMyForm::OnClose()
{
SendMessage(GetSafeHwnd(), WM_DESTROY, 0, 0);
return 0;
}

/////////////////////////////////////////////////////////////////////////
defun CMyForm::OnDestroy()
{
m_recycle = 0;
return 0;
}

/////////////////////////////////////////////////////////////////////////
#package <end>
/////////////////////////////////////////////////////////////////////////

# re: 吹响反击Ruby On Rails的号角  回复   

2006-03-26 15:35 by tongshou@gmail.com
下面给出的程序例子显示的窗口与上面的例子基本一样,只是这里显示的窗口是在线程里,每执行一个AutoCAD命令Demo, 就产生一个线程窗口:


/////////////////////////////////////////////////////////////////////////
#include "windows.h"

#package Demo

/////////////////////////////////////////////////////////////////////////
class CMyThread;
class CMyForm;


/////////////////////////////////////////////////////////////////////////
// define an AutoCAD Command: Demo
/////////////////////////////////////////////////////////////////////////
public defun [C:Demo]()
{
AfxBeginThread (&.CMyThread);
}


/////////////////////////////////////////////////////////////////////////
class CMyThread : CWinThread
{
protected:
afx InitInstance()
{
m_MyF = new CMyForm;
m_MyF.Create(NULL, "Thread[" + (++m_Count) + "]--Demo",
WS_OVERLAPPEDWINDOW, NULL);
return TRUE;
}

private:
CMyForm m_MyF=NULL;
static int m_Count=0;
};


/////////////////////////////////////////////////////////////////////////
class CMyForm : CFrameWnd
{
protected:
afx OnPaint ();
afx OnNcDestroy ();
afx OnCreateClient(pcs, pcc);
};


/////////////////////////////////////////////////////////////////////////
defun CMyForm::OnNcDestroy()
{
PostQuitMessage(0);
return 0;
}

/////////////////////////////////////////////////////////////////////////
defun CMyForm::OnCreateClient(pcs, pcc)
{
SetWindowPos(NULL, 80, 60, 800, 600, 0);
ShowWindow(SW_NORMAL);
UpdateWindow();
}

/////////////////////////////////////////////////////////////////////////
defun CMyForm::OnPaint()
{
var hdc;

hdc = BeginPaint(GetSafeHwnd());
api.user32.PaintDesktop (hdc);
}

/////////////////////////////////////////////////////////////////////////
#package <end>
/////////////////////////////////////////////////////////////////////////

# re: 吹响反击Ruby On Rails的号角  回复   

2006-03-26 17:26 by lx
天哪!就设计这样的脚本语言啊?!! 我看只有你自己用好啦,离脚本语言应有的简洁特性相差天远,还不如用C++得了。

# re: 吹响反击Ruby On Rails的号角  回复   

2006-03-27 00:34 by tongshou@gmail.com
to lx :
请不要太草率下定论。

虽然上述例子无法明显说明该语言的简洁性,但是可以显示其表达能力、与C/C++的亲近性。 任何脚本语言都有其 程序执行效率问题,虽然在很多时候执行效率不是大的问题, 但是有些时候仍然是个大问题,比如复杂界面的刷新,这个部分用C/C++函数等替换,问题就获得很好解决。与C/C++的亲近,该问题可以非常容易解决!也因为与C/C++很接近,Cx语言很容易上手。

事实上,C/C++程序本身的简洁性、可读性不差,只是C/C++程序中有太多细节需要程序员用编程实现,程序量变大了。另外,现在C/C++程序的编译器大得吓人,Cx的解释器仅仅几个MB (目前 < 3MB)。

C/C++程序编译后,完全不能更改,也难以简易调用。我的脚本语言完全没有这个问题。
我上述窗口处理信息程序,类似Java。 比 C/C++简单吧?

Ruby 和 Python 是脚本语言,请你用它们完成上面的线程程序!如果能搞出漂亮的程序来,我就服了你!

Ruby中所谓的线程,根本不能算是线程。PyThon中的线程,也好不到哪里,根本不能与C/C++中的系统级线程相比。 Cx中线程,完全是C/C++中的系统级。

另外, 请你完全用C/C++程序完成我上面给出的 操作MS Excel的例子, 看看要几行代码!如果能同样简洁,我也服了你!

我这里仅仅是展示Cx很少一部分内容,如果时间允许,我想做个自己的BLOG,好好介绍一下Cx.

# re: 吹响反击Ruby On Rails的号角  回复   

2006-03-27 01:15 by tongshou@gmail.com

写程序中命名是个比较头痛的问题,尤其当程序量不断增加,原来命名的方法不能完全适用,必须更改命名、或者局部更改命名的前缀、后缀,用手工更改根本不可能,而且容易出错,下面的Cx 例子就是做这方面的程序 :

读取 D:/SS/FM/目录下的程序文件, 按照 Lx表中的替换格式(cat_load --> CLoadData, cap_load --> CLoadData*,....)完成替换,用同样的名字存入 D:/SS/TO/ 目录下。处理过程中按照 文件名字的大小顺序处理,并且,在屏蔽中滚动显示处理好的文件名字。


public defun [C:SS]()
{
fd = new FIND_DATA;


Lx = NewLstrSym{
cat_load ; CLoadData; // 左边___旧, 右边___新
cap_load ; CLoadData*;
cac_load ; CLoadBase;
cac_load_file ; CLoadFile;
cac_load_lstr ; CLoadLstr;
cac_load_LISP ; CLoadLISP;
cac_load_toLambda ; CLoadLstrToLambda;
};

fd.attrib = 32;
dir_fm = "D://SS//FM";
dir_to = "D://SS//TO";

fx1 = _dirName(dir_fm + "*.cpp", fd);
fx2 = _dirName(dir_fm + "*.h", fd);
fx3 = _dirName(dir_fm + "*.t", fd);
fx4 = _dirName(dir_fm + "*.c", fd);

if (fx2) fx1.join(fx2);
if (fx3) fx1.join(fx3);
if (fx4) fx1.join(fx4);
fx1.sort();

for(; fx1; fx1++) {
out(fx1->value, tab(13), "... ...");

Ln = ReadLines(dir_fm + fx1->value);
Ln.SubstLname(Lx, FALSE);

WriteLines(dir_to + fx1->value, Ln);
prinn("OK");
}
}

# re: 吹响反击Ruby On Rails的号角  回复   

2006-03-30 23:39 by seashine
gongshou@gmail.com你好,我很佩服你能写出这样一个动态语言出来, 我的邮箱是50135883,希望能加入你们的团队中进行业余的创作。

# re: 吹响反击Ruby On Rails的号角  回复   

2006-04-25 22:45 by 薛定锷的猫
面对一门语言,框架的时候,其实每个人都有各自的原因左右着喜好.回过头来,当你面对其他语言,框架时,最好能够跳出主观的情绪.编程需要偏执,也需要理性.
如同当初选择Java,现在脚本语言吵得这么火热,我也开始接触Django.也许不久以后会用到,可是我心里清楚当前的主次之分.我听见了,我看见了,我实践了.
所以选择Ruby/RoR,抑或Python/***以后,不妨虚心听听其他阵营的声音.或者本着"循证架构"的精神实践出真知.
孰强孰弱,甚至种族歧视真能帮助我们得出真知?

# re: 吹响反击Ruby On Rails的号角  回复   

2006-05-28 11:44 by 5
看过精武英雄没有,里面的陈真去日本学技术,还不是照样打日本人,其实拒绝技术是对我 们没有好处的,你可以不买日货,(而且我也觉得日本人卖给中国人的东西是很有歧视性的),但是请不要拒绝日本技术,如果ruby能给我们带来生产力的提高的话,那还是值得提高的。
 
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭