冒号和他的学生们(连载16)——动态语言

16.动态语言

Freedom is not free               ——Kelly Strong

叹号急不可耐地问:“现在可以谈动态语言了吧?”

冒号感言:“曾几何时,动态语言还只是陪太子读书的角色,那时候它们的名字是‘脚本语言’。近来却迅速崛起,俨然有与静态语言分庭抗礼之势。”

问号忍不住问道:“动态语言与脚本语言是一回事吗?”

“相比动态语言定义上的模糊,脚本语言的概念还是比较明确的。”冒号回避直接给出答案,“脚本(script)的提法,是为了区别于一般的程序(program)。Perl的发明者Larry Wall不愧为语言学家,对此有一个精彩的说法:‘A script is what you give the actors, a program is what you give the audience’。直译为:脚本是给演员看的,节目是给观众看的。此言妙在一语双关——program兼有‘节目’和‘程序’的意思。”

句号领会:“这里的演员指的是程序员,观众指的是用户。换言之,程序是为终端用户服务的,而脚本是为程序员服务的。”

“正解!”冒号肯定道,“脚本最常见的形式是壳脚本(shell script),在非Unix类的操作系统中也称为批处理文件(batch file)。”

“批处理文件倒是很熟悉,壳脚本听起来就怪怪的。”逗号嘀咕着。

“那是因为你在Windows的世界里长大,听不惯Unix的方言。”冒号一语道破缘由,“操作系统的内核称为核(kernel),出于安全考虑不便直接与用户交互,因此裹上一层壳(shell),即人们常说的命令行解释器(command line interpreter)。壳脚本是在壳上运行的脚本,扩展了命令行下可执行的命令。它最初主要是内建(built-in)命令的组合,用于系统程序的调度,是系统管理员的必备武器。其后,壳脚本也发展到用于应用程序的调度、连接、调试等,成为粘合(glue)语言。”

逗号不禁有些疑问:“难道一般的程序语言如C之类的不能作此用吗?”

引号回应道:“这些语言通常需要‘编写-编译-链接-运行’的过程,十分繁琐。脚本语言编写后即可运行,快捷方便得多。”

冒号点点头:“不错,既然脚本主要用于整合其他程序,本身并不占用太多的资源,同时逻辑也不太复杂,因此脚本语言注重简洁、实用,语法要求不那么严格,性能上的要求也不高。除壳脚本外,还有一些专用于文本处理(Text Processing)的语言或工具如AWK、sed和grep等,多用于读写配置文件和日志文件、过滤处理各种程序的输入和输出,对于整合各种程序也非常实用。随着对脚本语言需求的增长,其局限性日益突出,Perl之类的高级脚本语言便应运而生了。Perl在壳脚本、AWK、sed的基础上,融合了命令式的C与函数式的Lisp的特征,渐渐成为最流行的脚本语言之一。”

问号注意到:“Javascript是浏览器端的脚本,来路似乎有些不同。”

冒号解释道:“除了命令行程序外,脚本语言在其他的应用程序中也身影频现,如图形界面应用、多媒体应用、网络应用等。尤其是网络应用,成为滋生和繁荣脚本语言最肥沃的土壤。例如:Perl非常广泛地用于网络服务器端的CGI编程;PHP更是专为动态网页而设计的语言;Ruby虽与Java同岁,但真正开始风行得益于网络应用框架Ruby on Rails的成功;至于Javascript,长期被边缘化为网页设计人员的语言,是web2.0的新宠AJAX真正将其带入程序员的视线。”

逗号有些好奇:“什么时候脚本语言变成了动态语言呢?”

“不是所有的脚本语言都能称作动态语言的,尽管后者并无确切的定义。”冒号回答,“从用途上看,一个脚本语言如果不再局限于命令行工具和粘合工具,从专用语言发展为通用语言,并能胜任复杂的应用开发,或许更有资格归为动态语言。”

时间: 2024-08-29 05:52:33

冒号和他的学生们(连载16)——动态语言的相关文章

冒号和他的学生们(连载23)——数据抽象

23.数据抽象 善张网者引其纲,不一一摄万目而后得 --<韩非子·外储说右下> 问号抢着说:"我知道了:过程抽象的结果是函数,数据抽象的结果应该是数据类型." 冒号首肯:"数据类型与数据运算是程序语言的基本要素,除了内建的类型与运算外,程序语言还提供了用户定义(user-defined)的扩展机制,以提高编程者的效率.正如函数是一些基本运算的复合,自定义类型通常是一些基本类型的复合.不过单纯的复合类型并不是真正意义上的数据抽象,我们关注的是抽象数据类型(ADT).

冒号和他的学生们(连载22)——抽象思维

22.抽象思维 是谓无状之状,无物之象,是谓惚恍 --<老子·道经> 冒号健步走进教室,学员们立刻正襟危坐,进入战备状态. "如果说咱们是在合演一场戏,那么前面五节课只是一个过门."冒号俨然一副自导自演的架势. 众人暗暗吃惊:这过门也忒长了点吧. 冒号随即探问:"还记得在范式总结中提到的迭代学习法吧?" 引号迅速应答:"就是在具体知识与抽象理论之间做折返跑." "记性不错."冒号赞道,"在上本班之前,你们

冒号和他的学生们(连载21)——后台脚本

21.后台脚本 操千曲而后晓声,观千剑而后识器 --<文心雕龙•知音> "剩下四种动态语言,我们将之归为后台脚本语言."冒号说着画了张图表-- 用户 前台语言:Visual Basic,Delphi,JavaScript 平台语言:Java,C# 后台脚本语言:Perl,PHP,Python,Ruby 系统语言:C,C++,D 机器 引号听得仔细:"我记得您开始是把这些语言划分为C族静态语言.非C族静态语言和动态语言三类的." 冒号解释:"那是

冒号和他的学生们(连载20)——前台语言

20.前台语言 运用之妙,存乎一心 --<宋史·岳飞传> 稍事休息后,冒号切换了话题:"接下来简单聊聊Visual Basic和Delphi." 叹号略带得色:"Visual Basic最好用了,建个窗体,从工具箱中拖些控件,再定义一下它们的属性和行为,搞定!" 冒号点点头:"VB最大的优点就是易学易用.上手快开发快,对非计算机专业人士尤其具有吸引力." 引号咬文嚼字:"言外之意,VB对于专业人士就不那么合适了?"

冒号和他的学生们(连载18)——系统语言

18.系统语言 居高者形逸而神劳,处下者形劳而神逸 -<洪应明·菜根谭> 问号忙问:"您打算比较哪些主流语言呢?" 冒号回答:"就谈谈第一堂课提到的最流行的十二种语言吧.按语法特征可将它们分为三类:C族静态语言五种--C.C++.Java.C#和D:非C族静态语言两种--VB和Delphi:动态语言五种--Perl.PHP.Python.Ruby 和JavaScript ." 叹号表示怀疑:"这么多种语言怎么比较得过来?" 冒号解释:

冒号和他的学生们(连载17)——语言讨论

17.语言讨论 因了解而喜爱,因无知而憎恶 --题记 教室里,学员们正热火朝天地讨论着流行的编程语言.冒号推门而入,沸水锅被浇了一瓢冷水,立刻平静下来. 冒号笑吟吟地看着大家:"怎么不讨论了?" 众人齐道:"该您了!" "首先需要声明的是,本课评论编程语言,乃是应众位之邀,实非本意."冒号严肃起来,"因为这种评论,不可避免地会带上个人色彩,容易产生误导.正所谓,通禅悟道者拈花不语,坐井观天者蛙鸣鼓噪." 众人迅速自动对号:看来

冒号和他的学生们(连载15)——数据类型

数据类型 遵礼谓之劬,守法谓之固,此荒国之风也 --<荀悦·申鉴> 待教室平静下来,冒号再度开腔:"在谈论动态语言之前,最好先澄清一下它与动态类型语言之间的区别." 叹号讶然道:"它们不是一回事吗?一直以为动态语言是动态类型语言的简称呢." "有亲戚之名,却无血缘之亲.名称上相似,加之动态语言绝大多数确是动态类型语言,造成混淆实属在所难免,但二者之间并无必然联系--动态语言不一定是动态类型语言,动态类型语言也不一定是动态语言."冒号飞

冒号和他的学生们(连载14)——教学计划

教学计划 褚小者不可以怀大,绠短者不可以汲深 --<庄子·至乐> 一阵商讨之后,众人似乎未能达成共识.冒号见状,便让他们一一道来. 问号再次充当急先锋:"能不能比较一些当今主流语言各自的优缺点?" 冒号笑言:"我怎么恍惚间又回到了第一堂课?你的潜台词还是那句话:到底学哪种语言好?" 问号被窥破心事,微露窘色. "不过我非常理解你们的想法."冒号体谅道,"虽然这是编程中最易提出却又最难回答的问题,但考虑到大家对它如此兴致盎然,

冒号和他的学生们(连载5)——软件技术

软件技术 借我借我一双慧眼吧,让我把这纷扰看得清清楚楚明明白白真真切切 --<雾里看花> "现在我们具体介绍一下编程范式."冒号忽然顿住,隐觉一抹失望从众人脸上掠过,问号更是欲言又止,便鼓励他开口. 问号略显迟疑:"您说编程范式是一种心法,那框架.设计模式还有架构呢?" "原来如此!"冒号心下了然,"让我说说你们最想听些什么吧." 众现不信之色. 冒号说道:"一种是具体而实用的,最好能立马解决学习和工作中