开发工具大比拚之Visual C++ vs. Delphi(一)

2016-02-19 14:28 5 1 收藏

下面是个简单易学的开发工具大比拚之Visual C++ vs. Delphi(一)教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

【 tulaoshi.com - 编程语言 】

  引言

  “visual c++与delphi之比较”最近在csdn的论坛上的讨论非常火热,本文将以一个程序员的角度,从技术水平、功能、性能、易用性、稳定性、发展历程和前景等方面,以visual c++ 6和delphi 5为代表,尽可能客观地比较介绍visual c++和delphi这两大主流开发工具的优缺点,其中将涉及到语言、应用框架、控件、编译和连接、集成界面、调试、com、数据库开发等。本文还将对如何选择使用这两个开发工具提出一些建议。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  值得一提的是,由于c++builder与delphi同为inprise公司产品,它们除了使用的语言不同,其余特性几乎都相同。因此本文对c++builder程序员和学习者也有参考价值。

  语言:存在即是合理

  首先声明常被混淆的一点:vc和delphi本身不是语言,而是开发平台。它们所用的语言分别是略作扩展的c/c++和object pascal。我在网上常看到有人问应该学c/c++还是vc,这个问题很好回答:如果你学vc你就必须得学c/c++,或者说你学会了vc也就学会了c/c++了。

  言归正传,我们来比较一下c++和object pascal的优缺点。有人认为object pascal是“玩具语言”,c++才是“专业语言”,这是不对的。单从语言本身看,object pascal与c++属同一重量级。它们都是完全支持面向对象的语言,都扎根于“历史悠久”的面向过程的语言。c++是由c发展而来的,object pascal由pascal进化而来。它们都有很强的灵活性,都有自己的特长和不足。比如说,object pascal不支持多重继承、模板、操作符重载、内联函数定义、预处理、宏、全局静态类变量、嵌套类定义,等等,而这些都是c++支持的。但同样地c++也不支持object pascal的虚构造函数、过程嵌套、内置集合类型、内置字符串类型、"finally"构造等等,在rtti方面object pascal也比c++做得好。但这些并不重要,因为可以通过其它方式达到同样的目的,比如c++可以通过类扩展支持集合、字符串,object pascal可以通过“interface”多重继承,等等。关键是二者都可以很好地完成你手头的任务,这就够了。

  但是,仅仅比较语言本身是不够的,还得看它们的被接受和流行程度,学习曲线,发展前途,可移植性等,以及,很重要但常常被忽略的一点:与开发环境(指vc与delphi)及其应用框架的“磨合”程度。

  vc和delphi作为开发平台,很重要的一点就是提供了一个“无所不包”的应用框架:vc的mfc和delphi的vcl。mfc是用c++写的,vcl是用object pascal写的。当然,我们都知道,c++的使用范围比object pascal广得多,移植性也好得多。这本来是优点,但很有意思的是,正因为如此,微软写mfc时必须考虑最大限度减少对语言本身的改动,而把功夫下在源代码级,以便能尽可能支持ansi等标准,结果导致mfc的封装复杂而不直观。(尤其是它对消息的封装,下文还会提到。)太多的宏定义和含义模糊且自动生成、不得改动的注释使mfc乃至vc让很多新手望而生畏,不敢“下水”深入学习。而object pascal几乎是inprise“专用”的,不必考虑“标准”问题,因此inprise写vcl时就把全部精力放在了结构与性能上,结果语言与框架的磨合程度非常好。vcl框架的结构清晰,vcl代码的可读性非常好。许多人说delphi比较容易上手,也是这个缘故。天下没有白吃的午餐。你要工业标准吗?你要可移植性吗?(关于可移植性和兼容性,下文会详细比较。)那么请面对mfc的“天书”级代码吧。

  编译和连接:the need for speed

  不同的语言带来的另一个不同是,编译和连接的速度的不同,以及执行速度的不同。delphi的编译和连接速度,毫不夸张地说,比vc快几十倍。即使把vc的incremental link选项打开,delphi的编译和连接速度仍比vc快好几倍。并不是说微软的编译器不行,这是由c++的复杂性决定的。模板的处理、预处理和宏的展开都是很费时的。前文不是提到object pascal没有模板、预处理和宏吗?这本来是缺点,但带来的一个好处就是编译速度极快。至于编译完的二进制代码,在打开相同的优化选项的情况下,delphi和vc执行速度并没有太大的差别。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  为了克服编译的速度问题,c++编译器一般需要增强的连接器和预处理机制。但是预处理机制仍然存在若干问题:

  1)程序调试的断点行可能和代码行不同。
  2)没有将最新的代码信息综合进去。
  3)容易产生错误的逻辑。
  4)因为读错文件头而很容易产生类似“unexpected end of file”的错误。

  两个编译器有个共同点是都能识别无用的“死”代码,比如一个没有用的函数等等。编译后的程序将不包含这些多余的信息。delphi在这方面作得更加出色。它可以让你在编辑器中可视化地提示出那行代码是“活”的、那行代码是“死”的。这样你就能整理出最精简的代码。

  delphi在编译后将在左边显示一个小蓝点表示这行代码是“活”的。visual c++做不到这点。 delphi编译后的可执行文件至少有200k(如果不使用vcl,仅仅使用winapi,文件的大小将大大缩小)。但是visual c++编程使用mfc编译后的可执行文件通常只有几十k,主要是因为微软已经将系统运行库包含在windows系统了(borland公司曾经和微软协商这个接口,但是微软利用操作系统的优势不愿意公开)。同样道理,使用bde开发的的数据库程序必须附带3-5m的额外系统文件,也是非常不协调的。

  非常有趣的是,delphi能够使用由c++ builder创建的的obj文件,但是使用上受很大的局限性。

  顺便提一下vc的“edit and continue”功能。在调试中,这个功能是可以大幅度节省时间的,但仍不能和delphi的闪速编译比。

  最后,visual c++的编译和连接时的错误信息比delphi要详细和具体的多。特别是使用atl开发更加如此。

来源:http://www.tulaoshi.com/n/20160219/1607038.html

延伸阅读
标签: Web开发
IntelliJ IDEA 是和 Eclipse 齐名的Java IDE,顺应Ajax开发趋势,月初最新发布的IDEA 5.1版本提供了对JavaScript的支持。 IntelliJ IDEA 是和 Eclipse 齐名的Java IDE,因为华丽界面和创新特性而得到不少java程序员的喜爱(可惜不是免费的)。 顺应Ajax开发趋势,月初最新发布的IDEA 5.1版本提供了对JavaScript的支持,目前的特性有: 代码提...
Java 开发工具包是Sun公司的Java Software产品。他可以非常方便的开发和调试JAVA应用程序。下面就具体介绍这些工具的使用: rmic 功能说明: rmic 为远程对象生成 stub 和 skeleton。 语法: rmic [ options ] package-qualified-class-name(s) 补充说明: rmic 编译器根据编译后的 Java 类(含有远程对...
确定你的jdk环境变量配置是正确的。 对于Java初学者来说,编译和运行java程序是一件很头疼的东西。 显然,在命令方式下编译和运行java程序用久了,确实是很麻烦, 而我们又不想使用大型的开发工具时,UltraEdit是一个不错的选择, 很多初学者都是用它来编写java源文件的,可以高亮度显示要害字。 1。要害字高亮度显示...
用Visual C++开发数据库应用程序 EMAIL:zzh1415@21cn.com 1、 概述 1、1 Visual C++开发数据库技术的特点 Visual C++提供了多种多样的数据库访问技术——ODBC API、MFC ODBC、DAO、OLE DB、ADO等。这些技术各有自己的特点,它们提供了简单、灵活、访问速度快、可扩展性好的开发技术。 简单性 Visual C++中提供了MFC类库、ATL模板类以及Ap...
XCActionBar 是一个用于 Xcoded 的通用生产工具。 下载地址:https://github.com/pdcgomes/XCActionBar 基本命令: (1)「command+shift+8」或者双击「command」键可以打开「动作输入框窗口」 (2)「command+option+7」或者双击「alt」键可以执行「上次的动作」 编程时可用于双击或三击事件的按键分别为如下5个: (1)「alt」...

经验教程

153

收藏

60
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部