都说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. asp.net多图片上传实现程序代码

    下面是一个完整的asp.net同时支持多图片上传一个实现,有需要的朋友可参考一下,本文章限制同时可上传8张图片,当然大可自己可修改更多或更少. 前台代码如下: 复制代码代码如下: <% @ Pa ...

  2. php多层数组与对象的转换实例代码

    通过json_decode(json_encode($object)可以将对象一次性转换为数组,但是object中遇到非utf-8编码的非ascii字符则会出现问题,比如gbk的中文,何况json_e ...

  3. Ubuntu下PHP开发配置(新增redis、sphinx、sqlserver相关配置)

    由于本人比较懒,所以一般都是用xampp的直接拿来改的…………(当然xampp中一般php版本都是比较新的用的过程中请大家注意哈,可能会和老版本冲突) 此次除了使用xampp外,还扩展了sphinx, ...

  4. Android:什么是Holo?【Translated By KillerLegend】

    Android:什么是Holo? Martin Brinkmann on May 6, 2013 in Google Android 3 [Translated By KillerLegend] 当你 ...

  5. 22 高级SQL特性

    1.约束 为正确地进行关系数据库设计,需要一种方法来保证只在表中插入合法的数据.例如,如果Orders表存储订单信息,OrderItems表存储订单详细内容,应该保证Orderitems中引用的任何订 ...

  6. getchar(),gets(),scanf()的差异比较

    scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用gets()函数. gets可以接收空格:而sc ...

  7. Makefile之wildcard

    1.wildcard : 扩展通配符2.notdir : 去除路径3.patsubst :替换通配符 例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录$ mkdir test$ cd t ...

  8. [CSS]学习总结

    1. 遮挡层 .occlusion { opacity: -.35;/*透明程度*/ -moz-opacity: -.35; filter: alpha(opacity=-35); height: 1 ...

  9. WPF-控件-DataTemplate生成的控件

    <Window x:Class="由DataTemplate生成的控件.MainWindow" xmlns="http://schemas.microsoft.co ...

  10. php中的性能挖掘

    搞php以后,感觉总是很别扭,因为我觉得php会很慢,因为array普遍,在Key的循环查找不是很浪费性能么!因为我以前搞.net和java,他们是用的大多是寻址和索引方式,而php中太多是使用Key ...