• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Programming is Hard, Let's Go Scripting... Part.1

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

概要:这是Larry Wall(Perl的创始人)在2007年写的一篇文章,大致是在告诉大家“不要编程了,写脚本吧”云云。这篇文章被认为是Larry Wall对脚本语言,或者解释型语言的一次横向审视。另外有一篇类似的文章《TourDeBabel》,各位如果对于“比较编程语言”这个主题感兴趣的话也可以看看。


译前的一点牢骚:夏小猪老是说我经常挖坑不填,现在觉得果然出来混是要还的,想闲闲的过完这几天是不可能了,除了需要赶制一篇为中国计算机学术界拖后腿的论文之外还要策划个武汉旅游攻略(吐槽啊武汉哪有可以玩的地方?哪有!!!)以及一个系列教程……omg


原文:http://www.perl.com/pub/2007/12/06/soto-11.html (译注 1)

Larry Wall, 2007年12月6日,上午12:00


我觉得,在大多数人看来“写脚本”是件 牛逼 猥琐(译注 2)的事。我无法定义它们,但是当我看到它们的时候我就会知道是要干嘛了。因此,各类脚本语言的一些共同点就浮现出来:

  • 语言简单
  • “凡事皆字串” (译注 3)
  • 快速建模
  • “胶水”语言
  • 过程控制
  • 紧凑/简练
  • “更糟糕”可能更好(译注 4)
  • 特定领域专用
  • “自带电池”(译注 5)

……额,但是我没有从以上几点中看到中心思想——至少看不到关于技术的。如果真的要我拿脚本语言做一个比喻,它就像一个平缓的坡道或者慢车道。当然,也有些可选的快车道吧。


平缓的上坡

但是,真的,写脚本真不是什么技术名词。当我们把一个东西称作“脚本语言”时,我们基本上是在做一个语言学和文化上的评判(译注 6),而不是技术上。


所以我把写脚本看做特有人性的一件事(译注 7),我们的语言上的本源告诉我确实是这样的,谈到本源……呵呵……


在过去

假设你回到过去并遇上Ada Lovelace妹子(译注 8),你问她script和program有什么区别的时候,她应该会像看一件有趣的事一样看着你,然后说出类似这样的话:好吧,script是给演员看的,program是给观众看的。所以说Ada夫人是个犀利的妹子。(译注 9)



Ada Lovelace

在她那个时代,人们对写脚本和编程的概念应该是混淆的,这甚至让我困扰,即使我被认为是这方面的“砖家”。


所以,恐怕我只能告诉你我的鼠目寸光对过去、现在、未来的审视结果。另外我不得不提醒您我对一些东西还是很有点偏见的。(译注 10)


BASIC

我觉得BASIC应该是我的第一个主要学习的脚本语言,尤其是因为BASIC的扩展版本被DEC公司放在他们的小型机系统“BASIC/PLUS”上,还带着人民群众喜闻乐见的、带参数的递归功能。我就是从一个BASIC程序员开始的。一些人可能会说,这样你这辈子基本就玩儿蛋去吧。毫无疑问,这些人是对的。


(PDP-11/40)


但是我不会因此道歉的,所有的语言创始人都会偶然性精神病爆发(译注 11)(从而影响他们的设计的语言),我只是比他们的爆发频率更高而已 :-)


RSTS BASIC/PLUS

无论如何,我在预装有RSTS的PDP-11上写代码的时候,我认真地把BASIC当做一个脚本语言来用,呃至少在快速原型的建立和过程控制模型上是这样滴。我确信这些垃圾永久性地缠绕在我的脑子里了。Perl的变量声明修饰符(译注 12)就是直接采用的BASIC模式。它在变量的结尾处甚至有些可爱的符号来确定这是个字符串还是整数。


但你也可以(用BASIC)做一些牛逼的程序。事实上,我大学有一个一起编程的基友,我们一起报了一个写编译器的班,所用的教材是“龙书”(译注 13),我们从上面学到一些可以拿出去炫的东西。当然,我们的导师说我们将会实现一个自己的语言(译注 14)叫做PL/0(译注 15)。思考了一会儿,我们宣布我们将用BASIC来实现这个项目。教授以为我们疯了,这个班里除了我们没人用BASIC。然后你知道发生了什么?除了我们没人完成这个编译器。我们不只是完成了PL/0,还做了I/O上的扩展,我们把它叫做PL 0.5 ——这就是快速原型的建立。


Unix?

犹记得那天我们的计算机中心收到贝尔实验室的一封信,信上告诉我们可以以折扣价100刀购买一盘Unix V6的磁带(译注 16),因为他们马上要出V7了。我和同事们互相看着问:“为什么我们要用这个叫做Unix的东西?我们有RSTS!”




JAM

JAM是我用BASIC实现的第一个脚本语言。因为我在计算机中心的工作,我写了个叫做JAM的语言,它是“Jury-rigged All-purpose Meta-language”的缩写——这就是我的生活(译注 17)...


JAM很像PHP,是一个由内到外都在处理文本的语言。当然,抛开HTML的部分因为那会HTML还没被发明出来。基本上我们就把JAM当做一个很炫的BASIC宏处理器来用了,有一点不想PHP,JAM不会在同一个命名空间里放3000个函数(译注 18),因为我们没有那么多内存去做这一件事。


Lisp

或好或坏,当我去了研究生院,我学了语言学,所以我使用的唯一的计算机语言是LISP。这是我个人的麦卡锡时代。(译注 19)


Lisp可以算作是脚本语言吧?确实你可以很快的用Lisp构建一些东西,但凭良心说我不能把Lisp划分到脚本语言的行列。根据相关法律法规和政策,高贵冷艳的Lisp不会去迎合你们这些凡人。(译注 20)


嗯,当然,凡人们也永远不会真正原谅Lisp的不合作。


Pascal, Ada

当我进入公司之后,我用Pascal写了一个编译器用于模拟离散事件,并且规格高于即将到来的Ada specs。根据一个语言学家的自我修养,我不认为Ada算是个庞大的语言——英语和日语那种才算。嗯Ada只是个中等大小的语言罢了。


Unix, Shell

花了几年的时间我终于熟悉了Unix和它的各种乱七八糟的脚本语言。呃,具体啊?具体来说有两种:BSD和csh。(译注 21)


BSD,csh

嗯对,对,我知道用这些会让你脑残,我知道。

所以我也学了点C...


C

总归是学了点C,以至于我现在还在学C的库。


shell + awk + sed + find + expr...

但也就是在Unix Shell上编程遇到的各种挫折直接让我去写了个Perl,这里说多了都是泪啊,不说了。但是有一点还是要说下,我发现写shell脚本会受一些限制,它的大部分动词都无法受控制因此在很大程度上互相矛盾,并且名词是非常匮乏的,这里仅限于字符串和文件。类型学上叫做“Who-knows-what”。(译注 22)


C亦或Shell

更具有破坏性的是,在一段时间里交替用C和Shell,你会有个这样的心态:要么用C写代码,要么用Shell,因为很明显它俩是一个渐进过程的两个极端。当我真正意识到写脚本的时候不用真的把自己完完全全放在编程的对立面,而是认为可以有一种简单的语言在两个方面都做得不错时,Perl就出来了。这算是打开了一个巨大的生态圈。读者中的许多人应该有见过我的翻盖图(译注 23)

Unix


译注:

(1)这是Larry Wall(Perl的创始人)在2007年写的一篇文章,大致是在告诉大家“不要编程了,写脚本吧”云云。这篇文章被认为是Larry Wall对脚本语言,或者解释型语言的一次横向审视(“survey the scripting landscape”,link

(2)原文为obscenity,译作猥琐因为我觉得作者用这个词有点褒扬的成分在里面,有点像troll face的感觉

(3)作者在这里引用了Tcl语言的特性描述(“Everything is a string”,link

(4)“Worse is better”,这句话由Lisp创始人Gabriel提出,大致意思是,更好的东西会带来易用性的丧失,需要保持简单。与其对应的是“The right thing”,也就是遵循正确的做法

(5)Python的拥护者称Python的标准库是“自带电池”的,因为标准库已经包含了大量的使用功能,这个库本身非常灵活且可用于许多应用情形(Python About Page,link

(6)原文为judgement——“评判”,或者应该翻译作“划分”

(7)嗯,相对于写代码来说是的

(8)Ada夫人最著名的事迹为翻译意大利人查尔斯·巴贝奇早期的程序设计书《分析机概论》(Wiki 埃达·洛夫莱斯,link

(9)script译作脚本,本意是演员上台前背的剧本,program译作程序,也可以是节目/节目单的意思。这里是一个双关的幽默

(10)这一点在后面的各种吐槽中可以看出来

(11)原文为occasional idiosyncracies,除了翻译成“偶然性精神病爆发”我找不到更好的描述,就这样吧

(12)如果你知道什么是Perl的声明修饰符,请留言告诉我

(13)《Compilers: Principles, Techniques, and Tools》封面是一条龙,所以俗称The dragon book

(14)和所有的大学计算机老师一个德行……

(15)目前有两个语言叫PL/0,其一是IBM PL/1的子集,这里指的是其二,语法就像及其简单的Pascal,被当做教学语言来让学生们了解如何构建一个编译器(Wiki PL/0,link

(16)Unix on PDP: http://www.cs.kuleuven.be/museum/pdp/unix-E.html ,根据这个网页的说明,似乎作者的电脑(PDP-11)用不了贝尔实验室的磁带,如果买了估计会后悔的。

(17)可以看出作者是在引用《The Story of My Life》,这其实就是海伦凯勒的《假如给我三天光明》

(18)good,黑得漂亮

(19)原文McCarthy era,麦卡锡时代,是20世纪50年代初,由美国参议员约瑟夫·麦卡锡煽起的美国全国性“十字军运动”。麦卡锡主义盛行之时期被认为是美国历史上最黑暗的时期

(20)又是一个槽点。在一篇编程语言横向比较的文章《TourDeBabel》中,作者也提到Lisp的牛逼之处。但确实现在大部分人不会去用它了。

(21)BSD最初不是以操作系统的形式,而是作为Unix的扩展套件发布的。BSD在当时主要包括Pascal编译器和ex行编辑器等。csh,也就是C shell,是Bourne shell的前身。这种shell的语法类似于C语言

(22)太难了,这句不会翻。原文是“I found that shell scripting was intrinsically limited by the fact that most of its verbs are not under its control and hence largely inconsistent with each other. And the nouns are impoverished, restricted to strings and files, with who-knows-what typology.”

(23)“old clamshell diagram”这是个啥啊!!!Perl的作者要和Ruby一样怪异吗


===============================================

本文来自:http://blog.csdn.net/zh405123507

tags:perl scripting programming basic pascal

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go 密码 hash 加密发布时间:2022-07-10
下一篇:
第一次获取github上go语言编写的一个项目遇到问题的处理发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap