都说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. Delphi XE5教程10:Delphi字符集

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误!也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者可 ...

  2. Html.TextBoxFor三元判断

    @Html.TextBoxFor(item => item.DiscountOW,(Model.TripType == "单程" || (Model.TripType == ...

  3. Thread线程初探

    using System; using System.Threading; class Example { static void Main() { TimeSpan interval = , , ) ...

  4. Java方法重载

    Java允许一个类中定义多个方法,只要参数列表不同就行了.如果同一个类中包含了两个或者两个以上的方法的方法名相同,但形参列表不同,则被称为方法重载. /* 参数类型不同的重载 */ public cl ...

  5. MySQL主从同步报Client requested master to start replication from position

    数据库版本:5.6.16 测试环境MySQL 主从,数据库被人重启,忘记开启start slave,导致主从失效,停了一天的数据没有追上. 查看从库的数据库状态:show   slave   stat ...

  6. gtest功能测试一

    一.前言 这篇文章主要总结gtest中的所有断言相关的宏. gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列.一个直观的解释就是: 1. ASSERT_* 系列 ...

  7. JAVA类与对象(一)----基础概念理解

    面向对象基本概念 面向对象是一种新兴的程序设计方法,或者说是一种新的程序设计规范,其基本思想是使用对象.类.继承.封装.消息等基本概念来进行程序设计.它是从现实世界客观存在的事物(即对象)出发来构造软 ...

  8. Cocos2dx中的四种控件及主要用法

    1.控件:即控制对象,控制按钮之类的精灵 2.主要介绍四大类控件: CCControlSlider:进度条 CCControlSwitch:开关 CCScale9Sprite:9妹图(用于缩放) CC ...

  9. oracle 自定义函数

    函数和存储过程类似,可以简单的理解为一段可以执行某个活动/动作的子程序,可以作为一个系统对象被存储在数据库中,可以重复调用.与存储过程不同的是,函数总是向调用者返回一个值,而存储过程不能有返回值. C ...

  10. Daily Scrum 11.8

    摘要:本次meeting继续讨论程序的问题以及单元测试和集成测试.本次测试为1.00版本.本次的Task列表如下: Task列表 出席人员 Today's Task Tomorrow's Task 刘 ...