导言
============
在支付宝有一个奇怪的组织叫pCLUB,是一群programmer讨论问题的公共博客(没有对外开放哈)。最近呢,孔宣同学发起一个话题,提出要为种种脚本语言“平反”。他提到说:
========
我发现,现在脚本语言也深受第一印象所苦。一谈到脚本语言,人们作何反应?
「运行速度很慢」
「只能写一些玩具小程序」
「没什么好用的IDE」
「调试很困难」
========
所以,这个平反一方面是诉苦大会,一方面则是一场脚本语言的Show。这件事情挑动了我的神经,这十多年来,javaScript不也一直承受着种种不公平的待遇么?从写框架库到写书,我一直对这门语言充满着热情与隐忍,而现在,孔宣同学挥了挥手,pCLUB的兄弟们就冲上来了,摆出了种种不同的脚本语言的特性,而其间,居然没有这个世界上最用得最多的——我想这样说并不过分吧——脚本语言!天理昭昭日月可鉴太上老君扔了金刚圈圈——啥米意思我也不知道——哈哈,下面就来诉诉苦,以及做下Show。
另,注:孔宣,蔡学镛是也;愚公,笨人是也;百支,支付宝内部员工的一个培训是也。其它略语或别称,不详述了。
为脚本语言平反-JavaScript篇(1)
=========
百支期间,有虚竹同学介绍技术部,说到整个公司作技术开发工作的,有三块,XXX、YYY和ZZZ。我记性不好,记不得虚同学讲的有啥,反倒记住了他讲的没有什么。比如说,我后来才知道产品部也只有三两个人是M(Manager)系列的,其它的都是P(Programmer/Product/Project)系列上的员工,所以也算是搞技术的。当然,按虚同学严格的讲法,这些还不涉及代码,不算“程序开发者”,所以不提。但当时我就问虚同学了啊,那为什么X/Y/Z里面,没有前端(UED)部门的呢?前端做开发呀。虚同学不好意思地笑笑,若有所思地自言自语到:对呀,他们也做开发的呢。
所以呢,在很多人的印象里面,非但如孔宣同学所说的:脚本语言效率不高、没有好的工具、只能写玩具代码之类,更有如虚同学者,不认为用脚本是在写程序的,大有人在呢。这其中误解最甚的,就是前端开发,以及他们使用的JavaScript了。为什么呢?因为前端开发来源复杂,有从界面设计出身的,有半路出家的,有做客户端开发的……这不算什么,最重要的是,他们所使用的那个语言,叫JavaScript的那个,根不正苗不红,面向过程也不是,面向对象又不象,最常见的情况下,就是在网页中按下来按钮然后弹出来一个“Hello”(连World都没有)……所以,“前端不是做开发的,是‘画’界面的”成为了一种基本观念了。
绕回来。我来做做JavaScript的平反工作。其实在N多年前,我就开始了在JavaScript上做一种尝试,就是将它的“基于原型继承的面向对象”,改成“基于类继承的面向对象”。因为我从Delphi出身,所以自然觉得“有类,是对象之始”。很自然地想做这样一种工作。同样的,觉得“万物皆对象”,当然要把它改造得跟Delphi一样,跟Java一样,这样最好。所以就去做了,这个项目做成开源的,叫Qomo。在Qomo中的代码可以这样写:
大家一看就知道,这个是Delphi的路子:对象obj,是从TMyObject这个类上创建出来的。类继承的关系,也是通过一个名字Class()的函数来维护的。当然,还实现了调用父类方法的inherited,getter/setter,以及最著名的“类构造与实例构造”分为两个阶段的体系。接下来,在上面这一基础上,Qomo还进一步地把类似COM的Interface做出来了——这包括“接口既是声明,也是实现”这个复杂的活儿。例如可以这样做:
也就是说,Class()声明中,表明TMyObject 实现了三种接口,所以可以最终从obj的这个实例中通过QueryInterface来取到这些接口(的一个引用)。除了表明“对象/类是否包含某个接口”之外,上面得到的接口还可以直接调用showMessage()方法,这个方法即是obj自身的方法——这就是“既是声明,也是实现”的含义。
最后,Qomo还在上面的基础上,实现了面向切面编程(AOP)、面向模板编程(TOP/GP)等等模式。在开始计划用JavaScript来描述基本的GoF模式时,我终于停下来了。我发现,在这一条路上,我走到了尽头。再做下去,不过是更多语言的特性的实现而已——仅是重述别人的东西,有什么意义呢?
从一年半以前,Qomo开启了一个小小的子项目,叫QoBean。这个项目研究的方向,是“元编程(meta programming)”,就是“实现语言的语言”。JavaScript自身的确有这样的能力,因为JS之父,就写了几十K的代码,在JS上实现了一个新的JS——这被称为语言的完备性。QoBean这个项目开始于2007.12.31,从这个贴子可以看到它最初的状态:
http://blog.csdn.net/aimingoo/archive/2007/12/31/2006369.aspx
然后呢,QoBean所要做的事情,即是解决“语言如何产生”的问题。这个问题,QoBean很快的就交了答案。包括:
1、QoBean基本的类框架模式
http://blog.csdn.net/aimingoo/archive/2007/12/31/2006534.aspx
2、QoBean的元语言系统(一)(二)
http://blog.csdn.net/aimingoo/archive/2008/07/25/2707504.aspx
http://blog.csdn.net/aimingoo/archive/2008/07/25/2709638.aspx
这样,QoBean就停步在了2008.07.25。停下来的原因是:QoBean做完了这些,却不知道如何表现它——它有什么用呢?
前些天孔同学一直在讲DSL。那么,如果QoBean实现了meta programming,能不能实现DSL呢?一个基本的DSL框架,在JS里面有多复杂呢?于是,这里开贴来讲这个话题。上面是水货,下面才是干的。之所以讲那么多水货,是因为下面的DSL实现基于“QoBean的元语言系统”,上头有两篇文章链接,大家可以先点进去看看。在后面我讲的时候,只会提个大概,不讲这方面的细节了。
下一篇:
http://blog.csdn.net/aimingoo/archive/2009/09/08/4532496.aspx
分享到:
相关推荐
1. **JavaScript在Photoshop中的应用**:JavaScript是一种广泛使用的脚本语言,它在Photoshop中允许用户通过编写脚本来自动化重复任务,创建自定义工作流程,以及扩展Photoshop的功能。这包括调整图像参数、处理图层...
JavaScript在Photoshop中的应用是通过ECMAScript实现的,这是一种基于标准的、广泛使用的脚本语言,它为Photoshop提供了强大的编程接口(API),使得开发者可以深入操控图像处理、图层管理、颜色调整等多个方面。...
首先,JavaScript在Photoshop CC中的核心功能是提供一个脚本接口,允许开发者直接操控Photoshop的对象模型。对象模型包含了所有可用的面板、菜单项、图层、选区等元素,可以通过JavaScript进行访问和操作。例如,你...
1. **JavaScript基础**:首先,你需要理解JavaScript的基本语法,包括变量声明、数据类型、控制流(如条件语句和循环)以及函数定义。这些都是编写任何JavaScript脚本的基础。 2. **Photoshop对象模型**:...
04-JavaScript脚本语言基础(二)DOM(L)
JavaScript是一种广泛应用于网页开发的脚本语言,它允许在用户浏览器上动态地更新内容,实现交互性和动画效果。"网页JavaScript脚本语言提取器"是一个工具,专门设计用于从网页中抓取并分析JavaScript代码,这在进行...
基于神经网络的恶意脚本分类-JavaScript&VBScript Neural Classification of Malicious Scripts: A study with JavaScript and VBScript
《Photoshop CS6 JavaScript 脚本参考指南》是一份由Adobe Systems Incorporated出版的专业文档,旨在为使用Adobe Creative Suite 6中的Photoshop软件进行JavaScript脚本编程的用户提供全面的指导和参考。...
JavaScript是一种广泛使用的脚本语言,主要用于Web前端开发,可以实现动态效果、交互功能等。JavaScript与HTML和CSS一起构成了现代Web开发的基础。 #### 二、基本示例 1. **生成文本** ```html ...
奔梦向前:学编程其实很简单,html、css、JavaScript、html5、css3、vue、Canvas实现网页特效页面、新手入门学习、了解网页动画的制作、代码实现网页动态画面-表白代码脚本-2020-04-28-1。
项目14-JavaScript脚本编程.pptx
JavaScript应用实例-脚本商店界面-增加点击事件.js
标题中的“纯Java实现的一个脚本语言 语法类似javascript.zip”揭示了这是一个使用Java编程语言构建的脚本引擎,其语法设计受到了JavaScript的影响。这意味着它可能提供了一个在Java环境中执行类似JavaScript语法的...
JavaScript作为世界上最流行的脚本语言之一,在Web开发领域占据着举足轻重的地位。无论是个人开发者还是大型企业,都离不开JavaScript的支持。本教程旨在帮助初学者快速掌握JavaScript的基础知识,同时也适合有一定...
"如何在C++程序中嵌入JavaScript脚本语言" 本文主要介绍了如何在C++程序中嵌入JavaScript脚本语言,旨在帮助开发人员更好地理解和实现脚本语言在C++程序中的嵌入。 首先,文章简要介绍了脚本语言的兴起和重要性,...
"浅谈关于JavaScript脚本语言的学习" JavaScript脚本语言的基本特点: 1. 简单性:JavaScript是一种解释性语言,不需要提前进行编译,在程序运行过程中由浏览器边解释边执行,因此不需要额外的运行环境。 2. 跨...
你应该用什么编程语言? 你的服务器设置正确吗? 如果你的服务器不是UNIX系统呢? 解剖CGI脚本 输出头部 输出数据部 带阐述的脚本 传递其他信息给脚本 创建特殊的脚本输出 以装载另一个文本响应 无响应 ...
如何在C++程序中嵌入JavaScript脚本语言.pdf
JavaScript是一种轻量级的、基于对象和事件驱动的脚本语言,主要应用于Web页面中,为用户提供交互式体验。它由Netscape公司开发,起初名为Live Script,后来改名为JavaScript,以利用当时流行的Java语言的知名度。...
1. **客户端脚本**:在用户浏览器中直接执行,比如JavaScript和VBScript的客户端实现。脚本直接嵌入HTML文档,浏览器下载页面后,能理解并执行其中的脚本代码,用于实现动态效果和用户交互。 2. **服务器端脚本**:...