都说Anders Hejlsberg是Delphi语言的作者,前一阵仔细读了VCL源码,惊叹于它的巧夺天工,未免对编译器的作者有些不服气,觉得首功不是他。今天仔细想了想,还是觉得不服不行。以下是我的理解:
 
1. Delphi编译器把高级语言Pascal的代码翻译成了CPU可以理解的汇编指令,相当于人类的精子与卵子结合了,已经怀胎了,从而孕育了一个生命。具有高级生命的一切特征,但仍是一个胚胎。
2. Delphi编译器通过这种形式function GetBkMode(hDC: HDC): Integer; stdcall;,即可以任意调用Windows的API,就使得Pascal语言与操作系统联系起来了,即小孩从母亲肚子里呱呱坠地了。
3. Delphi编译器,确切的说是连接器,把程序员的所有成果集合成一个exe文件,即获得了Windows的一个入口,即孩子的母亲承认他是自己的孩子,也就相当程度上获得了母亲的呵护,从此可以成长了,而不是一个没人疼没人爱、随时都会饿死的小孩。此时已经可以用纯API进行Windows编程了,但能力不强并且繁琐,相当于8岁的小孩。
4. Delphi编译器,使得Pascal语言自练神功,即扩展成Object Pascal,不仅仅提供了OO的特征,更提供了PME的先进特征,还有其它细节,比如inherite的特殊作用,方法指针,内嵌汇编,消息处理,动态方法,类之类,Interface等等不计其数。相当于这个小孩从8岁开始,到了上学的年纪了,开始表现出神童的许多特征和能力,一直苦读到16岁,可以说已经是声名远播、前途不可限量了。
5. 这个小孩不仅自练神功,而且还练了一些旁门武功,比如COM,BPL,资源文件的处理等等(旁门武功我接触不多,在此无法细述),都是多快好省,而且还练成了。
6. Delphi编译器提供了如此之多的功能,居然还编译速度飞快,相当于这个小孩读书速度飞快,并且过目不忘。不仅仅是慢工出细活,效率也很重要,毕竟人生的生命有限。

----------------- 到这时候还与VCL没有什么任何关系,而小孩却已经成长到16岁了,不得不说Anders就是Delphi语言之父 ---------------

----------------- 有了生命,有名门母亲照料,还练成九阳神功 ---------------
 
7. Delphi语言这个小孩此时已经长大到16岁了,天资过人, 但毕竟还没有创出一番大事业(因为Pascal语言的语法规则毕竟不多,虽然背后编译器所作的工作十分复杂)。此时他遇到了一位贵人,这位贵人就是Chuck Jazdzewski,他因材施教,充分利用Delphi语言自身的一切优势(这点很重要),重新把Windows整理了一遍(包括所有WINAPI和Message,还有Form当作容器),那就是VCL框架源代码,并把它无私地传授给了小孩,顺便还给了他一件相当顺手的兵器,那就是IDE。不仅如此,这个兵器上还有许多构思巧妙的开关,即OpenAPI,只要开发者有心,自己就可以可无限扩展兵器的功能。
8. VCL不仅仅提供给Delphi语言自身强大的windows编程能力,而且还赋予它相当强大的组织能力,即单独的Delphi控件的开发能力。从此以后,无论世上阿猫阿狗,还是其它的绝世高手,都可转投Delphi门下,来者不拒,而且过程相当简单,蟹兵虾将之多举世第一,善于利用的话,可轻易成事(做出软件产品)。
----------------- 此时Delphi语言有20岁了,一出道,就轰动世界,仅仅面向开发工具这样一个小众市场,一度年销售额居然达到5亿美元,贵人很重要 -------------------
----------------- 练成乾坤大挪移(普通人可是要练30年啊),还顺手捞了一件兵器,相当于屠龙刀 ---------------
----------------- 相当于继续向少林武当或其它高手学习,包容兼蓄,而且练的很快 ------------------
 
9. 更奇特的是,在VCL基础上,提供了无比强大的数据库功能,白痴都可以做出像模像样的数据产品来,压得专业提供数据库能力的PB一点脾气没有。有了这样强大的专业能力,却又丝毫也不损失Delphi提供的其它各方面强大能力。开发者时间宝贵、生命宝贵啊,如此一来谁还会把资源投到PB上,从此一度也颇为耀眼的PB彻底出局。搞笑的是,Delphi还提供了多种不同的Web解决方案,虽然有些旁门左道的味道,却也不失为一种解决问题的方案,其中我最喜欢的Unigui,真的很不错,编出来的程序可以是双版的(同一程序可提供Web服务功能和桌面软件的功能),而且还可以照样应用JavaScript和CSS的功能(如果你会的话)。
----------------- Delphi语言岁神功已成,仍广开言路,多拜码头,专业能力与各种旁门左道的解决方案同时提供,使得Delphi用户有了更多的保障 ------------------
----------------- 虽然贵为武林数一数二的高手,仍狠练某一门剑法,以至于仅仅比剑(DB)就把专业剑法高手给比了下去,刀虽然也练的很厉害但仍有不足,单独比刀(Web)却仍比不过专业刀客 ------------------
 
10. Delphi如此成功,自然也得帮一下同门师兄BCB,借给它VCL吧,虽然都是Pascal源代码,不仅如此,所有Delphi控件也都可被BCB所使用,虽然实际上有些不伦不类,但在外人看起来,功能也是很强大的。累了,以后再继续写吧。
----------------- 相当于把倚天剑送给了周芷若,但九阳神功没法送给她 ------------------

Delphi语言获得生命的原因和过程的更多相关文章

  1. Delphi 的 FireDAC 连接管理与配置过程

    Delphi 的 FireDAC 连接管理与配置过程: 使用 FireDAC 技术连接 数据库,主要是使用  TFDConnection ,其中有一参数是选择  ConnectionDefFile. ...

  2. 浅尝Spring注解开发_Bean生命周期及执行过程

    Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含Bean生命周期.自定义初始化方法.Debug BeanPostProcessor执行过程及在Spring底层中的应 ...

  3. Delphi 语言

    自1995年Borland公司发布Delphi 1.0以来,Delphi受到很多开发者的亲睐,到1999年发布Delphi5,Delphi以其开发快捷.控件丰富.易于上手等优势吸引了众多的开发者,用户 ...

  4. JVM生命周期与运行过程

    1. Java虚拟机的生命周期 Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序.程序开始执行时他才运行,程序结束时他就停止.你在同一台机器上运行三个程序,就会 ...

  5. c语言编译预处理和条件编译执行过程的理解

    在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令.预处理命令属于C语言编译器,而不是C语言的组成部分.通过预处理命令可扩展C语言程序设计的环境. 一.预处理的工作方式 1.1. ...

  6. Servlet学习(一)——Servlet的生命周期、执行过程、配置

    1.什么是Servlet Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过jav ...

  7. 07.Delphi接口的生命周期

    在Delphi的接口中,是不需要释放的,调用完之后,接口的生命周期就结束了,如下面的例子 unit mtReaper; interface type // 定义一个接口 IBase = interfa ...

  8. C语言代码区错误以及编译过程

    C语言代码区错误 欲想了解C语言代码段会有如何错误,我们必须首先了解编译器是如何把C语言文本信息编译成为可以执行的机器码的. 背景介绍 测试使用的C语言代码 导入标准库,定义宏变量,定义结构体,重命名 ...

  9. 整理ViewController的生命周期和加载过程

    按照执行顺序排列 - initWithCoder:通过nib文件初始化时触发 - awakeFromNib:nib文件被加载的时候,会发送一个awakeFromNib的消息到nib文件中的每个对象 p ...

随机推荐

  1. Configuration python CGI in XAMPP in win-7

    1.After install XAMPP,we need add the path of the Mysql just find the path and add it to your sys-pa ...

  2. Linq中延迟查询和立即查询

    //立即查询 public static void NowExecute() { var results = new int[]{5,4,3,2,1,6,7,8,9,0 }; int i = 0; v ...

  3. Python原始套接字编程

    在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_R ...

  4. Vim配置IDE开发环境

    我的vim IDE界面: 1.安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get instal ...

  5. 从零开始学ios开发(五):IOS控件(2),Slider

    下面继续学习ios的其他控件,这次会使用到的控件有Slider,当然还有一些之前已经使用过的控件Label. 这次我们不新建一个project了,当然如果你愿意重新创建一个新的项目也完全可以,我们还是 ...

  6. CentOS 6.0 设置IP地址、网关、DNS

    切忌:    在做任何操作之前先备份原文件,我们约定备份文件的名称为:源文件名称+bak,例如原文件名称为:centos.txt    那么备份文件名称为:centos.txtbak 引言:linux ...

  7. I/O空间映射

    转自:http://www.cnblogs.com/hydah/archive/2012/04/10/2232117.html 注:部分资料和图片来源于网络,本文在学习过程中对网络资源进行再整理. I ...

  8. NodeJS -Express 4.0 用include取代partial

    在Express 4.0 下按如下方法设置: (1)运行cmd 输入:npm install express-partials -g (2)下载成功后.在app.js 中引用此插件   var par ...

  9. 查看Linux磁盘空间大小

    一.df 命令: df 是来自于coreutils 软件包,系统安装时,就自带的:我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置: 举例: [root@localhost beinan ...

  10. 1458: 士兵占领 - BZOJ

    Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放 ...