Transcript 网上程序语言
网络编程语言
沈卫平
2008编程语言走势解盘
Java类语言:Java似乎会逐渐走下坡。J2ME会受到
Google Android、Adobe Flash Lite、.NET Compact
Framework的影响;J2SE的对手则是.NET和AIR;
J2EE在中小型网站受到PHP、Ruby-on-Rails(RoR)
很大的冲击。幸好,目前大型企业好像还是买J2EE
的帐。
在J2ME和J2SE方面,未来似乎可以用JavaFX奋力
一搏;在J2EE方面,也有Groovy/Grails可以抵挡
RoR。尤其目前大家怀疑PHP和RoR只适合用在中小
型网站,大型企业网站似乎还是用J2EE比较安心,
Groovy/Grails可以保障大家在J2EE上既有的投资。
如果你是Java爱好者,最近有点想改用RoR,那么你
可以去看看Grails,或许你会因此想继续留在Java阵
营。
2008编程语言走势解盘
PHP语言:因为PHP对初学者相当友善,所以过去这
几年使用者数量增加快速,但是似乎已经到达瓶颈,
这可能是RoR造成的。随着RoR推出新版,PHP会受
到更大的挑战。连开发工具厂商CodeGear都在2007
年推出Ruby和PHP的开发工具,显见这两个语言似
乎都会逐渐走入企业市场。
Python语言:Python早就移植到.NET和Java,2008
年会持续推出修订版本,而且也会推出全新的Python
3000。Python 3000不以相容于2.x版为目的,而是要
运用过去培养出来的经验,彻底翻新Python。目前
Python编程员的需求也已经超越Perl。
2008编程语言走势解盘
Perl语言:目标远大是一件好事,但目标远大却没有
足够的资源可以完成目标,就会陷入绝境。Perl 6就
是这样的例子,它比.NET更早提出,但这几年下
来,.NET已经从1.0进入到3.5,Perl 6却连1.0都还没
诞生。Perl擅长文字数据处理,但是在大部分语言都
支持Regular Expression,加上文字数据大量XML化
之后,Perl的优势已经消失大半。
Ruby语言:Ruby可能会在2008年推出2.0,加上
2007年底已经推出的RoR 2.0, Ruby整个就是一股
挡不住的气势。可能在2008年底之前,Ruby在
TIOBE的排行榜上就会超越Perl,只剩下Python和
PHP这两个对手了。
2008编程语言走势解盘
JavaScript语言:Web应用蔚为主流,而
JavaScript又是浏览器的标准语言,所以这几
年来相当受到重视。
在Adobe推出AIR,Mozilla推出Prism之后,
JavaScript可以开发出「某些种类」的桌面应
用,JavaScript的用途变得更广。
而JavaScript的兄弟ActionScript,随着AIR的
推出又会更受欢迎一些,但是Silverlight的推
出,又会抵销ActionScript成长力道。
2008编程语言走势解盘
C语言:系统语言语言方面,C语言的地位还是一样
重要,C++则会慢慢走下坡;D语言崛起,将会接收
相当多原来C++的使用者,而Delphi则是一蹶不振,
当年Delphi/Kylix跨Windows/Linux的美梦已然消失。
D语言:多年来,D语言平均一个月推出两个版本,
改版速度相当快,在2007年1月推出1.0版后,不出几
个月,又推出2.0版。1.0版持续做bug修订,尽量不
加新特色,2.0版则继续进行实验性的翻修。虽然D语
言1.0才正式推出1年,但已经成为相当受欢迎的系统
语言,可惜至今仍然没有很好用的IDE。
2008编程语言走势解盘
Lua、PowerShell、Erlang语言:可说是未来几年窜
升力道最强的潜力之星,但都还不至于成为主流语言。
Lua是相当小的语言,适合嵌入其他的环境中,和其
他语言一同使用,根据TIOBE开发语言排行榜数据显
示,这几年Lua越来越受到重视,尤其2007年Lua更
是往上猛窜二十几个名次,由此可见Lua的需求大增。
随着Windows Vista系统的出货,未来几年
PowerShell会成为相当重要的系统管理语言。
目前的多核心环境、网络分布式计算、容错的需求,
则让Erlang持续受到重视。
2008编程语言走势解盘
在2007年第三季,Apple iPhone在美国的
Smartphone市场占有率已经到达27%,超过
Windows Mobile。
继美洲和欧洲之后,2008年iPhone会在亚洲开始贩
卖,并推出第二代机种,也预计在2008年推出SDK
(软件开发工具包),让我们可以为iPhone写原生
(Native)程序。
所以,如果你需要为Smartphone开发应用,除了考
虑Windows Mobile之外,你也必须思考是否要用
Objective-C语言开发的MacOS应用了(iPhone使用
精简版的MacOS X)。
2008编程语言走势解盘
转换语言的成本通常很高,所以一年之内,各
个语言通常不会有太大的兴衰变化,
这里是描述以2008为中心,前后数年期间各类
编程语言的整体状况;把时间拉长,发展态势
会比较明显,不受到短期震荡的影响,预测未
来就不至于太过离谱,让大家当作未来选择语
言的参考。
WEB2.0
互联网下一步,是要让所有的人都忙起来,全民织网,然后用软
件,机器的力量使这些信息更容易被需要的人找到和浏览。如果
说WEB1.0是以数据为核心的网,那WEB2.0是以人为出发点的互
联网。我们看一看最近的一些WEB2.0产品,就可以理解以上观点。
Blog: 用户织网,发表新知识,和其他用户内容链接,进而非常
自然的组织这些内容。
RSS: 用户产生内容自动分发,定阅
Podcasting: 个人视频/声频的发布/定阅
SNS: blog+人和人之间的链接
WIKI: 用户共同建设一个大百科全书
WEB2.0
从知识生产的角度看,WEB1.0的任务,是将以前没有放在网上的人类知
识,通过商业的力量,放到网上去。WEB2.0的任务是,将这些知识,通
过每个用户的浏览求知的力量,协作工作,把知识有机的组织起来,在
这个过程中继续将知识深化,并产生新的思想火花;
从内容产生者角度看,WEB1.0是商业公司为主体把内容往网上搬,而
WEB2.0则是以用户为主,以简便随意方式,通过blog/podcasting 方式
把新内容往网上搬;
从交互性看,WEB1.0是网站对用户为主;WEB2.0是以P2P为主。
从技术上看,WEB客户端化,工作效率越来越高。比如像Ajax技术,
GoogleMAP/Gmail里面用得出神入化。
我们看到,用户在互联网上的作用越来越大;他们贡献内容,传播内容,
而且提供了这些内容之间的链接关系和浏览路径。在SNS里面,内容是
以用户为核心来组织的。WEB2.0是以用户为核心的互联网。
REST
(Representational State Transfer)
REST软件架构是由Roy Thomas Fielding博士在2000年首次提出
的。他为我们描绘了开发基于互联网的网络软件的蓝图。REST软
件架构是一个抽象的概念,是一种为了实现这一互联网的超媒体
分布式系统的行动指南。利用任何的技术都可以实现这种理念。
而实现这一软件架构最著名的就是HTTP协议。通常我们把REST
也写作为REST/HTTP,在实际中往往把REST理解为基于HTTP的
REST软件架构,或者更进一步把REST和HTTP看作为等同的概
念。
今天,HTTP是互联网上应用最广泛的计算机协议。HTTP不是一
个简单的运载数据的协议,而是一个具有丰富内涵的网络软件的
协议。它不仅仅能够对于互联网资源进行唯一定位,而且还能告
诉我们对于该资源进行怎样运作。这也是REST软件架构当中最重
要的两个理念。而REST软件架构理念是真正理解HTTP协议而形
成的。有了REST软件架构理念出现,才使得软件业避免了对
HTTP协议的片面理解。只有正确的理论指导,才能避免在软件开
发的实际工作过程中少走弯路。
REST与URI(资源定位)
REST软件架构之所以是一个超媒体系统,是
因为它可以把网络上所有资源进行唯一的定位,
不管你的文件是图片、文件Word还是视频文
件,也不管你的文件是txt文件格式、xml文件
格式还是其它文本文件格式。它利用支持
HTTP的TCP/IP协议来确定互联网上的资源。
REST与CRUD原则
REST软件架构遵循了CRUD原则,该原则告诉我们
对于资源(包括网络资源)只需要四种行为:创建
(Create)、获取(Read)、更新(Update)和销
毁(DELETE)就可以完成对其操作和处理了。其实
世界万物都是遵循这一规律:生、见、变、灭。所以
计算机世界也不例外。这个原则是源自于我们对于数
据库表的数据操作:insert(生)、select(见)、
update(变)和delete(灭),所以有时候CRUD也
写作为RUDI,其中的I就是insert。这四个操作是一种
原子操作,即一种无法再分的操作,通过它们可以构
造复杂的操作过程,正如数学上四则运算是数字的最
基本的运算一样。
REST与网络服务
尽管在Java语言世界中网络服务目前是以SOAP技术为主,但是REST将
是网络服务的另一选择,并且是真正意义上的网络服务。基于REST思想
的网络服务不久的将来也会成为是网络服务的主流技术。REST不仅仅把
HTTP作为自己的数据运输协议,而且也作为直接进行数据处理的工具。
而当前的网络服务技术都需要使用其它手段来完成数据处理工作,它们
完全独立于HTTP协议来进行的,这样增加了大量的复杂软件架构设计工
作。REST的思想充分利用了现有的HTTP技术的网络能力。在德国电视
台上曾经出现过一个这样的五十万欧元智力题:如何实现网络服务才能
充分利用现有的HTTP协议?该问题给出了四个答案:去问微软;
WSDL2.0/SOAP1.2;WS-Transfer;根本没有。这个问题告诉我们
HTTP并不是一个简单的数据传来传去的协议,而是一个聪明的会表现自
己的协议,这也许是REST = Representational State Transfer的真正含
义。
实际上目前很多大公司已经采用了REST技术作为网络服务,如Google、
Amazon等。在Java语言中重要的两个以SOAP技术开始的网络服务框架
XFire和Axis也把REST作为自己的另一种选择。它们的新的项目分别是
Apache CXF 和Axis2 。Java语言也制定关于REST网络服务规范:JAXRS: Java API for RESTful Web Services (JSR 311)。相信还会出现更多
与REST相关的激动人心的信息。
REST与AJAX技术
尽管AJAX技术的出现才不到两年时间,但是AJAX技术遵循了
REST的一些重要原则。AJAX技术充分利用了HTTP来获取网络资
源并且实现了HTTP没有的对于异步数据进行传输的功能。AJAX
技术还使得软件更好地实现分布性功能,在一个企业内只要一个
人下载了AJAX引擎,其它企业内部的人员,就可以共享该资源了。
AJAX技术遵守REST准则的应用程序中简单和可伸缩的架构,凡
是采用AJAX技术的页面简洁而又丰富,一个页面表现了丰富多彩
的形态。
AJAX技术还使用了一种不同于XML格式的JSON文件格式,这个
意义在哪里呢?在REST软件架构下我们不能对于XML文件进行序
列化处理,这样程序员必须要使用自己的XML绑定框架。而以序
列化的JavaScript对象为基础的JSON已经获得了广泛认可,它被
认为能以远比XML更好的方式来序列化和传输简单数据结构,而
且它更简洁。这对REST是一个极大贡献和补充。
当前的网络应用软件还违背了REST的“无状态服务器”约束。
REST服务器只知道自己的状态。REST不关心客户端的状态,客
户端的状态自己来管理,这是AJAX技术的应用之地。通过AJAX
技术,可以发挥有状态网络客户机的优势。而REST的服务器关心
的是从所有网络客户端发送到服务器操作的顺序。这样使得互联
网这样一个巨大的网络得到有序的管理。
REST与Rails框架
Ruby on Rails框架(简称Rails或者Rails框架)是一
个基于Ruby语言的越来越流行的网络应用软件开发
框架。它提供了关于REST最好的支持,也是当今应
用REST最成功的一个软件开发框架。Rails框架(从
版本1.2.x起)成为了第一个引入REST作为核心思想
的主流网络软件开发框架。在Rails框架的充分利用了
REST软件架构之后,人们更加坚信REST的重要性
和必要性。Rails利用REST软件架构思想对网络服务
也提供了一流的支持。从最直观的角度看待REST,
它是网络服务最理想的手段,但是Rails框架把REST
带到了网络应用软件开发框架。这是一次飞跃,让
REST的思想从网络服务的应用提升到了网络应用软
件开发。利用REST思想的simply_restful插件已经成
为了Rails框架的核心内容。
REST安全性
我们把现有基于SOAP的网络服务和基于REST/HTTP网络服务作
个比喻,前者是一种传统的寄信方式,而后者是现代网络的电子
邮件方式。要是是寄信和电子邮件都有病毒存在的话,传统的寄
信被送到对方就很危险,而电子邮件是开发的,电子邮件供应商
比如Google为我们检查了电子邮件是否有病毒。这里并不是说明
SOAP网络服务消息包含义病毒,而是说明HTTP是无法处理
SOAP信息包究竟好不好,需要额外的软件工具解决这一问题,包
括防火墙也用不上和管不了。
REST/HTTP网络服务的信息包可以被防火墙理解和控制。你可以
按照操作和链接进行过滤信息包,如你可以规定从外部来的只能
读取(GET操作)自己服务器的资源。这样对于系统管理员而言
使得软件管理更为简单。REST的安全性还可以利用传输安全协议
SSL/TLS、基本和摘要式认证(Basic und Digest
Authentication)。除了这些REST自身的安全性功能外,还可以
利用像基于信息的Web Services Security(JSR 155)作为REST
不错的补充。
参考文献
中文参考文献
http://www.ibm.com/developerworks/cn/web/waajaxarch/
http://www.ibm.com/developerworks/cn/java/jcb08016/
Roy Thomas Fielding博士论文中文版本
http://e2c.91yee.com/columns/
Roy Thomas Fielding博士论文英文版本
http://www.ics.uci.edu/~fielding/pubs/dissertation/top
.htm
RSS
RSS是在线共享内容的一种简易方式(也叫聚合内容,
Really Simple Syndication)。通常在时效性比较强
的内容上使用RSS订阅能更快速获取信息,网站提供
RSS输出,有利于让用户获取网站内容的最新更新。
网络用户可以在客户端借助于支持RSS的聚合工具软
件(例如SharpReader,NewzCrawler、
FeedDemon),在不打开网站内容页面的情况下阅
读支持RSS输出的网站内容。
说得更加简单一点,RSS就是一种用来分发和汇集网
页内容的XML格式!如果你还是不太明白,没有关系,
RSS是什么其实并不重要,重要的是RSS可以做什么,
下面我们就来了解一下,RSS能给我们带来什么?
RSS可以干什么
1.订阅BLOG(你可以订阅你工作中所需的技术文章;
也可以订阅与你有共同爱好的作者的Blog,总之,你
对什么感兴趣你就可以订什么)
2.订阅新闻(无论是奇闻怪事、明星消息、体坛风云,
只要你想知道的,都可以订阅)
你再也不用一个网站一个网站,一个网页一个网页去
逛了。只要这将你需要的内容订阅在一个RSS阅读器
中,这些内容就会自动出现你的阅读器里,你也不必
为了一个急切想知道的消息而不断的刷新网页,因为
一旦有了更新,RSS阅读器就会自己通知你!
RSS阅读器
目前,RSS阅读器基本可以分为两类。
第一类大多数阅读器是运行在计算机桌面上的应用程序,通过所
订阅网站的新闻供应,可自动、定时地更新新闻标题。在该类阅
读器中,有Awasu、FeedDemon和RSSReader这三款流行的阅读
器,都提供免费试用版和付费高级版。国内最近也推出了几款
RSS阅读器:周博通,看天下,博阅。另外,开源社区也推出了很
多优秀的阅读器,RSSOWl(完全java开发,点击下载)它不仅是完
全支持中文界面,而且还是完全的免费软件!(后面我们就将以开
源软件周博通和rssowl为例,为大家介绍怎样来使用RSS阅读器周伯通,怎样使用RSS阅读器-rssowl))
第二类新闻阅读器通常是内嵌于已在计算机中运行的应用程序中。
例如,NewsGator内嵌在微软的Outlook中,所订阅的新闻标题位
于Outlook的收件箱文件夹中。另外,Pluck内嵌在Internet
Explorer浏览器中!
另外,FireFox浏览器内置对RSS支持,可以使用Firefox订阅RSS
哦。
RSS的联合(Syndication)和聚
合(Aggregation)
发布一个RSS文件(RSS Feed)后,这个RSS Feed中包含的信
息就能直接被其他站点调用,而且由于这些数据都是标准的XML
格式,所以也能在其他的终端和服务中使用,如PDA、手机、邮
件列表等。而且一个网站联盟(比如专门讨论旅游的网站系列)
也能通过互相调用彼此的RSS Feed,自动的显示网站联盟中其他
站点上的最新信息,这就叫着RSS的联合。这种联合就导致一个
站点的内容更新越及时、RSS Feed被调用的越多,该站点的知名
度就会越高,从而形成一种良性循环。
而所谓RSS聚合,就是通过软件工具的方法从网络上搜集各种
RSS Feed并在一个界面中提供给读者进行阅读。这些软件可以是
在线的WEB工具,如http://my.netscape.com,
http://my.userland.com, http://www.xmltree.com,
http://www.moreover.com,http://www.oreillynet.com/meerkat 等,
当然,可以使用我们以上提到的客户端工具。
RSS的未来发展
随着越来越多的站点对RSS的支持,RSS已经
成为目前最成功的XML应用。RSS搭建了信息
迅速传播的一个技术平台,使得每个人都成为
潜在的信息提供者。相信很快我们就会看到大
量基于RSS的专业门户、聚合站点和更精确的
搜索引擎。
常见RSS订阅工具
BitsCast RSS News Reader/Podcaster
http://www.bitscast.com/software
onelurv http://onelurv.com/
BOKEE
GreatNews http://www.curiostudio.com/
HEXUN RSS READER 和讯博揽
iSpace Desktop
Liferea
NewsFire
NetNewsWire
Plazoo
RSS Bandit
RSSOwl http://www.rssowl.org/
RSS Reader
SharpReader
Straw
Vienna http://vienna-rss.sourceforge.net/
百博 http://www.bbreader.com
新浪点点通阅读器
参考文献
1、 RSS 0.9 Specification
http://www.purplepages.ie/RSS/netscape/rss
0.90.html
2、 RSS 1.0 Specification
http://web.resource.org/rss/1.0/spec
3、 RSS 2.0 Specification
http://http://192.168.18.100:6666/view/list.exl
ATOM
ATOM是一种订阅网志的格式。它与RSS相比来讲,
有更大的弹性。
atom 是一种基于XML的文档格式以及基于HTTP的协
议,它被站点和客户工具等用来聚合网络内容,包括
weblog和新闻标题等,它借鉴了各种版本RSS的使用
经验
Atom正走在通往IETF标准的路上,在这之前,Atom
的最后一个版本是"Atom 0.3",并且已经被相当广泛
的聚合工具使用在发布和使用(consuming)上。值得
一提的是, Blogger和Gmail这两个由Google提供的服
务正在使用Atom.
开放API
以前的开放API(应用程序接口)主要指桌面应用软件,希望通过
开放API融合更多的应用。在WEB1.0时代只有少数网站,比如
EBAY, 亚马逊公司(Amazon)、雅虎公司、Google公司等,在
设计之初就遵循各种工业化标准,进而开放API接口,正是由于这
些开放的API,他们获得 了不少有趣、有意思的应用。但大多数
公司当时还没有这种意识,不过在Web 2.0时代,开放API已经成
为不可忽视的趋势。
对于公司来说,技术领域的竞争已经演化为标准之争,标准的形
成在于有多少人在使用,因此开放API就意味更多的人采用,也就
意味着标准。Google公司 显然深谙此道。它所推出的诸多产品都
是基于开放的API标准。最典型的例子就是Google map,开放
Google Map的API后,Google公司无需花费力气做更多的市场推
广,其他公司就会主动地整合它的应用。如前文我们提到的美国
房地产交易地图网就是在其网站 中主动整合Google Map。正是看
到开放后的巨大前景,微软、雅虎、Skype也纷纷加入其中。
AJAX
AJAX的全称是Asynchronous JavaScript and XML,它不是一种
技术而是数种技术的组合。AJAX采用远程脚本调用技术,通过
JavaScript语言与XML Http Request对象来实现数据请求,将处理
由服务器转移到客户端,减少了服务器的资源占用,加快了数据
处理的速度。采用AJAX开发的软件能让你在使用网络应用软件时
感觉就象在本机上一样。
目前AJAX技术已经广泛应用于网络应用软件开发中,Google也许
是AJAX技术开发投入最大收获最多的公司,AJAX已经成功应用
于GMail、Google Suggest和Google Maps等网络应用软件中。
除了Google以外还有更多的公司在采用AJAX。在AJAX的帮助下
Zimbra公司开发的电子邮件中,比GMail和HotMail更加互动。
Meebo.com公司也在即时通讯软件中采用AJAX技术,以创造更好
的用户体验。即使微软也不能阻挡AJAX的魅力,微软声称将在下
一代 HotMail中加入AJAX工具条。
Ajax 工具和技术综述
Ajax (Asynchronous JavaScript + XML) 编程技术正逐渐主导
Web 应用程序开发领域。每天都有新的开发人员步入 Ajax 开发的
殿堂,他们拥有不同的开发背景。本系列的第 1 部分将提供来自
IBM® Ajax 开发人员专家组的 Ajax 开发资源备忘单。作者根据他
们自己的 ramp-up 经验为您提供了一些实用的信息,这些信息可
以帮助您快速进入高效 Ajax 开发的轨道。
Ajax 是一种 Web 应用程序客户机技术,它结合了 JavaScript、层
叠样式表(Cascading Style Sheets,CSS)、HTML、
XMLHttpRequest 对象和文档对象模型(Document Object Model,
DOM),关于各种标准的更多信息,请参阅 参考资料。运行在浏
览器上的 Ajax 应用程序以一种异步的方式与 Web 服务器通信,
并且只更新页面的一部分。通过利用 Ajax 技术,可以提供丰富的、
基于浏览器的用户体验。
在开始 Ajax 之旅以前,需要熟悉很多不同的语言、标准、工具和
库。一开始就要在不同选项之间做出选择并组合出一个开发环境
来可能有些勉为其难。作者将根据他们自己的 ramp-up(项目初
始阶段的准备工作)经验帮助您在旅途中避免可能遇到的一些比
较常见的、令人厌烦的问题。
Ajax 工具和技术综述
Ajax 将改变用户在网站上的体验,之前的单击-显示页面式的体验将变成具有交互性、
灵活性的桌面应用程序体验。用户可以避免页面重新加载,避免等待下一部分内容的
呈现。您可能在想,这一切听起来是不错,但是如何才能做得到呢?为了回答这个问
题,先来看看 Ajax 技术背后的一些幕后故事。
Ajax 是以下 Web 技术和标准的集合,它允许使用客户端的机器在背后运行应用程序逻
辑的重要部分,而不仅仅是呈现应用程序的输出:
超文本标记语言(Hypertext Markup Language,HTML):定义最终呈现给用户的内
容。
层叠样式表(Cascading Style Sheets,CSS):定义所呈现内容的样式(或装饰)。
文档对象模型(Document Object Model,DOM):一种 API,浏览器使用它将被呈
现内容公开给 JavaScript 脚本。然后,脚本可以使用 DOM 在用户看到内容之前动态
地修改内容。
XmlHttpRequest 对象:为浏览器与服务器之间的交互提供便利,通过 JavaScript 脚本
调用。
JavaScript:在浏览器中执行的一种编程语言,将所有其他的 Ajax 组成部分黏合在一
起。脚本可以侦听浏览器中发生的事件(例如单击一个按钮),并使用
XmlHttpRequests 回调服务器以对事件作出反应,然后根据返回的结果修改 DOM 树。
所有这些技术都在用户的 Web 浏览器中执行,用户的 Web 浏览器充当执行 Ajax 程序
的平台。
Ajax 工具和技术综述
如果要使用 Ajax,那么有一点值得格外注意:组成它
的技术虽然是基于标准的,但又是特定于浏览器的。
换句话说,同一个应用程序在不同的浏览器上可能表
现出不同的行为。然而,由于既不可能限制用户使用
特定的浏览器,又不可能忽略客户机的浏览器可能不
支持 CSS 或 DOM 这一事实,因此,作为应用程序
的创建者,您需要理解各种不同浏览器之间的差异。
要成为一名高效的 Ajax 开发人员,需要:
了解形成 Ajax 开发基础的技术。
理解可用的运行时平台和 Web 浏览器。
开发 Ajax 应用程序时使用支持各种语言的 IDE。
拥有用于各种环境和语言的调试器和应用程序测试工
具。
信息源
developerWorks 上由 Brett McLaughlin 撰写的 掌握 Ajax 系列是
最好的 Ajax 教程之一。该系列不要求预先知道多少 Ajax 编程知
识,并且描述了各种与 Ajax 相关的技术。如果您想更好地理解
Web 架构,那么可能需要对 Representational State Transfer
(REST) 有所熟悉。“How to Create a REST Protocol”(请参阅
参考资料)这篇文章可以作为这一方面很好的入门资料。
阅读完 掌握 Ajax 系列,并且亲自开始一些开发之后,您还将需要
一些其他的参考信息。W3Schools(请参阅 参考资料)提供了核
心 Ajax 技术(JavaScript、CSS、HTML、DOM、XML 等)的在
线参考信息。
如果您使用的是 Mozilla Firefox 浏览器,那么应该使用 DevEdge
侧栏(请参阅 参考资料)。这些侧栏包含各种 Ajax 技术标准的索
引,您可以使用它们作为参考指南。
最后,如果您想到 Ajax 社区去感受一下,那么应该订阅 Ajaxian
博客(请参阅 参考资料)。
浏览器作为运行时环境
Web 浏览器不仅是 Ajax 部署环境,同时还是
调试环境。大多数浏览器都可以添加调试辅助
工具,例如 DOM 树查看器或调试器。文章下
节将对以下各种流行的浏览器作一个概述:
Microsoft® Internet Explorer (IE)
Firefox
Safari
Internet Explorer
IE 一直是大多数用户的选择。IE6 是一款成熟的浏览器,具有非常深的
市场底蕴。很多 CSS 和 DOM 特性在 IE6 中不受支持,或者以一种专用
的形式提供。使用 IE6 的开发人员可能会遇到以下一些问题:
缓慢的 JavaScript 解释器和不一致的标准实现。
缺少透明的 PNG 支持。
DOM 事件:一个事件可能在 Firefox 中使用一个名称,而在 IE 中又使用
另一个名称。有些事件的调用顺序不一样,在 IE 中和在 Firefox 中相同
的事件对象可能具有不同的属性。有关这一问题的更多信息,请阅读
“把应用程序从 Internet Explorer 迁移到 Mozilla”(请参阅 参考资料)。
未实现的 CSS 属性,例如 minimum/maximum height、selectors 等等。
尽管存在这些问题,您还是应该相信大多数用户都是使用这个浏览器。
也可以试着使用各种不同的库从而在一定程度上填补 IE6 的不足,例如
/IE7/(请参阅 参考资料)。
IE7 在 IE6 的基础上有了很多明显的改进,例如对标签的支持。对于开发
人员而言,隐藏的改进更为重要。IE7 提供了一个性能更佳的 JavaScript
解释器,并修复了 IE6 中的很多缺陷(例如 CSS),使得最遵从标准的
Ajax 应用程序只需要少量的修改便可以在该浏览器上运行。
IE 调试辅助工具
可以使用以下工具在 IE 中调试应用程序:
IE Developer Toolbar:允许更好地控制 IE 环境(缓
存,cookie),浏览 DOM 树,以及浏览和操纵元素
的样式。在分析由应用程序生成的页面时,这是非常
有用的工具。(IE Developer Toolbar 可以从
Microsoft 下载。参考资料 中提供了下载链接。)
Microsoft Script Debugger: 随 Microsoft Office(可
以从 Microsoft 下载,请参阅 参考资料)一起发布,
通过它可以在 JavaScript 代码中设置断点,观察变量,
还可以执行常规的调试例程。注意,在调试时,建议
在每个调试会话之前通过 IE Developer Toolbar 禁用
缓存,否则后面会调试缓存版本的代码。
IE 调试辅助工具
IE 相关浏览器
可以使用 Trident(IE 浏览器引擎)创建 “新”
的浏览器,例如 Maxthon。这里新字打上了引
号,因为从开发人员的角度来看,浏览器的关
键特(例如对 Ajax 的支持)仍然相同。(请
参阅 参考资料 了解更多关于 Trident 的知识。)
Mozilla Firefox
虽然 Firefox 已经出来好几个版本,但是这里只讨论
Firefox 2.0。开发人员和超级用户常常使用 Firefox,
它是 UNIX®-类操作系统的首选,而且是开放源码的,
除了 IE 之外,它是最流行的浏览器。
Firefox 有一个速度很快的 JavaScript 解释器,并且
具有各种 Web 标准的优异的实现。由于它的 Ajax 友
好性,我们强烈建议将 Firefox 用于大多数 Ajax 开发。
通常,很多 Ajax 开发人员都是在 Firefox 上开始应用
程序开发的,然后才转而使用其它浏览器。
Firefox 调试辅助工具
Firefox 具有一个强大的、开放的扩展机制,它的社区借助这种机
制创建了大量的 Web 开发辅助工具。然而,到目前为止,
Firebug(请参阅 参考资料)是其中最为流行的。(要了解关于
Firebug 功能的更多细节,请参阅 “Ajax Debugging with
Firebug”)。Firebug 是一个集成的扩展,通过它可以:
使用断点、变量查看和逐步方式来调试 JavaScript 代码。
查看网络状况。
查看和优化各种不同元素的 DOM 树和 CSS。
Firebug 1.0 的强大性和灵活性为 Ajax 开发树立了里程碑,也是使
用 Firefox 作为首选开发浏览器的有力的理由。
Firefox 相关的浏览器
一些浏览器,例如 Camino,使用了 Firefox 的布局引擎 Mozilla
Gecko(请参阅 参考资料)。这些浏览器通过一个匹配的 Gecko
版本能够提供与 Firefox 相同的功能。
Safari
Safari 是随 MacOSX 一起发布的浏览器(从
第 3 版开始,也在 Windows® 上运行。)
Safari 虽然比 Firefox 和 IE7 快很多,但是缺
少对标准的支持(不过最新的 WebKit 构建有
了一些改进;文章下节将会更详细地介绍
WebKit)。还应注意,Safari 开发人员社区规
模远远小于 Firefox 和 IE 的开发人员社区。因
此,网上关于 Safari 的信息较少,而且很多库
都没有在 Safari 上经过良好的测试。
Safari 调试辅助工具
Safari 浏览器引擎是在一个名为 WebKit 的开放源码
项目(请参阅 参考资料)中开发的。为了在 Safari
中调试应用程序,建议使用一个 WebKit 构建。该构
建包括:
经过定制的带有 CSS 和 DOM 查看器的浏览器。
Drosera: 一个 JavaScript 调试器。Drosera 可用于调
试应用程序,但是与 Firebug 相比其特性比较有限。
如果您坚持在 Safari 中测试应用程序,那么可以打开
Safari Debug 菜单,通过该菜单可以查看 DOM 树、
CSS 和缓存等。
Safari 相关的浏览器
WebKit 应用于很多浏览器,其中最引入注目的是 OmniWeb。
Ajax IDE 和工具
在开发新的 Ajax 应用程序时,如果所使用的 IDE 支持所有 Ajax 相关技
术并且提供快捷、友好的开发环境和 UI 将会使您如虎添翼。在选择一款
Ajax IDE 时,需要考虑以下一些特性:
具有自动完成、颜色突出显示、错误提示等功能的语法制导编辑功能
(用于 HTML、CSS、JavaScript 和 DOM)
各种技术的相关文档
集成的 JavaScript 调试器
网络监控功能
DOM 内省
框架集成
虽然您可能会考虑购买一个 IDE,但其实 Eclipse 和它的相关插件就提供
了一个功能完善的、基于开放源码的 Ajax IDE,这个 IDE 可以免费下载。
本节将讨论以下这些基于 Eclipse 的、包括插件的 Ajax IDE:
含 Web 工具箱(toolkit)的 Eclipse
Eclipse ATF
Aptana
含有 Web 工具箱的 Eclipse
如果您是一名 Java™ 开发人员,负责服务器端的
Java 开发,那么使用 Eclipse Web 工具箱也是开始
基本 Ajax 开发的简单易行的方法。通过添加 Eclipse
的 Web 工具(请参阅 参考资料),可以获得一个可
用于开发 Web 工件的基本环境,还可以获得可编辑
HTML、CSS 和 JavaScript 文件的编辑器和编辑工具。
注意,Eclipse Web 工具环境不限于 Ajax 开发,它还
支持侧重于服务器端的 Web 应用程序开发。因此,
它提供了诸如语法突出显示和基本代码完成之类的核
心功能。它并未提供特定于 Ajax 开发任务的调试功
能或 DOM 操纵功能。
Eclipse ATF
您可以安装 Eclipse Ajax Toolkit Framework (ATF) 环
境(请参阅 参考资料),并将其与 Eclipse Web 工
具箱相结合,从而产生一个强大的、支持 Ajax 开发
需求所有方面的环境。ATF 提供了以下特性:
一个 DOM 浏览器和 CSS 运行时编辑器
一个 JavaScript 调试器(通过利用 Mozilla XUL 运行
程序)
网络流量监控
通过库配置文件实现常用库的简单库集成
与 JSLint(请参阅 参考资料)的集成,以执行
JavaScript 验证
该工具箱中一个非常有价值的特性是在集成的 XUL
运行程序中运行、测试和检查应用程序。
SOA and Web services
面向服务的体系结构(Service-Oriented Architecture,SOA)是
一种 IT 体系结构风格,支持将您的业务转换为一组相互链接的服
务或可重复业务任务,可在需要时通过网络访问这些服务和任务。
这个网络可以是本地网络、Internet,也可以分散于各地且采用不
同的技术,通过对来自纽约、伦敦和中国香港的服务进行组合,
可让最终用户感觉似乎这些服务就安装在本地桌面上一样。可以
对这些服务进行结合,以完成特定的业务任务,从而让您的业务
快速适应不断变化的客观条件和需求。
当在战略业务目标的引导下进行 SOA 实现工作时,可确保对业务
进行积极转换,并能够实现 SOA 的好处,具体如下:
IT 与业务的一致性
IT 资产的最大化重用
这些有助于确保在耗资巨大的 IT 项目中的投资能够给业务带来长
远的价值。
那么,该如何步入 SOA 的领地,它又会如何影响您的业务呢?
IBM 确定了五个切入点,可确保所进行的每个基于 SOA 的解决方
案都能提供真正的业务价值。每个切入点都提供了相应的场景或
已定义的方法,以帮助实现相应的技术,从而实现每个切入点所
定义的业务价值。
SOA 切入点
IBM 定义的五个切入点(均基于实际的客户经验确定)能帮助您和您的业务实现预定义的
SOA 解决方案,从而从中获益。这些切入点同时受到业务需求(人员、流程和信息切入点)
和 IT 需求(连接性和重用切入点)的驱动。以下是五个切入点的一般描述信息:
人员:SOA 的这个切入点关注用户体验,以帮助生成调用和实现更好的协作,从而获得一致
的人员与流程交互,提高业务效率。例如,通过使用 SOA,可以创建基于服务的 Portlet 来
提高此协作。
流程:流程切入点可帮助企业了解其业务中发生的情况,从而支持其对现有业务模型进行改
进。通过使用 SOA,可以将业务流程转换为可重用且具有灵活性的服务,从而改进和优化这
些新流程。
信息:通过使用 SOA 的这个切入点,能以一致而可见的方式利用公司中的信息。通过在所
有业务领域提供这个一致而受信任的信息,可促进企业各个领域的创新工作,从而更为有效
地进行竞争。通过使用 SOA,可以更好地控制信息,而且通过信息与业务流程的结合,可以
发现很多有意义的新关系。
连接性:利用连接性切入点,可以有效地连接基础设施,从而将企业中的所有人员、流程和
信息整合到一起。通过在服务间和整个环境中实现灵活的 SOA 连接,可以获取现有业务流
程并在不需要太多工作的情况下通过其他业务通道提供此流程。甚至还能以安全的方式连接
防火墙外的外部合作伙伴。
重用:通过 SOA 重用服务,可以充分利用企业中已经存在的服务。通过对现有资源进行构
建,可以简化业务流程,在整个企业内确保一致性并缩短开发时间。所有这些将能帮助您节
约大量的时间和资金。另外,还能减少服务中的功能重复,并能获得使用企业中为大家所熟
悉的经过验证的核心应用程序的好处。
SOA 场景
之所以定义切入点,是为了帮助客户了解如何认识
SOA。不过,还需要进一步的实现细节来帮助客户的
业务和 IT 团队开始 SOA 之旅。而这正是需要更为具
体的场景的原因。
同样,IBM 技术专家在参考实际的客户经验和多年的
积累的情况下,认识到业务部门在设计和实现 SOA
解决方案的过程中经常会遵循多个常见的场景。通过
定义这些场景,IBM 为您提供了预定义的真实方法,
帮助实现 SOA 解决方案。每个场景都提供了经过测
试和集成的产品或实现,用于实现此场景。因此,可
以将这些场景映射到您公司具体的目标和需求,从而
很好地确定自己如何实现这些好处。
SOA 场景
服务创建:创建灵活的基于服务的业务应用程序。新的面向服务的应用程序将业
务行为作为服务公开,同时还能重用作为服务公开的业务逻辑。
服务连接性:无论何时何地使用何种工具,都能使用中间层服务网关或总线让各
种应用程序访问核心服务集,从而通过无缝的消息和信息流将企业中的人员、流
程和信息连接起来。
交互与协作服务:必须通过多种设备(如浏览器、PC 和移动设备)向人类用户
提供一个或一组服务。交互与协作服务还可通过将这些服务聚合为视图,以交付
信息并在业务流程的上下文进行交互,从而提高人员工作效率。
SOA 所支持的业务流程管理:业务流程管理是将软件功能和业务专业知识相结合
来加速流程改进和促进业务创新的学科。
作为服务的信息:“作为服务的信息”可在企业内作为可重用服务访问复杂的异
类数据源。
SOA 设计:通过一组角色、方法和构件保持业务设计建模和 IT 解决方案设计的
一致,以提供一组供优化的显式业务流程和用于组合及集成的服务。
SOA 治理:建立并执行 SOA 开发与运行时流程。定义策略、流程和工具来监视
服务的归属、使用人、使用方式及提供时间。
SOA 安全性和管理:作为 IT 服务管理(IT Service Management,ITSM)服务
一部分的发现、监视、保护、供应、更改和生命周期管理工作。
SOA 场景
之前讨论的五个 SOA 切入点直接映射到(即具有一对一关系)本
列表中的前五个场景。(例如,重用直接映射到服务创建,而连
接性直接映射到服务连接性。)我们还将讨论其他 SOA 场景,这
些场景均以上面的五个切入点为基础。即 SOA 设计、SOA 治理
与 SOA 安全性以及管理。
让我们花一点时间给出一个实际的切入点、场景及其实现。在图 1
中,可以看到重用切入点如何直接映射到服务创建场景,而后者
包含四个实现,其中一个名为“从头创建新服务”(create new
services from scratch)。因此,将这些加以结合,在此示例中,您
将通过重用切入点进入 SOA,此切入点可帮助您对公司的现有服
务加以充分利用。如果随后发现缺少主要 SOA 服务,“从头创建
新服务”实现详细说明了如何创建 SOA 服务。
SOA 切入点和场景
您现在应该已经对五个 SOA 切入点和八个场
景很熟悉,而且也应该知道了每个场景如何通
过多个实现帮助您实现 SOA 解决方案。图 1
给出了一个示例,说明了可以如何将这些部分
进行混合和匹配,以提供任何企业都能够利用
的各种 SOA 方法。为了进一步说明这些方法,
在本文剩下的部分,我们将了解 JK
Enterprises 如何在整个企业实现 SOA 所带来
的很多好处。
SAAS
SaaS是Software-as-a-service(软件即服务)的简称,
它是一种通过Internet提供软件的模式,用户不用再
购买软件,而改用向提供商租用基于Web的软件,来
管理企业经营活动,且无需对软件进行维护,服务提
供商会全权管理和维护软件,对于许多小型企业来说,
SaaS是采用先进技术的最好途径,它消除了企业购
买、构建和维护基础设施和应用程序的需要,近年来,
SaaS的兴起已经给传统套装软件厂商带来真实的压
力。
SaaS服务提供模式
SaaS服务提供商为中小企业搭建信息化所需要的所
有网络基础设施及软件、硬件运作平台,并负责所有
前期的实施、后期的维护等一系列服务,企业无需购
买软硬件、建设机房、招聘IT人员,只需前期支付一
次性的项目实施费和定期的软件租赁服务费,即可通
过互联网享用信息系统。服务提供商通过有效的技术
措施,可以保证每家企业数据的安全性和保密性。企
业采用SaaS服务模式在效果上与企业自建信息系统
基本没有区别,但节省了大量用于购买IT产品、技术
和维护运行的资金,且像打开自来水龙头就能用水一
样,方便地利用信息化系统,从而大幅度降低了中小
企业信息化的门槛与风险。
SaaS服务的优势
对企业来说,SaaS的优点在于:
⒈ 从技术方面来看:企业无需再配备IT方面的专业
技术人员,同时又能得到最新的技术应用,满足企业
对信息管理的需求。
⒉ 从投资方面来看:企业只以相对低廉的“月费”
方式投资,不用一次性投资到位,不占用过多的营运
资金,从而缓解企业资金不足的压力;不用考虑成本
折旧问题,并能及时获得最新硬件平台及最佳解决方
案。
⒊ 从维护和管理方面来看:由于企业采取租用的方
式来进行物流业务管理,不需要专门的维护和管理人
员,也不需要为维护和管理人员支付额外费用。很大
程度上缓解企业在人力、财力上的压力,使其能够集
计算环境的根本性变革
虚拟化技术
虚拟化是一个广义的术语,在计算机方面通常
是指计算元件在虚拟的基础上而不是真实的基
础上运行。虚拟化技术可以扩大硬件的容量,
简化软件的重新配置过程。
CPU的虚拟化技术可以单CPU模拟多CPU并
行,允许一个平台同时运行多个操作系统,并
且应用程序都可以在相互独立的空间内运行而
互不影响,从而显著提高计算机的工作效率。
虚拟化技术
虚拟化技术与多任务以及超线程技术是完全不同的。
多任务是指在一个操作系统中多个程序同时并行运行,
而在虚拟化技术中,则可以同时运行多个操作系统,
而且每一个操作系统中都有多个程序运行,每一个操
作系统都运行在一个虚拟的CPU或者是虚拟主机上;
而超线程技术只是单CPU模拟双CPU来平衡程序运行
性能,这两个模拟出来的CPU是不能分离的,只能协
同工作。
虚拟化技术也与目前VMware Workstation等同样能达
到虚拟效果的软件不同,是一个巨大的技术进步,具
体表现在减少软件虚拟机相关开销和支持更广泛的操
作系统方面。
虚拟化技术
纯软件虚拟化解决方案存在很多限制。“客户”操作系统很多情
况下是通过VMM(Virtual Machine Monitor,虚拟机监视器)来与硬
件进行通信,由VMM来决定其对系统上所有虚拟机的访问。(注意,
大多数处理器和内存访问独立于VMM,只在发生特定事件时才会
涉及VMM,如页面错误。)
在纯软件虚拟化解决方案中,VMM在软件套件中的位置是传统意
义上操作系统所处的位置,而操作系统的位置是传统意义上应用
程序所处的位置。这一额外的通信层需要进行二进制转换,以通
过提供到物理资源(如处理器、内存、存储、显卡和网卡等)的接口,
模拟硬件环境。这种转换必然会增加系统的复杂性。
此外,客户操作系统的支持受到虚拟机环境的能力限制,这会阻
碍特定技术的部署,如64位客户操作系统。在纯软件解决方案中,
软件堆栈增加的复杂性意味着,这些环境难于管理,因而会加大
确保系统可靠性和安全性的困难。
虚拟化技术
而CPU的虚拟化技术是一种硬件方案,支持虚拟技术
的CPU带有特别优化过的指令集来控制虚拟过程,通
过这些指令集,VMM会很容易提高性能,相比软件
的虚拟实现方式会很大程度上提高性能。
虚拟化技术可提供基于芯片的功能,借助兼容VMM
软件能够改进纯软件解决方案。由于虚拟化硬件可提
供全新的架构,支持操作系统直接在上面运行,从而
无需进行二进制转换,减少了相关的性能开销,极大
简化了VMM设计,进而使VMM能够按通用标准进行
编写,性能更加强大。
另外,在纯软件VMM中,目前缺少对64位客户操作
系统的支持,而随着64位处理器的不断普及,这一严
重缺点也日益突出。而CPU的虚拟化技术除支持广泛
的传统操作系统之外,还支持64位客户操作系统。
虚拟化技术
两大CPU巨头Intel和AMD都想方设法在虚拟化领域中
占得先机,但是AMD的虚拟化技术在时间上要比Intel
落后几个月。
Intel自2005年末开始便在其处理器产品线中推广应用
Intel Virtualization Technology(Intel VT)虚拟化技术。
目前,Intel已经发布了具有Intel VT虚拟化技术的一
系列处理器产品,包括桌面平台的Pentium 4 6X2系
列、Pentium D 9X0系列和Pentium EE 9XX系列,以
及服务器/工作站平台上的基于Paxville核心的Xeon系
列;同时绝大多数的Intel下一代主流处理器,包括
Merom核心移动处理器,Conroe核心桌面处理器,
Woodcrest核心服务器处理器,以及基于Montecito核
心的Itanium 2高端服务器处理器都将支持Intel VT虚
拟化技术。
而AMD的具有代号为“Pacific”虚拟化技术的CPU不
久也会发布。
软件过程新方法
EssUP(Essential Unified Process)
精炼统一过程
软件过程的一个新鲜起点
精炼统一过程(Essential Unified Process)结合了来自统一过程
阵营、敏捷阵营、过程改进阵营的实践。
精炼统一过程(EssUP)--Essential Unified Process,字面意思
还可翻译为“基本统一过程”、“实质统一过程”...等。翻译成
“精炼”,因为觉得原来的RUP太臃肿沉重。
看到了过程的吸收、演变和改进,发现EssUP增加了不少为实际
开发以及开发者的着想,但并不都是EssUP独有或最新的。只有
实践才能检验EssUP,一切结论现在还为时过早,对待新东西我
们要大胆学习,谨慎应用。
EssUP
精炼统一过程(EssUP)
EssUP 是建立在现代软件开发实践基础之上的新过程。EssUP
(www.ivarjacobson.com)是一个新鲜起点,它慎重地集成了来自UP阵
营、敏捷阵营、过程改进阵营的成功实践。
我们需要一个新过程的原因可能是下列之一:
• 传统软件过程过于沉重,没有一个人愿意阅读又大又长的过程描述。
• 过程必须聚焦于支持开发者,而不仅仅是过程专家。
• 除了过程质量,过程也必须帮助团队获得好的产品质量,不仅仅是
通过CMMI,也包括交付好的软件。任何软件开发过程的焦点必须是
在生产好的软件上。
• 过程必须提供规程的敏捷性,平衡管理的需求而不遏制创造力。
• 这种方法必须让项目团队(没有过程工程师帮助的开发者)容易添
加好的实践到现有的过程中。
• 过程应该授权于团队。
精炼统一过程
全神贯注于针对所有项目的精炼的适用性。
• 是你能够在已有的技能基础上创建过程。
• 为实现一种一致的方法提供指导。
• 聚焦于提高*人们关于开发的技能。
• 添加刚好够的过程去处理你的项目风险。
EssUP的目标是一个长期设想: 从每一个人被
迫去思考过程的“过程”时代,过渡到我们不
再讨论特定过程的“无形过程”时代,但这是
一个设想。
什么是敏捷软件?
首先什么是敏捷开发呢?
敏捷开发指的是一种面临迅速变化的需求快速开发软件的能力!
什么是敏捷设计
“在按照我的理解方式审查了软件开发的生命周期后,我得出一
个结论:实际上满足工程设计标准的唯一软件文档,就是原代码
清单。”——Jack Reeves
敏捷开发人员如何知道要做什么
简而言之,敏捷开发人员知道要做什么,是因为:
他们遵循敏捷实践去发现问题。
他们应用设计原则去诊断问题。
他们应用适当的设计模式去解决问题。
软件开发的这三个方面间的相互作用就是设计。
敏捷设计
敏捷设计就是一个过程,不是一个事件。它是
一个持续的应用原则、模式以及实践来改进软
件的结构和可读性的过程。它致力于保持系统
设计在任何时间都尽可能得简单、干净及富有
表现力。
请记住,敏捷开发人员不会对一个庞大的预先
设计应用那些原则和模式。相反,这些原则和
模式被应用在一次次的迭代中,力图使代码以
及代码所表达的设计保持干净。
动态语言
Python简介
python是一种解释型、交互式、面向对象的语言,我
们经常拿它来和Tcl、Perl、Scheme、Java来比较。
它有非常清晰的语法,有模块,有类,异常处理,高
级的动态数据结构。它比perl更加易学,功能更加强
大。python采用动态数据结构,也就是说变量没有数
据类型,这一点和Lisp十分相似,在python中所有事
物都是对象(object),字符串、函数以至于类和模块。
这种面向对象的概念和smalltalk很相似。并且自带了
丰产丰富的模块库。
对于初学者,python很适合于学习编程思想,而不会
让读者为了繁杂的语法而头痛。对于高级用户,
python是最出色的脚本语言,它可以很容易的内嵌某
个软件中,作为那个软件的扩充,例如著名的3D设计
软件blender就可以使用内嵌的python脚本语言来设
计复杂动画。
Python
python是一种流行的面向对象的脚本语言。对
于软件开发,脚本解释弱类型语言在开发效率
上远远超过编译强类型语言,例如Java。从软
件开发角度来说,脚本语言具备天然的开发效
率上的优势,这是由语言的内在属性决定的。
python兼有脚本语言开发的高效率,兼有低部
署成本的易用性,同时又有完备的面向对象的
强大支撑能力,同时又具备完善的强大的app
server支持。
和其他语言的比较
Shell script 太旧了,无论如何不能用来写程式。
Perl 擅长做服务器的管理,因为它的字串处理功能特别强大,同
时有全面的编程接口和操作系统相连。自己用没问题,就是不懂
人家在写什么。
PHP 擅长于网页,因为它可以嵌入在 HTML 文件中并支援各类资
料库。但一离开网页就左支右绌。
Python 特别适合一般的需求,因为它语法简明,容易维护,有很
多模组可用,而且容易做出图形介面。但它的object oriented 并不
纯,速度也较 Perl 慢一些。
Tcl/Tk 基本变数形态只有文字串,每次算术都是从文字变数字再
变文字,鸣,没什么好提的了吧。
Java 太伟大了,我可不想每次开始写程式时都幻想要完成一个跨
企业的解决方案,引入几十个标头档,写完了才明白原来我只需
它读一个用户指定的文件,画两条直线就行了。唉,落差太大。
Ruby 太新了,要正式应用是将来的事。
Ruby
如果我们只说一门语言,世界将会索然无味。
尽管 Java 平台是开发成熟应用程序的绝佳选
择,但它从来就不适应于小程序或宏。Java 6
意识到了这一点,它添加了 javax.script 包实
现,以便和脚本语言(如 BeanShell、Python、
Perl、Ruby、ECMAScript 和 Groovy)进行
互操作,也添加了一项 invokedynamic 虚拟机
指令来允许将动态类型语言直接编译为 Java
VM。
Ruby
Python 代码似乎比 Ruby 代码更简洁更易于理解,大
多数 Java 程序员都会这样认为。
然而,Python 出来的不是时候。许多开发人员不得
不在学习 Python 代码还是学习 Java 代码间作出选
择,而多数人选择了 Java 代码。既然他们终于弄懂
了 Java 语法,又打算在工具箱中添加另一门语言,
他们想要的是明天的语言,而不是昨天的语言,而那
门语言似乎就是 Ruby。
更重要的是,Ruby 的 Ruby on Rails 是一个绝对杀
手级的应用程序。它的简单性对于多数觉悟了的
Java 企业版(Java Enterprise Edition,JEE)开发
人员来说具有难以置信的魅力。
Ruby
除了 Rails,比起其他脚本语言,JRuby 项目和现有
的 Java 代码很好或更好地集成到了一起。事实上,
JRuby 也许会超越标准 Ruby 分布,并成为 Ruby 程
序员们更偏爱的平台,而不止是 Java 程序员们将
Ruby 作为第二种选择。这很好。Python 程序员们会
这样反对:他们这些年来已经将 JRuby 最好的方面
加入到 Jython 中,他们是对的,但我讨论的是 2007
年将 发生什么,而不是应该 发生什么。这很不幸但
却是事实:Ruby 获得了契机,而 Python 没有。
Ruby
其他脚本语言会被逐渐逐出界外。Perl 太过时
了,不能很好地适应现代应用程序。Groovy
缺少明确的视角,还趋向于将计算机科学的时
髦用语凌驾于可用性和熟悉性之上,这让它深
受其苦。BeanShell、Jelly,还有半打其他语
言可能都从未吸引过超过一个的称心追随者。
来年的这个时候,到处都会是这样的呐喊:
Ruby 将成为 Java 程序员们首选的脚本语言。
PHP
用于动态内容和数据库交互的最优秀的语言
如果您从事基于 Web 的开发工作,那么可能
已经听说过 PHP。您也许不太确切地知道
PHP 是什么、如何工作或者为什么如此热门,
但现在该是进一步了解 PHP 的时候了。因此,
简要介绍关于 PHP 基础的基本概念。
PHP
PHP 是作为一个小开放源码,随着越来越多的人意识
到它的实用性从而逐渐发展起来。Rasmus Lerdorf
在 1994 年发布了 PHP 的第一个版本。从那时起它
就飞速发展,并在原始发行版上经过无数的改进和完
善现在已经发展到版本 4.0.3 。
PHP 是一种嵌入在 HTML 并由服务器解释的脚本语
言。它可以用于管理动态内容、支持数据库、处理会
话跟踪,甚至构建整个电子商务站点。它支持许多流
行的数据库,包括 MySQL、PostgreSQL、Oracle、
Sybase、Informix 和 Microsoft SQL Server。
动态与静态内容
动态内容为什么这么热门?假设您正在管理有 10 个产品的电子商
务站点。只要产品不是经常变动或者预料到它不会有太大的变动,
那么手工编写 10 个带有必要的信息、表单和诸如此类内容的静态
产品页面是不困难的。但是,假设您在本月再要添加 10 个或更多
产品,然后在下个月要更多,而且价格有时会变动或者想改变站
点的观感。那么您就会陷入用手工重新编写数十个,也许上百个
静态页面的困境中。
另一方面,假设您从创建 product.php 页面开始。它没有静态信息,
而是编码成可以从产品数据库中提取信息并动态地构建一个页面。
然后您就拥有了一个元数据页面,它可以根据存储在数据库中的
信息提供一个、一百个、甚至十万个单独页面。现在网站管理员
不再整天都简单重复更新静态页面的工作,因为在更新公司数据
库中的信息同时就可以更新页面上的信息。这样就消除了令人头
疼的时间延迟(在数据库中更改信息和在网站上显示信息之间的
时间间隔)。
动态与静态内容
总体来说,PHP 非常适合 Web 上的工作。但它并不
是唯一的方法;如 Perl、Java、JavaScript、ASP、
Python、Tcl、CGI 以及其它许多方法都可以生成动
态的内容。但是,PHP 的优点是:它是专为基于
Web 的问题而设计的以及它是开放源码。
如果您正在为文字处理或 3D 游戏寻找程序设计语言,
那 PHP 可能不是您所需要的语言。如果您需要运行
一个具有动态内容、数据库交互和电子贸易的网站,
那么就请继续读下去,因为 PHP 在这方面确实是非
常有用的。
PHP 适用的平台
大多数常规 PHP 的安装通常是与 Linux 或各
种 UNIX 上的 Apache 一起运行的 PHP 模块。
但是如果正在使用其它平台,不要担心。PHP
可以在 Windows NT 和 9x 以及其它许多 Web
服务器上运行。可以在主要介绍
Apache/Linux/PHP 组合的一些网站上找到更
多有关 PHP 的文档,但它并不是支持 PHP 的
唯一平台。
许可证和使用
购买具有全部功能的嵌入式 Web 脚本语言要
花多少钱?一分钱不花?PHP 是一个开放源
码项目,所以没有购买许可证的费用或限制使
用的问题。您可以使用 PHP 来运行小的、非
赢利性站点,或者运行十亿美元的电子商务网
站,而且成本是一样的:零。不仅如此,如果
想要或需要修改 PHP,可以修改它。
PHP 并没有得到 GPL 的许可,但它自己的许
可证允许重新分发代码和/或二进制文件。
使用 PHP
我们先看一些简单的例子,这样您对 PHP 就
有个大概了解。记住决这不是深入了解 PHP
的途径,仅仅是个快速入门而已。
"Hello, World!"
为了对 PHP 有个了解,让我们来看一下几个
非常简单的 PHP 脚本。既然 "Hello, World!"
是个常用的示例,那我们就编写一个友好的小
"Hello, World!" 脚本。
PHP
如早些时候所提到的,PHP 是嵌入在 HTML 中的。(可能您的文件几乎
没有包含 HTML,但是通常这个文件是 PHP 与 HTML 的混合体。)这意
味着在您正常的 HTML 中(或 XHTML,如果您处在比较前沿的位置),
会有类似这样的 PHP 语句:
<body bgcolor="white">
<strong>How to say "Hello, World!"</strong>
<?php echo "Hello, World!";?>
<br>
Simple, huh?
</body>
很简单,不是吗?这仅仅是一个 "echo" 语句,就这样。当然,仅仅这样
是没有多大用处的。但是它确实告诉我们关于语言的一些东西。(顺便
说一下,如果检查 HTML 输出,就会注意到 PHP 的代码并没有出现在从
服务器送到您 Web 浏览器的文件中。所有出现在 Web 页面中的 PHP 都
会被处理并从页面中剥离;从 WEB 服务器返回给客户机的仅仅是纯
HTML 输出。)
PHP
请注意,这里揉和了 PHP 和 HTML。假设您已经了
解 HTML,所以这里仅解释 PHP 代码。在 PHP.net
(请参阅 参考资料)上可以找到完整的 PHP 参考。
PHP 代码是以标记 <?php 开始并以 ?> 结束的。这
就告诉服务器在 <?php 和 ?> 之间的所有内容需要用
PHP 指令进行语法分析,如果发现它们,就需要执行
它们。请注意,当处理和服务您的文件时,客户机会
收到普通的 HTML 文件。浏览您站点的人看不到任何
一个的 PHP 指令,除非您犯了错误,服务器把这些
PHP 代码分割开而没有先处理它们。
一般情况下会处理在 <?php 和 ?> 之间的常规 HTML
标记。请注意上面这个简单的脚本中包含了 <br> 这
个分行标记。如果不能够很好地利用 HTML 格式,那
么 PHP 就不会非常有用。
PHP
如果想和其它东西一起使用,或者您和我一样是一个健忘的人,
您可能会想到要注释代码。// 字符表明是注释,服务器不会处理被
// 标记的内容,也不会象 HTML 中的注释一样,把内容传给客户
机。如果在 <?php 和 ?> 标记之间有标准的 <!-- comment --> ,
那么当服务器对它进行语法分析时,有可能引起错误。显然,您
可能不会象我对这个基本功能一样注释您的代码,但它确是一个
很好的示例。
最后要注意的是,每个 PHP 函数都封闭在圆括号内,并以分号结
束,这和 C 或 Perl 相似。由于一个简单的印刷错误而遗漏一个结
束的圆括号或分号,造成一些语法错误是很常见的,所以要确保
检查代码。在象 Vim 或 Emacs 这样的编辑器(可以突出显示语法)
中编写 PHP 是有助于消除此类错误。它使您能立刻捕捉到错误。
PHP
date 函数仅是内置 PHP 函数之一。PHP 附带了许多功能可以用
于数据库连接、创建 PDF、Shockwave、JPG、GIF、PNG 和其
它图象文件、发送电子邮件、阅读和书写文件、语法分析 XML、
会话处理、经由 HTTP 直接与浏览器对话,以及许多其它功能。
PHP 也允许用户定义自己的函数。这使 PHP 语言能够经由 Web
提供大量的解决方案。而不是从一开始就把所有的事情都编写好
了。在您编写函数之前,确保已经查看诸如 Zend.com、PHP
Wizard 当然还有 Freshmeat,来看是否已经有您正在尝试编写的
函数(请参阅 参考资料)。
对于提供标题、自动更新新闻网站、基于 Web 的电子邮件客户机、
数据库管理和其它方面,已经有许多开放源码的 PHP 解决方案。
再从头来做这些是毫无意义的。相反,应该从已经构建好的基础
开始,并把它定制到您自己的解决方案中。如果您仅仅是初步了
解和学习 PHP,在心中并没有具体的项目,那么这些项目对于使
用 PHP 仍然是很好的示例和学习资料。
PHP
PHP,因它的发展历史一直是围绕着 web
page,所以做网页设计是十分方便的,但是写
一般的工作则平平无奇。比如说控制执行,处
理进程间的讯息传送以致做图形用户介面等都
不行,这是因为从 WEB 的角度,这些并不重
要:图形介面,HTML 就己经是了,而程式的
执行和互相合作则是 Web Server 要考虑的事。
JavaScript
JavaScript,是一种基于对象的脚本语言。目
前已经在WWW上广泛用于动态Web页面的编
程语言。
JavaScript并非Java
JavaScript是由网景通讯公司(Netscape)最
初在它的Navigator 2.0产品上设计并实现的,
原名LiveScript,除了句法上有一些相似之处
以及都能够提供网页中的可执行内容以外,
JavaScript和Java是完全不相干的。
JavaScript
JavaScript并不简单
实际上尽管JavaScript是作为一种给非程序员
提供的脚本语言而不是给程序员提供的程序设
计语言来推广和宣传的,但是JavaScript是一
门具有非常丰富特性的程序设计语言,和其他
所有的语言一样复杂或者更复杂,你需要对
JavaScript有扎实的理解才能用JavaScript执
行比较复杂的任务。
JavaScript
不同于服务器端脚本语言,例如ASP,
JavaScript是客户端脚本语言,也就是说
JavaScript是在用户的浏览器上运行,不需要
服务器的支持而可以独立运行。所以在早期程
序员比较青睐于JavaScript以减少对服务器的
负担,而与此同时也带来另一个问题:安全性。
而随着服务器的强壮,虽然现在的程序员更喜
欢运行于服务端的脚本以保证安全,但
JavaScript仍然以其跨平台、容易上手等优势
大行其道。
JavaScript
JavaScript是一种解释语言,其源代码在发往客户端
执行之前不需经过编译,而是将文本格式的字符代码
发送给客户端由浏览器解释执行。但这种语言的弱点
是容错性较差,如果一条执行不了,那么下面的语言
也无法执行,而且由于一条一条的解释,速度较慢。
与其相对应的是编译语言。例如Java。Java的源代码
在传递到客户端执行之前,必须经过编译,因而客户
端上必须具有相应平台上的仿真器或解释器,它可以
通过编译器或解释器实现独立于某个特定的平台编译
代码的束缚。但是它必须在服务器端进行编译,这样
就拖延了时间。但因为已经封装,所以能保证安全性。
多核危机
摩尔定律已经改变了。我们不再获得和以前一样追求
时钟频率增长,取而代之,我们得到了更多的(CPU)
核心。今天,也许你的笔记本都已经是双核的了。
为了利用多核的特性,应用程序需要支持并发。如果
你的客户买了一台八核的机器,要向他们解释清楚正
常情况下应用程序只会用到12%的CPU能力将是一件
费时费力的事,即便该机器是为该应用量身定制的。
在未来,情况可能变得更糟。你的顺序执行代码不仅
不会跑得更快,甚至有可能实际上跑得更慢。其原因
在于,你获得越多的核心,由于功耗和散热的影响,
每个核心就会更慢。几年之后,英特尔就会给我们带
来32核的CPU,按这种趋势,在我们不知不觉之中数
千核的CPU就会出现。但每个核心都会比现在的核心
慢很多。
多核危机
未来注定是多核的世界,问题在于如何去解决
多核的危机。
Scala和Erlang是两门渴望成为其解决方案的
语言,但它们也有些许的不同。
多核危机
Scala常被看作是下一个主要的JVM(Java Virtual
Machine,Java虚拟机 )语言。它结合了面向对象编
程的范式和函数式编程的范式,与Java相比有着更简
洁的语法,它是静态类型的,有着跟Java一样或者有
时候更快的运行速度。
Erlang是一门为健壮性而生的语言,由于它的设计,
它自然又是一门有着极好伸缩性的语言。它比Java历
史更早,但却常被看作引领未来并发的语言。它是一
门动态类型的函数式语言。
轻量级进程
要运行大规模并发应用,你需要大量的并行执行。这
可以通过几种方式达到。
使用线程是一种常见的方式,使用进程又是另一种。
其区别之处在于,线程与其它线程之间共享内存,而
进程是相互独立的。
这意味着线程需要像互斥信号这样的锁机制,防止两
个线程在同一时间对同一内存进行操作,但进程不会
受此问题影响,相反是使用一些消息传递机制来跟其
它的进程间通信。
但进程在性能和内存方面的代价是昂贵的,这正是人
们就算知道基于线程的并发是一种极复杂的编程模型
也宁愿选择它的原因。
新系统编程语言
Erlang
Erlang不但是一种编程语言,而且它具有比编程语言
更加贴近操作系统的一些特性:并发线程、作业调度、
内存管理、分布式、网络化等。它具有超强的轻量级
进程,这种进程对内存的需求是动态变化的。
Erlang支持超大量级的并发线程,并且不需要操作系
统具有并发机制。据说使用Erlang编写的Yaws Web
服务器,其并发性能是apache的15倍!
这个Erlang初始开源版本包含了Erlang的实现,同时
它也是用于构建分布式高可用性系统的Ericsson中间
件的最大组成部分。
Erlang具有以下特性
并发性 - Erlang具有超强的轻量级进程,这种进程对
内存的需求是动态变化的,并且它没有共享内存和通
过异步消息传送的通讯。Erlang支持超大量级的并发
线程,并且不需要操作系统具有并发机制。
分布式 - Erlang被设计用于运行在分布式环境下。一
个Erlang虚拟机被成为Erlang节点。一个分布式
Erlang系统是多个Erlang节点组成的网络(通常每个
处理器被作为一个节点)。一个Erlang节点能够创建
运行在其它节点上的并行线程,而其它节点可以使用
其它操作系统。线程依赖不同节点之间的通讯,这完
全和它依赖于单一节点一样。
Erlang具有以下特性
健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建
容错系统。例如,进程能够监控其它进程的状态和活动,甚至这
些进程是在其它节点上执行。在分布式系统中的线程能够配置为
在其它节点故障的情况下自动进行故障恢复,并在故障节点恢复
时自动迁移回到恢复节点。
软实时性 - Erlang支持可编程的“软”实时系统,这种系统需要反
应时间在毫秒级。而在这种系统中,长时间的垃圾收集(garbage
collection)延迟是无法接受的,因此Erlang使用了递增式垃圾收
集技术。
热代码升级 - 一些系统不能够由于软件维护而停止运行。Erlang允
许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新
代码替换。在此过渡期间,新旧代码是共存的。这也使得安装bug
补丁、在运行系统上升级而不干扰系统操作成为了可能。
Erlang具有以下特性
递增式代码装载 - 用户能够控制代码如何被装载的细
节。在嵌入式系统中,所有代码通常是在启动时就被
完全装载。而在开发系统中,代码是按需装载的,甚
至在系统运行时被装载的。如果测试到了未覆盖的
bug,那么只有具有bug的代码需要被替换。
外部接口 - Erlang进程与外部世界之间的通讯使用和
在Erlang进程之间相同的消息传送机制。这种机制被
用于和操作系统通讯、与其它语言编写的程序交互。
如果出于高效率的需要,这种机制的一个特殊版本也
允许例如C程序这样的代码直接链接到Erlang运行时
系统中来。
Erlang组件
Erlang具有许多单独的组件,它们能够在开发应用时
作为组建块(building blocks)使用。同时这些组件
也熟知Erlang的系统消息(load、unload、start、
stop、restart、change code)。
Inets - HTTP 1.0服务器和FTP客户端。
Mnesia - 使用Erlang的分布式实时数据库。它支持
RAM复制、磁盘存储、动态改变shema、保存任意复
杂的数据结构。Mnesia之所以非常快速,是因为它运
行在和应用相同的地址空间(因为Mnesia和应用都使
用Erlang编写)。Mnesia展示了Erlang的强大:你能
够使用多少种语言使用少于20000行的代码编写一个
全特性、工业强度、分布式的DBMS?
Erlang组件
Orber - CORBA v2.0对象请求代理(ORB)。
SNMP – 可扩展的SNMP v1/v2代理和MIB编译器。
Erlang工具和代码库
Erlang具有一套常用工具库:
Appmon - 进程组图形监控(在本地和远程节点上)。
ASN.1 - 支持ASN.1基本标记法和BER、DER、PER
编码规则的编译时和运行时的代码包。
Erlang组件
Compiler - Erlang编译器。
Debugger - 图形化Erlang调试器。
ERTS - Erlang运行时系统,包括虚拟机、垃圾收集、端口映射守
护进程。
GS - 编写图形用户接口的代码库。
IC - 把OMG的接口定义语言(IDL)转换到Erlang、C和Java语言
的编译器。
Kernel - 运行Erlang系统所必须的C代码:Erlang内建功能
(BIFs);代码、启动、命名服务;对网络和分布式的支持;装
载器、连接器、记录器;操作系统和文件系统接口。
Erlang组件
Mnemosyne - 可选的用于Mnesia的查询语言。
Mnesia Session - 以IDL定义的与Mnesia接口的外部语言,它们
通过IIOP和erl_interface协议对Mnesia进行访问。
OS monitor (OS_MON) - 监控CPU、硬盘、内存使用情况,包括
SNMPv1/v2 MIBs。并且提供了与Solaris syslogd、Windows NT
事件日志的接口。
Parse tools - 用于Erlang的LALR-1解析生成器(yecc),它和
yacc类似。Yecc使用BMF语法定义作为输入,生成Erlang代码作
为解析输出。Yecc被用于生成Erlang解析器。
PMan - 跟踪、查看Erlang进程状态(在本地或者远程节点上)的
工具。
SASL - 进程、错误、崩溃报告处理、报告浏览、释放处理、重载
管理。
Erlang组件
Stdlib - 标准代码库:输入、输出;基于内存、磁盘
的表存储(ETS和DETS);图表、字典、列表、字
符串、集合、队列;正则表达式;数学公式。Erlang
解释器、tokenizer、解析器、lint和格式化打印。用
于容错服务器的通用框架、事件处理器、状态机和线
程监管等等。
Table visualizer - 查看ETS和Mnesia表格的工具。
Toolbar - 简化了对Erlang工具的访问。
Tools - 覆盖分析器、优化器、基于文字的跟踪器、
Emacs模式、Emacs TAGS文件生成器、make工具、
调用图形化工具。
Scala
Scala是一门现代的多范式编程语言,志在以简练、
优雅及类型安全的方式来表达常用编程模式。它平滑
地集成了面向对象和函数语言的特性。
Scala是面向对象的:Scala是一个纯面向对象语言,
在某种意义上来讲所有数值都是对象。对象的类型和
行为是由class和trait来描述的。Class的抽象可由子
类化和一种灵活的基于mixin的组合机制(它可作为
多重继承的简单替代方案)来扩展。
Scala
Scala是函数式的: Scala还是一个函数式语言,在某
种意义上来讲所有函数都是数值。Scala为定义匿名
函数提供了一种轻量级的语法,它支持高阶(higherorder)函数、允许函数嵌套、支持局部套用
(currying)。Scala的case类及其内置支持的模式匹
配模型代数类型在许多函数式编程语言中都被使用。
Scala是静态类型的:Scala配备了一套富有表现力的
类型系统,该抽象概念以一种安全的和一致的方式被
使用。
Scala
Scala是可扩展的:Scala的设计承认了实践事实,领
域特定应用开发通常需要领域特定语言扩展。Scala
提供了一个独特的语言组合机制,这可以更加容易地
以类库的形式增加新的语言结构:
任何方式可以被用作中缀(infix)或后缀(postfix)
操作符。
闭包按照所期望的类型(目标类型)自动地被构造
两者结合使用可方便地定义新语句,无需扩展语法,
也无需使用类似宏的元编程工具。
Scala
Scala可与Java和.NET进行互操作:Scala设
计时就考虑了与流行编程环境良好交互,如
Java 2运行时环境(JRE)和 .NET框架
(CLR)。
特别是与主流面向对象语言,如Java和C#尽
量无缝交互。Scala有像Java和C#一样的编译
模型(独立编译,动态装载类),允许访问成
千上万的高质量类库。
Scala
Scala还有一连串其它好的Ruby特性(Java所
缺乏的),包括闭包,以及非常适合“领域特
定语言”的可塑性语法。它拥有所有这些特性,
而且结合了静态类型好处。
为什么选择Scala?
面向对象编程、面向模块编程、静态类型、函
数编程,以及该语言中人们所喜欢的未言明的
特性。。
Scala
Scala离完美还差得远。它有一些语法缺陷,
一些由Java带来的问题,一个有适度问题的编
译器以及一堆你记不住的琐碎特性和边界情况
(edge case)。
然而,这些问题除了烦你之外并不真正产生什
么后果。如果只是想坐下来书写好的代码,该
语言的核心是强大的和非常有用的。
D 语言
D 语言既有 C 语言的强大威力,又有 Python
和 Ruby 的开发效率。
它是一种集废料收集、手工内存操作、契约式
设计、高级模板技术、内嵌汇编、内置单元测
试、Mixin 风格多继承、类 Java 包管理机制、
内置同步机制、内建运行时信息的系统级编程
语言。
D语言概览(一)
D 是一种通用的系统和应用编程语言。它是比
C++ 更高级的语言,同时还保持了生成高效代
码以及直接访问操作系统API和硬件的能力。
D 很适合于编写从中等规模到那些由团队合作
完成、数百万行代码规模的各种程序。
D 易于学习,为编程者提供了很多便利,并且
适用各种野心勃勃的编译器优化技术。
D语言概览(二)
关联数组是索引可以为任意类型的数组,不像
普通数组那样必须使用整数作为索引。本质上,
关联数组就是散列表。关联数组使构建快速、
高效、无错的符号表变得容易了。
D语言基础篇
D语言词法
在D中,词法分析独立于语法分析和语义分析。词法
分析器将源文件分割成记号。词法描述了如何识别记
号。D的词法被设计为适于高速扫描,它拥有最小的
特殊规则集合,只有一遍翻译,这使得构造一个正确
的扫描程序很容易。对于熟悉 C 和 C++ 的人来说,
记号也很容易识别。
D 语言中的模块(Module)
模块同源文件是一一对应的。模块名就是去掉路径和
扩展名的文件名。模块自动为它的内容提供一个名字
空间。
D语言基础篇
D语言中的函数
所有的非静态非私有函数都是虚函数。这听起
来也许低效,但是因为D编译器在生成代码时
知道所有的类层次结构,所有未被重载的函数
可以被优化为非虚函数。事实上,因为 C++
程序员倾向于“在不确定时,声明它为虚函
数”,D 采用的方法“声明为虚函数除非我们
能够证明它可以是非虚函数”造成的结果是产
生更多更直接的函数调用。由重载非虚函数造
成的 bug 也减少了。
D语言基础篇
D语言中的类型
基本数据类型、派生数据类型、用户定义数据
类型、转换规则、委托
D语言中的属性(Properties)
简要介绍了D语言中的属性(Properties)。
D语言vs其他语言
D 同其他经常提到的语言在各个特征上的粗略
的比较。尽管各个语言的标准库中也提供了很
多功能,但这张表格只考虑内建到语言核心中
的特征。我们只考虑官方的标准特征,不考虑
被提议的特征、测试版的特征或者非标准的扩
展特征。而且,如同所有其他的语言比较一样,
提到什么特征、忽略什么特征以及我对这些特
征的解释都是带有偏向性的。
http://blog.csdn.net/uframer/archive/2005/02/
05/282095.aspx
使用Ruby DSL实现敏捷素材管理
领域特定语言(Domain Specific Language,简称
DSL)是一个面向语言的工具,用于解决某个特定领
域的编程任务。DSL的一般语言特征和它所被用到的
问题领域,关系是非常密切的,并且在一个非常高的
抽象层面上起作用。
Martin Fowler在他介绍DSL的文章中,将DSL划分为
外部DSL和内部DSL两类(参见原文链接)。外部
DSL是一门需要编译或者解释运行的编程语言,而内
部DSL则构建于一门通用编程语言(general-purpose
programming language)之内。实际上,内部DSL对
于其宿主通用编程语言来说,就是它的一套层次非常
高的API。
XML
XML 即可扩展标记语言(Extensible Markup
Language),是一种平台无关的表示数据的方法。
简单地说,使用 XML 创建的数据可以被任何应用程
序在任何平台上读取。甚至可以通过手动编码来编辑
和创建 XML 文档。其原因是,XML 与 HTML 一样,
都是建立在相同的基于标记技术基础之上。
XML 将信息串行化并作为文本存储,这样数据便可以
在任何可能需要的环境中使用。甚至不需使用特殊的
应用程序,我们便可以看到内容(粗体显示)和标记
(用于描述内容)。
XML 示例
<?xml version="1.0"?>
<transaction ID="THX1138">
<salesperson>bluemax</salesperson>
<order>
<product productNumber="3263827">
<quantity>1</quantity>
<unitprice currency="standard">3000000</unitprice>
<description>Medium Trash Compactor</description>
</product>
</order>
<return></return>
</transaction>
XML
从接触 XML 开始,开发人员就已经发现 XML 的用途
多种多样。下面让您对 XML 的使用方法有所了解。
存储数据
显而易见,XML 可用于存储数据。在以数据为中心的
信息(比如在某个数据库查找到的数据)和以文档的
中心的信息(比如将数据存储在 XML 中,以便在不
同的环境中显示出来)这两个方面,XML 都有自己的
优势。
阅读下列文章了解更多有关 XML 作为以数据为中心
的存储介质的知识。
XML
Web 服务
Web 服务最初用于在 HTTP 上传递非 HTML 信息。
它们如今已成为通过 Ajax 获取字段的基础,用于向
Web 站点、如今的面向服务体系结构(Service
Oriented Architecture,SOA)和复杂的基于消息的
应用程序添加交互性。XML 是 Web 服务领域不可或
缺的一部分。Web 服务中的所有主流方法,如
SOAP、REST 甚至 XML-RPC,都是基于 XML 的。
要了解 XML 在 Web 服务领域中的应用,请阅读下列
文章:
了解 Web 服务规范,第 1 部分:SOAP
面向资源与面向活动的 Web 服务
XML
播客和其他数据联合
如今,XML 最普遍的应用是数据联合领域。数百万的
blogger 都在使用 RSS 提要订阅他们所喜爱的博客上
的最新信息。而且商业利益已经发现通过英特网向各
种设备(如 iPod,它也使用 XML)发布音频和视频
的商机了。
要了解数据联合,请阅读如下文章:
RSS 简介
Podcasting for developers
使用 XML: 扩展 RSS 的能力
技巧:使用 Universal Feed Parser 驾驭 RSS
XML
在您所喜爱的应用程序和开发环境的幕后经常都有
XML 存在,它是创建配置或指令文件的通用方法。在
人类可读的 XML 文件中提供配置指令能让用户比以
前更加方便地控制应用程序的行为。
以下文章介绍了使用 XML 创建配置文件的示例:
Apache Ant 101:使 Java 项目生成易如反掌
用 XSL 转换增强 Ant 的功能
使用多个 Struts 配置文件
XML
清单 1 中的标记是最常见的 XML 串行表示,不过在应用程序的上
下文中处理 XML 数据也是非常普遍的。在这种情况下,我们通常
需要使用到一些模型,其中包括下面所列出的这些。
文档对象模型(Document Object Model,DOM)
文档对象模型(DOM)是一个基于对象的,以树形查看 XML 数
据的方法。例如,在 清单 1 中,salesperson、order 和 return 元
素都是 transaction 元素的子元素,也就是说它们在层次结构中位
于 transaction 的下方。大多数基于 XML 的应用程序在处理 XML
时使用的都是 DOM 方法。
要了解 DOM 请阅读下列文章和教程:
理解 DOM
探索 DOM Level 3 Core 的关键特性,第 1 部分
探索 DOM Level 3 Core 的关键特性,第 2 部分
XML
Simple API for XML(SAX)
由于任何内容都要存放在内存中,所以 DOM 对于操纵数据而言
是非常有用的。不过另一方面,其资源占用自然也相应地比较大
了。
Simple API for XML(SAX)解决了在内存中同时存放所有内容的
问题。SAX 自始至终一直在分析数据,并将所有的事件通知给应
用程序,比如 “起始元素” 或 “字符”。SAX 在资源友好方面
要胜过 DOM 一筹,但是其操纵数据的方法却不尽相同。
要了解 SAX,请阅读下列文章:
理解 SAX
技巧: 设置 SAX 解析器
DOM 和 SAX 是通过编程手段与 XML 交互的最常见方法,但是有
时也可以不通过构建应用程序来操纵 XML 数据。
XML
有时,甚至无需编程也可以操纵 XML 数据。可以使
用可扩展样式表转换语言(EXtensible Stylesheet
Language Transformation,XSLT)来操纵 XML 数
据。XSLT 让我们能将 XML 文档转换为不同 XML 结
构的文档,甚至还可以转换为非 XML 文档。XSLT 功
能极为强大,并且应用广泛。
Hands-on XSL
改进 XSLT 编码的五种方法
使用 XML: 将 XSLT 用于内容管理
XML
XML 是与平台和编程语言无关的,因此我们可以在基本上任何编
程语言中使用它,只要底层软件(比如说解析程序,它读取标记
的文本文件并为数据操纵创建 XML 文档)可用就没有问题。要了
解如何在各种不同的编程语言中使用 XML,请阅读下列文章:
Java
Java 中直接内置了 XML 解析和一些其他功能。
三部分教程:利用 Java 技术进行 XML 编程,第 1 部分
Java 语言的 XML 验证 API
Java 语言的 XPath API
PHP
PHP 对 XML 的支持一开始并不顺利;其早期实现并未完全与
DOM 规范同步。不过,目前的情形已经好了很多,PHP 提供支
持更类似标准的支持。
使用 PHP 和 XSL 创建 DHTML 链接图
XML
Perl
Perl 旨在操作文本,因此有时更倾向直接操作文本而不是使用
XML 方法,但是使用 XML 的优势是显而易见的。
Perl 开发人员:充实您的 XML 工具箱
在 Perl 中利用 DOM 和 XPath 对 XML 进行有效处理
Dare to script tree-based XML with Perl
Python
结合 Python 的易用性和 XML 对跨平台可用性的注重,这两者真
是天生的一对。
五部分系列教程:用 4Suite 进行 Python 和 XML 开发,第一部分:
PyXml
Python Web 服务开发者,第 13 部分:三股力量:Python、Web
服务和 XSLT
XML 问题: 使用 ElementTree,以 Python 语言处理 XML
XML
C++
C++ 程序员同样可以利用 XML 的各种功能。
充分利用 Xerces-C++,第 1 部分
充分利用 Xerces-C++,第 2 部分
序列化 XML 数据
Ruby
REXML 库使 Ruby 编程语言能支持 XML。
XML 问题 #18: REXML 库
JavaScript
JavaScript 对 XML 的支持类似于 Java,至少在比较基本的操作
方面非常相似。
XML in Firefox 1.5, Part 3: JavaScript meets XML in Firefox
XML
随着开发人开始在各种应用程序中使用 XML,
一些标准词汇或 XML 应用程序也开始涌现出
来。例如,XHTML 就是一种 XML 版本的
HTML,播客中也正在使用一种叫做 RSS 的
XML 词汇。可缩放矢量图型(Scalable
Vector Graphics,SVG)语言提供了一种使
用 XML 定义图形图象的方法,使一些浏览器
(如 Firefox)可以呈现它们。
下面讨论了一些正在应用中的 XML 示例。
XML
RSS 和联合
博客经常会提供一些外部提要,用于显示最近发表的文章并能提
供返回原始资料的链接。这些提要已经转变成为巨大的商机,广
告商纷至沓来,音频和/或视频或播客 的发布正在成为一些大型传
媒公司(比如广播电视网 [broadcast television network])关注的
焦点。这些提要都是 XML 形式的,或者是 RSS 或 Atom 的某种
变体。
An introduction to RSS news feeds
RSS 2.0 内容提要
从远程 RSS 文件抓取标题
Podcasting for developers
Thinking XML: 使用 Atom 格式连锁新闻及其他内容
XML
可缩矢量图形(Scalable Vector Graphics,SVG)
图形之如 SVG,就如桌面发布之如 HTML。SVG 提
供了一种使用小的、简单的文本指令指定图形的方法。
使用 SVG 创建的复杂图形,不仅带宽占用小而且可
以通过编程进行控制。
XML 问题: 使用 SVG 编程
在浏览器中使用 SVG 创建矢量图形
SVG 与 XML 商业图表实务
在 SVG 中呈现动态图形
面向浏览器的动态 SVG
XML
XForms
可以把视为 XFoms 下一代的 HTML 表单,它可以指定以表示无
关的方式采集信息。这种方式使我们能更加方便地添加更多功能,
也使得在其他介质(比如手机)中重用表单更加轻松,这些介质
中的信息相同不过表示可能完全不同。
准备使用 XForms
SVG 和 XForms: 基础知识
技巧:创建提交另一个实例的 XForms 表单
技巧: 使用 XForms 发送和接收 Web 服务消息
XML Forms Generator(alphaWorks,英文)
XForms 简介系列
XML
更多 XML 应用
应用 XML 的地方可以说是不胜枚举,比如说发布、编码语义数据,甚至
那些电话中的语音识别单元也使用了 XML。下面列出了一些例子:
使用 XHTML Mobile Profile 开发无线应用程序,使不同移动设备具有相
同外观
两部分系列教程:深入研究 VoiceXML,第 1 部分
XML 安全: 使用 SAML 确保可移植的信任
Think XML: 从书本学习 XML Topic Maps
Thinking XML: 通用商业语言(UBL)
XML 观察: 使用 FOAF 支持在线社区
XML Watch: Finding friends with XML and RDF
XML 观察: 使用 XML 和 RDF 找到朋友
尽管可以使用许多技术来实现面向服务体系结构(SOA),不过最常用
的还是使用 Web 服务,这意味着要使用 XML。SOAP 和 REST 是实现
Web 服务最流行的两种方法,这两者都基于 XML。
XML
Web 服务概览
事实上,大多数围绕 Web 服务的标准(存在很多)在本质上都是
XML 词汇。比如说,Web 服务描述语言(Web Service
Description Language)就是一个用于描述服务的 XML 文件。
要了解 XML 和 Web 服务,请阅读下列文章:
了解 Web 服务规范,第 1 部分:SOAP
技巧: 为防火墙后面的 SOAP 使用代理网络库
技巧: SOAP 1.2 与 GET 请求
技巧: 让 SOAP 与 Web 服务器和平共处
技巧: 向 Web 服务传递文件
ETTK for Web Services(英文) 是一种 alphaWorks 技术,使用
该技术可以轻松地建立 Web 服务环境,包括服务器。
通过 SOA and Web services 新手入门 可以获得更多有关 XML 和
Web 服务的信息。
XML
XML 是当今许多新生技术的核心。比如说,随着搜索引擎的改进
以及向 Semantic Web 的迈进,XML 成了 Web 站点管理员在页
面中添加有意义信息的利器。网格计算和自主计算在不断发展,
XML 在这些技术中的应用也非常显著。数据库供应商在不断探索
更加高效存储 XML 的方法,XML 查询语言(XML Query
Language,XQuery)也在蓬勃发展。
通过阅读下节中的文章可以帮助您了解 XML 的未来:
RDF、微格式 和其他语义技术
语义 Web 并不需要 XML,但是从当前的技术方式来说这也是众
望所归的趋势。大多数信息都是以某种 XML 的形式编码的,不论
是资源描述框架(Resource Description Framework,RDF)还是
独立的微格式。这是因为 XML 的可读性和可理解性几乎是通用的。
使用 microformats 分离数据与格式
XML 问题: 比微格式更轻巧:纤格式(Picoformat)
Jena 简介
Thinking XML: XML 语义锚
XML 观察: 追溯 RDF 数据的源头
Thinking XML #1,XML 和语义:实际情况
XML
网格和自主计算
世界越来越小,计算机系统却日益庞大。尤其是一些
研究人员、公司和其他组织开始发现,将他们的系统
整合为一个单一的大型系统可以带来巨大的好处,不
仅能提供更强的计算能力还可以通过消除浪费节省资
金。由于 XML 具有平台无关性,因此对于在种类各
异的系统之间交换信息,XML 是完美的选择。
会见专家: Susan Malaika 讨论 XML 标准和网格计算
Policy Management for Autonomic Computing:
Solve a business problem using PMAC
XML
异步的 JavaScript 和 XML(Ajax)
随着 Web 所提供的功能日益多样,因此用户也对日
常处理中必不可少的应用程序寄予了相同的期望。通
过在后台中请求信息(XML 中时常如此),并且只替
换页面的一部分内容(而不是强制用户请求整个新
Web 页面),Asynchronous JavaScript with XML
(Ajax)能为用户提供更加无缝的体验。结果,大约
在去年期间 Web 便在这一领域取得了跨越式的进展。
使用 Ajax 构建应用程序:学习用 Ajax 构建支持实时
验证的 Web 应用程序
Ajax 传输方法:Ajax 不仅仅是 XMLHttp
开发基于 Ajax 的用户注释系统
XML
Mashups
随着越来越多的信息可以通过 Web 服务获得,企业开发人员也发
现这些信息还有其他的用途。利用这一数据的方法之一就是
Mashup,它是一种正在发展的应用程序,可以将来自多个源的数
据结合到一个单一的视图中。
Mashups:Web 应用程序新成员
使用 XQuery 开发 Mashup
终极 Mashup —— Web 服务和语义 Web,第 1 部分:使用与组
合 Web 服务改进 XML 技能的最佳方式
如果想要改进您的 XML 技能,最佳的方式就是打下坚实的基础,
然后只需使用它就行了。要获得入门知识,请阅读 什么是 XML?
一节中所列出的文章,然后再阅读 XML 可用于应用程序开发吗?
一节中的文章。有了这些基础之后,您便可以学习自己感兴趣的
领域了。
您还可以努力获得 IBM 的 XML 认证,要准备该认证请阅读 准备
XML 及相关技术认证,第 1 部分: 体系结构 和其他的 XML 及相关
技术认证系列教程。
XML
XML 为我们提供了强大的功能和力量,不过
幸运的是它本身也是相当简单和易懂的技术。
掌握基础知识之后(这并不会花多长时间),
您就可以选择学习的方向了。
如果您是程序员,那么可以专注于编程和各种
API。
如果不是程序员,则可以专注于各种与编程无
关的应用。
总之,您都可以在当今世界找到 XML 的一席
之地。
Ruby和Python的比较
python和ruby的相同点:
都强调语法简单,都具有更一般的表达方式。python是缩进,
ruby是类basic的表达。都大量减少了符号。
都是动态数据类型。都是有丰富的数据结构。
都具有c语言扩展能力,都具有可移植性,比perl的可移植性更好。
也都可以作为嵌入语言。
都是面向对象的语言,都可以作为大项目的开发工具。
都有丰富的库支持。
也有最宽松的版权许可,除了一些工具属于GNU世界。
都有lisp特色的eval函数,也都能把函数作为参数。
也有图形界面的ruby的专门编辑器。
都获得了广泛的c库的支持。如qt、gtk、tk、SDL、FOX等,ruby
计划实现SWIG接口。
都有完善的文档。
python有jython,ruby有JRuby。
和python相比ruby的优点:
具有正则表达式和嵌入html的功能。python也有正则表达式,但没
有ruby的应用方便和广泛。python的嵌入html项目才刚起步。ruby
还有apache的mod模块。ruby本身也实现和很多unix工具,如racc,
doctools。比python更亲近linux。
比python功能更完整的面向对象的语法。
ruby的整个库都是具有类继承的结构。
他的基本的数据类型和运算符都是可以重载的。
ruby主要的功能都是通过对象的方法调用来实现的,而不是函数。
python也在向这方面发展,但没有ruby做的彻底。
ruby的类是更规范的单继承,还有接口等概念的实现。
python可以实现在列表内的条件语句、循环语句,而ruby用“块”
的方式来实现这个功能,比python的更灵活,更具有通用性。
ruby具有类似lisp的彻底的函数方式的条件语句、循环语句等。语
句的表达能力更强。
附带一些unix工具,如racc等。
和python相比ruby的不足:
最大的不足正是因为ruby的强大所引起的。它没有
python的简单性好。比较复杂的面向对象语法、“块”
语法的引入、正则表达式的引入、一些简写标记都增
加了语言的复杂性。
python的缩进表达方式比ruby的basic的表达方式更让
人悦目,ruby程序的满眼的end让人不舒服。当然,
ruby认为end的方式比python更先进。
ruby还没有python的“自省”的能力,没有从程序文
件中生成文档的能力。
ruby没有国际化的支持。国际化支持在ruby的计划中。
这是因为ruby的历史比python要短造成的。
python和ruby的语言的选择:
从简单的就是好的来说,选python是没错的。python
适合寻找简单语言的人,这很可能造成python更流行,
因此也有更多的支持。但如果要追求更强大的语法功
能,则ruby是好的选择。因为ruby和python的哲学有
很多相似的地方,先从python入手,尽量用python,
如果python的能力不足了,可以再找ruby。
ruby和python的比较,就像五笔和拼音输入法的比较。
拼音作为入门的输入法和长久使用的输入法都没有问
题。五笔适合更高要求的情况。如果追求性能的不妨
学学ruby。对编程语言感兴趣,想了解各种编程概念
的学ruby也会很兴奋。
JRuby:使Java和Ruby成为一家人
一、 引言
Ruby是现在编程界讨论得正热火朝天的一种语言。
这种语言功能强大而且易于使用;同时Ruby还紧密
绑定到例如Ruby on Rails等web应用程序开发框架中。
另一方面,在过去的十年间,Java正迅速成长为业界
领先的面向对象的软件开发语言并且运行于诸多平台
之上。而JRuby则是一个100%的Ruby编程语言的纯
Java实现。
本文是JRuby的一个入门篇;同时,还会向你展示它
是如何结合Java语言的优势,从而提供给Java开发者
一个快速而强有力的创建应用程序的可选方案的。
JRuby
二、 Ruby-席卷计算世界的脚本化语言
近几个月来,在编程领域的几乎每一个人可能都会耳
濡目染Ruby。日益盛行的Ruby on Rails web开发框
架正在帮助使Ruby成为快速开发和测试应用程序的
一门语言。作为一种解释性的脚本化语言,Ruby提
供了快速而容易的面向对象编程技术,同时还提供了
许多非常干净利索的特征,例如closure,块和mixins。
另外,Ruby还是高度可移植的,可以广泛运行于
Unix/Linux, Windows以及MacOS平台之上。要想
全面了解Ruby,我建议你去阅读W.Jason Gilmore的
文章。
JRuby
三、 Java-辉煌的面向对象语言的十年
Java最早由Sun Microsystems的James Gosling在上一世纪九十年
代创建。当时,Gosling开发这一语言的主要目的是想提供一种虚
拟机和一种C风格的标志语言,同时使之具有比C/C+ +更为一致
和更为简单的特征。Java的另一个主要的目标是提供一种"编写一
次处处都能运行"(WORA)的理想语言,允许一个程序在一种平台
上开发而能够不经任何重编译即可运行于另一种平台。这个Java
平台由一个Java运行时刻环境和Java软件开发包(SDK)组成。现
在,Java能够为从移动设备到企业系统的诸多平台提供SDK,这
分别对应于它的JavaSE,EE和ME技术。在过去的十年间,Java
已经被广泛应用于移动设备、无人值守系统、web应用程序、金融
系统以及实时系统等众多开发领域。
JRuby
四、 JRuby-Java虚拟机(JVM)上运行的Ruby
JRuby则是一个100%的Ruby编程语言的纯Java实现,
这种语言在CPL,GPL和LGPL三种开源许可下发行。
它是一个1.8.4 Ruby解释器,其中提供了大多数Ruby
的内置类。JRuby支持从一个Ruby程序中定义Java类
并实现与之交互,另外还对Bean脚本化框架实现支
持。在本文成文之时,JRuby的当前版本是0.9.1。
JRuby使Ruby程序能够存取Java类,允许它们作为程
序内使用的一级对象。如今, JRuby的创始人,
Thomas Enebo和Charles Nutter,已经受雇于Sun专
门研究开发JRuby。
JRuby
JRuby允许现有Java开发者充分利用Ruby提
供的强有力和易于使用的编程特点,而Ruby
开发者将能够自由使用庞大的曾使Java广泛地
应用于各个软件开发领域的Java库来进行开发。
在归于Sun麾下之后,JRuby的发展前途一定
会更加光明。
各位读者不妨花一点时间进一步研究一下
JRuby,挖掘一下这个工具到底蕴含着多大的
能量。
http://dev.xuezhishi.net/program/Java/200702-12/6233.html
Lua
Lua 是一个小巧的脚本语言。作者是巴西人。该语言
的设计目的是为了嵌入应用程序中,从而为应用程序
提供灵活的扩展和定制功能。它的主页是
www.lua.org。
Lua最著名的应用是在暴雪公司的网络游戏WOW中。
Lua脚本可以很容易的被C/C++代码调用,也可以反
过来调用C/C++的函数,这使得Lua在应用程序中可
以被广泛应用。不仅仅作为扩展脚本,也可以作为普
通的配置文件,代替XML,Ini等文件格式,并且更容
易理解和维护。
Lua由标准C编写而成,代码简洁优美,几乎在所有
操作系统和平台上都可以编译,运行。
一个完整的Lua解释器不过200k,在目前所有脚本引
擎中,Lua的速度是最快的。这一切都决定了Lua是
作为嵌入式脚本的最佳选择。
Lua
Lua 有一个同时进行的JIT项目,提供在特定平台上
的即时编译功能,这将给Lua带来更加优秀的性能。
请访问 http://luajit.luaforge.net/ 来了解这个项目。
和Python等脚本不同,Lua并没有提供强大的库,这
是由它的定位决定的。所以Lua不适合作为开发独立
应用程序的语言。不过Lua还是具备了比如数学运算
和字符串处理等基本的功能。
Lua 目前的最新版本是 5.1.
Lua
1 目标
LUA的目标是成为一个很容易嵌入其它语言中
使用的语言。大多数程序员也认为它的确做到
了这一点。
很多应用程序使用LUA作为自己的嵌入式脚本
语言,以此来实现可配置性、可扩展性。这其
中包括魔兽世界、博德之门等。
Lua
2 特性
LUA有如下特性:
轻量级 LUA语言的官方版本只包括一个精简的核心和最基本的库。
这使得LUA体积小、启动速度快,从而适合嵌入在别的程序里。
可扩展 LUA并不象其它许多"大而全"的语言那样,包括很多功能,
比如网络通讯、图形界面等。但是LUA可以很容易地被扩展:由
宿主语言(通常是C或C++)提供这些功能,LUA可以使用它们,就
像是本来就内置的功能一样。
其它特性 LUA还具有其它一些特性:同时支持面向过程编程和面
向对象编程;自动内存管理;提供一系列数据结构,包括数组、
链表、集合、字典、散列表等;语言内置正则表达式匹配;闭包
(closure);函数也可以看做一个值;提供多线程支持;等等。
Lua
3 示例代码
是的,你猜对了:hello world...
print "Hello, world!"
一个比较复杂一点的例子,但是它展示了什么是闭包:
function create_a_counter()
local count = 0
return function()
count = count + 1
return count
end
end
create_a_counter()返回一个记数器,每次调用这个记数器,都会
得到一个比上次大1的值。
Lua
参考资料:
1.www.lua.org
2.www.luachina.net
3.http://lua-users.org/wiki/
4.http://www.luaforge.net/
5.http://sourceforge.net/projects/lua-ce Lua5.1 在WinCE 4.2下的版本,对于嵌入式应
用非常合适。
Lua
动态语言有很多种,比如最常用的Python,Ruby,
Lua,Perl,PHP等等都是动态语言。但为什么游戏
开发人员如此偏爱于Lua呢?有以下几个原因:
Lua是一个功能强大的,轻量级的编程语言,主要是
用来扩展应用程序。另外,Lua是一个免费软件。
“使用Lua作脚本,主要是因为它小巧玲珑(体积小,
运行快),而且它的语法又比较简单明了。
不过,使用LuaAPI将Lua引擎集成到程序中,确实有
一些不方便——用一位网友的话来说,就是“就象用
汇编”。
当然,现在你不用再这么辛苦了,因为你可以使用
LuaWrapper For C++。使用这个工具,在C++中集成
Lua脚本就是轻而易举的事。你原有的C++函数和类,
几乎不需要任何改变,就可以与Lua脚本共享。"――
《在C++中集成Lua》
Functional Pogramming函数编程
函数编程(Functional Pogramming)可能会再度兴起。
Java平台的JavaFX语言,具备所有重要函数编程的特色,
所以应该归类为函数语言(或者至少是多重思维语言);
目前两大开发平台(Java与.NET)都开始出现函数编程
思维的踪迹。
Java平台的JavaFX语言,具备所有重要函数编程的特色,
所以应该归类为函数语言(或者至少是多重思维语言);
.NET平台的C# 3.0也存在相当多函数编程的影子。微软
的LINQ本来就源自于函数语言,更不用提微软官方的F#
语言,F#沿用相当多ML语言的语法,更是彻底的函数语
言(其中的F,应该是Functional的意思)。
Functional Pogramming函数编程
根据Tiobe对于2008年10月语言需求所做的统计,面
向对象语言占57.6%,程序语言(Procedure
Language)占39.6%,函数语言占1.9%,而逻辑语
言占0.9%。以上加起来刚好百分之百。
但是,这样的分类并不精确。现在的语言很少是单一
思维,几乎都是多重思维(Multi-paradigm),特别
是面向对象和函数编程,因为两者间并没有冲突的地
方,许多面向对象语言会渐渐纳入函数编程的特色。
例如,尽管C# 3.0具有相当多函数语言的特色,但是
依然会被Tiobe归类于面向对象语言的类别。
Functional Pogramming函数编程
函数编程最重要的基础是Lambda Calculus,
在C# 3.0称为「Lambda表示式」,在Python
称为「Lambda函数」,在PowerShell称为
Scriptblock(剧本区块),在Java称为匿名方
法(Anonymous Method),不同语言会用不
同名词称呼它,但其实都是类似的东西。从这
个角度来看,许多主流语言多少都具备函数编
程的能力。
这个趋势应该会延续下去,许多既有语言推出
新版本时,会持续加入函数语言的特色。
Functional Pogramming函数编程
REBOL和许多人工智能专家使用的Common
Lisp,近年兴起的Erlang,Perl高手唐凤专精
的Haskell,这些也都是函数语言。
为什么我们喜欢函数编程?因为函数编程可以
让我们把时间花在有生产力的事情上,而不是
处理许多琐碎的事。
简单地说,函数语言可以让我们用简单的方式
写程序,但是威力又强大。
Functional Pogramming函数编程
「简单」与「威力」,正是函数编程的两大优势。简
单,来自于以「值」(Value)为中心,不用理会下
面平台是什么机器、内存要如何配置、如何指定。函
数编程的威力,则来自于「递归」以及将函数视为
「First-class」(一等)的值(函数本身就是值,可
以被传递、被指定)。
自动内存管理虽然始于函数语言,但是近年来已经进
入各大主流语言。而将函数视为一等的数据型别,也
开始进入各大主流语言。这些都要归功于函数语言,
尤其是Lisp。
Functional Pogramming函数编程
Lisp是函数语言的始祖,诞生于1958年,相当于50年
前。换算成人类年龄的话,Lisp已经算是程序语言中
的人瑞了。Lisp的后继者众多,其中,至今仍然最活
跃的是诞生于1980年代的Common Lisp。在Peter
Seibel写出《Practical Common Lisp》一书,并得到
Jolt Award之后,让大家逐渐对Common Lisp一改印
象,开始认为它不只是学术上的语言,而是一种务实
的语言。
一般来说,相较于C、Pascal这类命令式编程
(Imperative Programming),函数编程的缺点是效
率比较差,这也是函数语言一直无法流行的主因之一。
不过,随着处理器速度的提升,编译程序技术的进步,
都让效率不再是问题,甚至在数学运算上,用Clean
与OCaml(这些都是函数语言)开发出来的程序,效
率也不会比C差。
Functional Pogramming函数编程
尤其是在多核心处理器和分布式计算时代,函数编程
更是比命令式编程具有更强的优势。例如近年来逐渐
受到重视的Erlang,正是将重点放在并发与容错上。
用Erlang可以轻松开发出来的系统,如果改用别种语
言开发,可能会造成程序长度暴增以及不稳定的情况。
如果你想学习函数编程,而且如果你使用.NET平台,
建议你使用F#;如果你使用Java平台,你可以考虑
JavaFX;如果你没有Java与.NET平台考虑的话,那
么你可以选择Common Lisp与Erlang。
若未曾使用过函数编程技术,思维就会受到传统命令
式编程作法的拉扯,一开始时会很不习惯,但只要坚
持下去,等到跨过门坎之后,函数编程其实更自然,
生产力更高。