锁定老帖子 主题:尝试用Python实现消息传递编程风格
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-12
是的,javascript的强项就是做UI,这是从它发明之初就确定的了
偶然的情况下,遇到一大堆prototype语言的论文,发现一个有趣的分类 |
|
返回顶楼 | |
发表时间:2007-06-12
引用 就我个人的体验,写javascript程序到后来,不是自己写一些趁手的lib,就是最终去用那些处于快速变化过程中的开源包。和写java/python程序相比,是一个相对痛苦的过程。
不过,说句公道话,这个痛苦倒不是来自于javascript语言本身,一者是因为javascript通常都是处理ui层的event驱动逻辑,而ui本身就是一个痛苦的过程。 以前写JS UI是很痛苦的,-这一点也没没错,但在EXT到来之后。。一切都变得那么优美。。。 |
|
返回顶楼 | |
发表时间:2007-06-12
请问问Lich_Ray原文的(JS)在哪可以找到
|
|
返回顶楼 | |
发表时间:2007-06-12
在我的博客 http://let-in.blogspot.com 上可以找到,但现在貌似上不去,服务器维护。
我写的关于 JavaScript 实现OOP的文章终于完工了: http://lichray.iteye.com/blog/89554 对无类语言有点兴趣的可以去看看。 引用 相对于python,象javascript这样的基于prototype的语言,不论用那种方式实现继承/多继承/多态等等特性,都不会象基于class的语言那样来的直观和一致性 什么叫“直观和一致性”?如果要谈面向对象,模式多呢(我写的文章中还只是覆盖了一小部分),加再多关键字也不够用啊,不觉得没有“直观和一致性”吗? JavaScript 2?几乎是不可能的。看看现在的 JS 1.6、1.7 中新加入的函数式编程要素(List 访问函数和 let)就知道当下 JavaScript 的发展方向了。 |
|
返回顶楼 | |
发表时间:2007-06-12
charon 写道 Lich_Ray 写道 ...
我不装牛X。我会发文说明怎么用 JavaScript/Lua 以非常优美的方式实现继承、多继承、Mixin、4P、多态等等一篮子特性的。JavaScript 那么谦虚,你们就因此找它的碴? ..... 其实不是我在找"javascript的碴"。怎么看都是你在找python的碴啊。 就我个人的体验,写javascript程序到后来,不是自己写一些趁手的lib,就是最终去用那些处于快速变化过程中的开源包。和写java/python程序相比,是一个相对痛苦的过程。 不过,说句公道话,这个痛苦倒不是来自于javascript语言本身,一者是因为javascript通常都是处理ui层的event驱动逻辑,而ui本身就是一个痛苦的过程。二者是javascript的浏览器环境的限制,不可能像一般的c/s客户端那样有成熟的ide来支持。 从语言使用者的层面,相对于python,象javascript这样的基于prototype的语言,不论用那种方式实现继承/多继承/多态等等特性,都不会象基于class的语言那样来的直观和一致性。我想这也是javascript2在语言层面提供class,interface,extend,package等特性的原因之一。一旦引入了这些东西,在内部机制的梳理上又会有很有意思的变化。比如python,现在的这种相对符合直观的MRO方式,也是在2.3之后才稳定下来. 在这支持一下charon, 说明支持点: 其实各种语言有他们发挥最佳优势的环境。这些很多是历史造成了,就说javascript,让恶心的浏览器不兼容影响了。 希望讨论时,都从语言本身来聊,最好搞代码擂台之类的。 |
|
返回顶楼 | |
发表时间:2007-06-12
Lich_Ray 写道 JavaScript 2?几乎是不可能的。看看现在的 JS 1.6、1.7 中新加入的函数式编程要素(List 访问函数和 let)就知道当下 JavaScript 的发展方向了。 我觉得javascript引入package,class等本意是为了吸引更多的 java,c#,等web开发者。并不是js语言本身缺乏这些支持。可能很多人不习惯,但这对于语言长远来看,有好处的。 但近来 动态类型语言 的异军突起,javascript可以借这东风了。反而我觉得 prototype.js,dojo 显得javascritp更应该改变了。 |
|
返回顶楼 | |
发表时间:2007-06-13
Lich_Ray 写道 什么叫“直观和一致性”?如果要谈面向对象,模式多呢(我写的文章中还只是覆盖了一小部分),加再多关键字也不够用啊,不觉得没有“直观和一致性”吗? 我之前的帖子其实是个坑,让你用基于object的模式去干基于class的模式所擅长的部分。基于class的语言对继承/多态等特性提供了直接的机制,而javascript就像你在另一个主贴里面写的那样,需要自己定义Object的prototype的extend/mixin等来搞定。这个就是所谓的不一致的来源,每个人都可以定义自己的extend/mixin,,甚至连命名都不一样,很多开源包都或多或少定义了类似的东西,但是语义上都存在一些或大或小甚至微妙的差异。因为这种情况的存在,直观就更谈不上了,因为面对不同的实现,使用者的直觉总会有差异的时候。 从这一点来看,这个挖坑的做法确实不是很厚道。但是,你在这个帖子里面的说法其实也不厚道,所以也就是彼此彼此而已。你一再确认的python在OO机制上弱于javascript/lua的说法的根据,我一直没看到。只看到你在不停的例举javascript如何强大,但至少在你举出的这些方面,javascript没比python强。给我的感觉,你想说明的是基于prototype的无类OO语言很强大,至少在整体上说不弱于基于class的OO语言。但是为了表达的更具震撼性,就变成整体上要强大,而且是很多了. |
|
返回顶楼 | |
发表时间:2007-06-13
如果那些写 js 包的人是完全在使用 JavaScript 本身的设施(尤其是 prototype)在达到目的,每个新 OOP 特性的代码应该在 5 行之类解决问题。而这些让我很不爽的人是怎么做的呢?当然会不兼容了。只要思路是一致的,用什么命名一点也不重要!
引用 你一再确认的python在OO机制上弱于javascript/lua的说法的根据,我一直没看到。只看到你在不停的例举javascript如何强大,但至少在你举出的这些方面,javascript没比python强。
我说,我说。 Python 的类能是匿名的吗? Python 的单个实例能 Mixin 吗? Python 的类能在声明完成之后不声明额外名字给类添加方法吗? Python 的对象能在声明完成之后不声明额外名字给自己添加方法吗? Python 的类能继承某个实例的能力吗? Python 的对象能继承另一个对象的能力吗? Python 的类能真正支持私有属性吗? Python 能用 Dictionary 完全描述一个包吗? 也许我真的对 Python 不太了解吧。我只知道,JavaScript 实现这些,每个特性只需要 0~3 行代码;不知道 Python 要几行——或者,咱们再加点儿关键字?able, workas, like, private, can, to,都不错。哦,我差点儿忘了,已经加了不少元类函数了! 我想说的是,机制是抽象的,策略是具体的。没有优秀的机制,处处碰壁。 引用 给我的感觉,你想说明的是基于prototype的无类OO语言很强大,至少在整体上说不弱于基于class的OO语言。但是为了表达的更具震撼性,就变成整体上要强大,而且是很多了。
这个想法相当有意思。你的意思是说,我为了说 JavaScript 好,故意说 Python 的不是?Python 不是被设计用来显示设计者牛X的,它的哲学是“实用主义”(这一点你应该比我清楚),所以不用太苛求。更何况,对于无类语言而言,山外青山楼外楼,无类语言未尝休,只怕,又是一块“新大陆”。 PS: 不错,发了3篇博客我成二星会员啦!累死了,明天起开始潜水。 |
|
返回顶楼 | |
发表时间:2007-06-13
Lich_Ray 写道 Python 的类能是匿名的吗? Python 的单个实例能 Mixin 吗? Python 的类能在声明完成之后不声明额外名字给类添加方法吗? Python 的对象能在声明完成之后不声明额外名字给自己添加方法吗? Python 的类能继承某个实例的能力吗? Python 的对象能继承另一个对象的能力吗? Python 的类能真正支持私有属性吗? Python 能用 Dictionary 完全描述一个包吗? 兄弟,说的是OO机制上的强弱。不是说今天你穿了件红衣服,他穿了件绿衣服,红衣服就比绿衣服强很多。而且红衣服上有个脏东西,绿衣服上没有,难道是绿衣服的错? Python是一个基于Class的语言,问题2,5,6基本没有意义. 1.没有 2.这个问题没有意义,多继承和基于类的mixin基本等价。而python中的对象都有其class/type. 本身OO的哲学就不提倡基于实例的mixin,在实例上都mixin其它的东西了,还能当同一个类的实例用? 3.这个和OO没关系,如果你的方法能够用lambda表述,python就能支持在类的声明完成后不声明额外名字添加方法。如果不能,就做不到。这个,只能说python的匿名函数机制不够强悍,和OO无关. 4. 类似于3. 但是有一个区别. python是基于类的语言,对象是不需要声明的,只有初始化。 5. 再次确认python是基于Class的语言,某个实例必然存在相应的Class/Type,不存在类继承某个实例的必要性。 6. 同上. 对象a要继承对象b的能力,就让Class A继承Class B. 从OO的原则上来说,对象的行为应当由其Class定义,而不是说自己动态搞出一堆东西来。 7. 不能。这个是沿袭自C/C++/Java的哲学问题。python给了一个约束,但是你要刻意打破这个约束,它给你这个自由。而且,不要以为python中使用不了逃逸法,也是很easy的事情,在行数上也不会增加什么东西 8. N/A. 不了解这个包的含义. 但是,有个疑问,一个语言的某个内置数据类型是否具备某个特性,能够上升到这个语言的OO机制是否够强的高度? |
|
返回顶楼 | |
发表时间:2007-06-13
Lich_Ray 写道 如果那些写 js 包的人是完全在使用 JavaScript 本身的设施(尤其是 prototype)在达到目的,每个新 OOP 特性的代码应该在 5 行之类解决问题。而这些让我很不爽的人是怎么做的呢?当然会不兼容了。只要思路是一致的,用什么命名一点也不重要!
看看这个链接:http://ajaxpatterns.org/Javascript_Inheritance 它条分缕析的说明javascript实现继承的各种途径的优劣。 说句实话,用javascript写程序的那帮家伙,哪一个不是完全在使用 JavaScript 本身的设施? 难道他们还用到了javascript之外的设施不成? |
|
返回顶楼 | |