都说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. 深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复

    在某些参考资料中是说这两个方法任选其一就可,但经我测试,必须两个方法同时使用,才不会再出现错误提示 PHP Warning: strtotime(): It is not safe to rely o ...

  2. 基于lnmp.org的xdebug安装

    1. 下载xdebug wget http://xdebug.org/files/xdebug-2.3.3.tgz 2. 创建一个目录: mkdir ./xdebug 3. 复制xdebug包到xde ...

  3. pyQuery的安装

    1. 直接通过pip安装 你会发现lxml怎么搞都报错,后来单独先安装libxml2和libxslt pip是找不到这个包的,只好百度.发现有很多的例子的解决方案.后来发现了个实用的. 2. 先安装l ...

  4. [转]Linux下修改/设置环境变量JAVA_HOME

    1. 永久修改,对所有用户有效  # vi /etc/profile //按键盘[Shift + g], 在profile文件最后添加下面的内容: export JAVA_HOME = /home/m ...

  5. 执行umount 命令的时候出现 device is busy

    执行umount 命令的时候出现 device is busy ,有人在使用这块磁盘 umount /dev/sde1 umount: /u01/app/oracle: device is busy ...

  6. Log4Net学习【一】

    如果项目上过线的话,那你一定知道Log是多么重要.为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题.这时打一手好Log的重要性绝不亚于写一手好代码.项目出问题时,你要能拿出L ...

  7. Qt中使用Firebird 和 Firebird Embedded

    编译数据库连接插件 拷贝ibase.h,fbclient_ms.lib(改名gds32_ms.lib)等到ibase.pro项目文件夹下 configure -platform win32-msvc2 ...

  8. Vbox下linux虚拟机根分区扩容

    前言 使用一段时间VBox中的linux后可能会显示根分区空间不足的情况,需要扩容. 通过查阅相关资料,VBox中linux扩容主要有两种办法:通过lvm扩容和通过gparted扩容 LVM条件:VB ...

  9. word小技巧

    如何将英文和数字替换为times new romans 1,点击替换(ctrl+H) .2,在查找内容中输入”([A-Z0-9])“(不包括引号,但包括小括号),这是替换所有大写字母和数字,如果还想替 ...

  10. 消息传递选择:返回值 or 抛出异常

    1.返回值 bool 不应该用来表示函数是否调用成功,而应该返回业务值,例如 IsExist,HasNext