AppleScript初体验

来源:互联网 发布:办公软件有问题 编辑:程序博客网 时间:2024/05/19 23:53
相比其它领域专用脚本来说AppleScript感觉来自...地球?因为它应该是市面上最接近自然语言(英语)的编程语言,连其内建文档都做成了类英文字典的格式(例如对象词条被标注为名词,命令为动词)。但对有编程经验的人来说这种语言显得啰嗦,令人不禁反思自然语言的相同属性。为什么显得啰嗦和为什么要啰嗦?

传统编程语言的设计目标是表达和控制,但在表达和控制的顶层概念就作了细分。比如将作为“名词”的对象细分为单数变量和集合;将控制机制分为过程、逻辑控制流、循环遍历等等独立“语言“属性。正是这些顶层技术性设计使得编程语言和自然语言分道扬镳,在专业人士眼里显得言简意赅而变成了普通人乍望去高不可攀的专业。很多应用脚本沿用了通用编程语言文化甚至直接规定某种通用编程语言为应用脚本指定语言,比如Python被作为Linux音乐播放器Rhythmbox的脚本语言,面向的仍然是有编程基础的用户。AppleScript选择了不同的道路,从语法设计上将变量、集合、控制流、循环等等全部集中或者回归到英语语法中,其出发点大概是因为编程语言中的表达和控制概念源自自然语言(我们的思维),不懂编程语言的人理应用书面语对计算机发号施令。更体贴的是,对于同种语义,AppleScript提供了足够多的备用表达方式,正如自然语言一样,进一步降低了脚本作者对字典文档的依赖性;比如所有格可以用of或‘s两种方式表示。遍历可以用every或复数形式实现等。

这样的设计必然会留给脚本解释器大量解释工作,导致运行效率低下。但其目标人群编程效率的提升加上定位在控制大型图形程序,牺牲一点运行效率还是值得的。真正的问题可能在于脚本可读性和维护性。可读性是个悖论。贴近英语的风格使得脚本在篇幅较短的情况下很容易理解;但全部使用AppleScript标准表达方式的脚本正如阅读文字一样,需要细致的线性扫描甚至字字专注,比如复数语法视觉上很不起眼;不象传统脚本语言的控制流语法风格是独立的,视觉上相当容易辨认,适合快速扫描。当然,这可能只是习惯问题,熟悉英语的用户很可能会认为AppleScript非常直观。维护性也来自AppleScript的贴近自然语言的属性,这种属性不但造就繁复的语句,也鼓励用一句话表达复杂语义(各种带从句的复杂句),这样令进一步抽象复用和重构变得困难。如果目标脚本需要方便长期维护,脚本风格必然会回到传统编程语言的精髓:模块化。这样却会淡化贴近自然语言这一AppleScript最大的优势。所以感觉AppleScript只适合作为粘合剂语言,利用它作为应用界面控制接口,而将复杂的逻辑工作交给其它语言,利用Shell接口来开启其它进程协同作战。

因为贴近自然语言,AppleScript可以作为通用应用脚本语言,例如支持大部分Mac内建应用。很可惜的是,个人认为本来它还适合作为跨平台应用语言,却因为平台之争恐难成事。本来其语法无须依赖任何平台相关内容,比如路径表示法是通过名词所有格(of)来表示,不牵涉Windows和Unix机缘巧合下发明的各种正反斜杠语法。这比其它脚本语法依赖标准库和API来处理平台相关内容,或者必须区分字符串编码和Unicode等等的做法要“跨平台”的多。当然,在所有跨平台语言和应用都还在平台差异化为主旋律的商战中蹒跚学步艰难生存的当前,诞生更上层的一招制敌的跨平台应用脚本恐怕只是高级用户的幻想,仍然衷心希望能出现类似的类自然语言跨平台脚本语言,并且流行起来。到那个时候计算机可以从大量的自然语言脚本学到货真价实的人类需求,这对智能化未来也是大有裨益的。


一点浅见。

原创粉丝点击