CSDN博客

img tanaya
博客专家

Visual Basic不可能消失(From Yesky)

发表于2004/9/27 11:41:00  1721人阅读

一直以来,学者们都预言Visual Basic的未来具有不确定性,这显示出人们完全误解了促成某种编程语言流行的原因,同时它还忽视了Visual Basic自身独特的精神。
 
  近十年以来人们一直预言Visual Basic会消亡,但即使在Visual Basic.NET出现后,一切仍然没有发生变化。从最近的报道来看,VB.NET的未来受到了它的兄弟语言C#的挑战。即使过了这么多年,人们还是无法理解VB——以及现在的VB.NET——仍然是一种世界上最流行的编程语言。的确,某些VB程序员会转向C#、Java或Delphi,但是这些语言所考虑的变革因素却突出了一个事实——它们都是朝着易用和快速开发的方向演化的,而这些特性正是Visual Basic所发明和倡导的。无论发生了什么事情,VB这种语言、它的灵魂都征服了编程世界,并且将继续存在。实际上,VB所倡导的理念,还从来都没有像现在这么活跃过。

显著的成功

  Visual Basic早期版本并没有引起巨大的反响,但是这种语言却是革新的,并且作为一种新的编程范例(paradigm)吸引了相当大的注意力,因为它允许程序员可视化地建立窗体(form)。人们第一次可以通过把控件拖放到设计界面上,不需要经过其它语言所需要的冗长的编辑-编译-测试周期就可以看到程序的外貌。

  Visual Basic通过执行终止运行(end-run)进一步缩减了编辑-编译-测试周期。传统的VB类似于很多早期的BASIC实现,它是一种解释语言,你可以在运行时(runtime)编辑VB代码。即使程序还在运行之中,VB集成开发环境(IDE)也会立即应用大多数代码改变,这让你能够在调试程序中逐步执行某段代码、查找错误、改正错误并重新测试代码,而这一切都不需要停止程序来重新编译。这种称为“编辑后继续运行(edit and continue)”的特性使VB的生产效率大幅度提高,超越了旧的编辑-编译-测试的开发模式。

  程序员喜欢拖放控件的能力,但是它们并没有满足于内建的(built-in)控件。幸运的是,微软制订了一种架构(architecture),程序员群体可以使用它来建立控件。很快地,企业开发人员建立了数百个“VBX”控件(以及后来的ActiveX控件),它覆盖了整个工业领域,同时还把可重复使用(reusable)的代码的观念提升到了一个新的层次。

  Visual Basic同时还是第一种流行的用于通用目的的编程语言,它提供了真正的集成的数据库访问。通过微软数据访问对象(DAO)技术,在VB中处理关系数据库变得非常简单,以至于在很多情况下开发者根本不需要了解下层关系数据库工作方式的任何信息,他们可以把感知数据库的(database-aware)控件拖放到窗体上。即使对于更加高级的开发者来说,DAO(和它的继承者,例如RDO、ADO和现在的ADO.NET)也使生产效率大幅度提高了。

  在第三版中,VB变得稳定和快速。它拥有当时可以使用的最好的IDE,同时数百万兼职程序员都可以理解它。VB迅速成为世界上最流行的应用程序编程语言,并且无论出现它会消逝的预言还是语言本身的实质改变,它都维持着自己的位置。

  Visual Basic一直保持着流行的原因在于它提供了开发者群体最关心的六个要素:

  1. 类似Basic的、大小写不敏感(case-insensitive)的语法

  2. 可视化设计的能力

  3. 带有集成的调试程序的伟大的集成开发环境

  4. 编辑后继续运行(Edit-and-continue)

  5. 多种便宜的、牢固的后续控件

  6. 简单的、集成的数据库支持

  其它的一些语言也提供了这些特性的子集,但是没有任何一种语言成功地占领VB所占有的巨大市场。

  其它厂商长期垂涎于VB的开发人员基础,并且作出了巨大的努力,希望引诱VB开发者迁移到其它的平台。例如,Borland的Delphi语言提供了VB所提供的一切东西,除了类似BASIC的语法和编辑后继续运行。实际上Delphi提供的能力比VB提供的能力要多一些。例如,它的速度更快。Delphi代码执行的速度本质上与C++的速度相同。Delphi还提供了用于自己的Dbase和Interbase桌面数据库的本地感知数据库的控件。Delphi的未来版本甚至于提供了ADO包装。

  但是Delphi使用了对象Pascal语言基础而不是BASIC核心,而这种特性的改变妨碍了它的广泛采用。无论速度是否更快或提供了真正的面向对象编程(OOP)能力——简而言之,就是基于COM程序包的VB.NET的所有特性——Delphi从来都不是VB普及的重要竞争者。

C#能代替Visual Basic吗?

  微软意识到有些特性使得VB普及起来,并把这些特性包含到了VB.NET中。可是C#从来都不是作为“VB杀手”来设计的。其实,C#更像是用于吸引C++和Java的开发者。C#提供了类似C的语法,与C++和Java都很相似。然而,它丢失了六条特性中的第一条——类似BASIC的语法。尽管对于有些开发者来说语法并不重要,但是对于其它一些开发者来说这太重要了。

  此外VB和目前的VB.NET都不是大小写敏感的语言。例如“Email”和“EMail”是相同的变量。在C、C++、Java、Jscript和其它类似C的语言中,改变大写是错误的,EMail和Email不是相同的变量。

  C#的确拥有可视化的设计和简单的、集成的数据库支持,并且最终会拥有可供选择的巨大的后续控件库——但是这个控件库与VB.NET开发者所拥有的控件库相同。

  C#的IDE还需要更多的东西。即使C#与VB.NET共享IDE,该IDE也分别与每种语言相对应。例如,VB.NET中的Intellisense就比C#中的好多了,你可能猜到了——C#中的Intellisense是大小写敏感的。为什么在辅助人们查找未知信息和不记得的信息的搜索特性中实现大小写敏感性是我无法理解的。更糟的是,它的大小写敏感性还是不一致的。

  没有人否认C#语法更加简练。如果你讨厌输入并且没有使用Intellisense的代码填充能力,或者你已经在使用C语言语法,那么你就应该使用C#。但是这并不意味着C#将最终代替VB.NET。

  更大的问题是VB.NET是否会代替VB。其中一个问题是VB.NET也没有包含VB的所有特性。特别是VB.NET丢失了编辑后继续运行、长期许诺、继续交货的特性,而它们将成为VB程序员迁移到.NET版本关键的影响因素。

  代码的不兼容性是阻碍迁移的另一个因素。微软还没有使代码从VB迁移到VB.NET足够简单。尽管VB.NET语法与传统的VB语法非常类似,但却不是相同的。它不仅是语法的改变,同时还是对框架的增添。VB到VB.NET的升级向导不仅现在,而且将来可能也永远不能十分智能化地无缝地迁移所有的应用程序。

  同时,大多数VB程序员并没有大型的垂直应用程序需要迁移,他们要么编写了小型应用程序,重新进行编写并不昂贵,要么计划用VB维护已有的应用程序,同时用.NET建立新的应用程序。对于这类大多数程序员来说,语言的不同是受到欢迎的,从而使VB.NET成为传统VB的唯一可能的真正威胁。

VB.NET会超越Windows平台吗?

  有趣的是,Java阵营的一些进步好像对Visual Basic编程也有影响。由于忽略了建立语言的跨平台版本,微软在充分利用这些语言的大众化方面已经失败了。这意味着Sun公司的Java由于拥有在任何平台上运行的能力,将会领导跨平台领域,而这会带来实际的商业利益——在服务器领域。但是接着Sun也失败了,它由于忽略了提供类似VB的GUI开发环境,因而无法利用Java的大众化,结果是Java成为了服务器端、非GUI应用程序市场之王,而VB、C++和.NET统治着桌面平台。

  但是情况不会永远不变,这需要感谢IBM的Eclipse项目,Java开发人员现在也可以建立容易响应的Windows应用程序,完全可以与微软编程语言编写的应用程序相媲美。并且Sun已经声明在Rave中将为Java开发者提供简单化的RAD特性。

  挑战这种趋势的都是一些忙于把.NET框架组件迁移到Linux和Unix上的开放和共享源代码的项目。如果这些项目取得成果,.NET开发者将最终获得与Java类似的跨平台能力。这些趋势将导致一些有趣的转换和变革,但是它们都没有直接威胁到Visual Basic。

保持多种选择

  Visual Basic.NET是Visual Basic真正的继承者,因为目前没有一种语言能像VB.NET一样匹配VB的特性集合。但是仍然存在抱怨者——一旦你决定离开传统的VB,就根本不用关心自己学习了那种语言。如果你决定迁移到VB.NET,你会发现它是完全可行的,如果觉得不太合适,也可以使用C#或J#编程。

  即使你决定完全与微软断绝关系并切换到Java或Delphi,你也会发现在学习了这些语言和框架之后,切换到.NET不是十分困难。除了少数的例外,所有这些编程语言背后的思想都是相同的。它们之间的语法和IDE的差别远远大于概念和能力的差别。

结束语

  VB的未来并没有不确定性。VB是一组特性的集合。所有流行的语言都在朝着适应这些特性的方向转变,而这些特性的倡导者是传统的Visual Basic,并且在Visual Basic.NET中得到了进一步的发展。不论语法、平台和框架是否相同,Visual Basic的精神都将继续存在。

阅读全文
0 0

相关文章推荐

img
取 消
img