Delphi的没落有三个原因(比较贴切)
1,Object pascal并没有像C/C++那样成为业内标准。
如果你使用C或C++写程序,可以在任何地方进行编译,例如Windows、Linux、手机,甚至是单片机上都可以使用C写程序。
没有成为标准的后果就是跨平台,以及影响第三方编译器的出现。Delphi曾经有一个Linux版本叫做Klinx但是已经好多年不再更新了。
所以这么多年来Delphi只有Borland一家公司苦苦支撑。
2,人才流失,与内部决策失误。
Delphi之父Anders Hejlsberg离开Borland去了微软,导致Delphi的编译器有三年的时间无人敢动,因为Anders Hejlsberg完全使用汇编实现的编译器,无人能够看懂。
Anders Hejlsberg去了微软之后推出了.NET框架,主打语言是C#,无论从类库命名还是代码风格都与Delphi很像,C#语法接近C,又不兼容C。接近C的好处是C系的程序员(C/C++/Java/PHP/)很容易上手,不兼容C的好处是没有历史负担,语法语义可以做的很优美。
此外决策层,频繁出现失误,有很长一段时间Delphi盲目的去跟随.NET,甚至IDE都改用.NET编写,还推出了VCL for .NET,结果却是丢掉了Win32原生开发,而重新编写的IDE又存在大量BUG,白白耗费大量时间与财力,而技术方面,无论是VCL还是编译器、甚至IDE从Delphi7以后就停步不前。
3,市场转变
开发市场现在更注重B/S结构的应用,桌面应用正在大幅减少,Delphi显然不是一个理想的WEB开发语言。
在桌面市场,解释执行的字节码正在成为主流,像Java、C#、Python、Ruby都是解释类语言。解释执行不容易发生内存泄露与内存错误,因为内存不再需要程序员去手动释放,程序编写更简单,语法也更加灵活,虽然效率可能会略低,但当前的趋势就是用CPU的时间去换取更昂贵的程序员时间,因为大部分程序对效率的要求并不高。其中C#的类库命名很接近Delphi,Delphi程序员转入最为C#比较容易。
使用Delphi编写一些项目,你可能需要几位比较高级的程序员才能胜任,而使用Java或C#只需要更少和更加普通的程序员。项目完成后Java或C#由于解释执行的原因会更加健壮,因为大部分问题都可以在编译期发现和解决。而Delphi编写的应用则需要较长的Debug时间,项目进度变慢。
当前的大部分项目,健壮性、开发周期、维护难度远远要比最终执行效率重要100倍。所以企业更多的是在招聘Java与C# 程序员,所以培训机构也在培养Java与C#程序员。现在根本无法见到一个像样的Delphi的培训机构,企业在招聘Delphi程序员的时候往往只是为了维护老旧的项目。
这个时候如果有新手问“我应该学习那种语言?”,“那种语言更容易就业?”。此类问题的答案是显而易见的。这对Delphi来说是一个恶性循环。
对于VB的没落的原因我没有仔细考虑过,因为我只用了30天的VB就把他扔掉了,他太简陋,语法不严谨“Else if”和“ElseIf”具有不同的语义,很容易写错。
作者:庄园
链接:https://www.zhihu.com/question/19622196/answer/12493867
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1、Delphi的发展没有跟上时代的要求。Delphi的成果缘于能够高效支持C/S开发,大量组件尤其是数据库组件降低了开发C/S结构中的数据库开发难度,提高效率。但是由于固守传统,错失B/S开发的机遇。李维在《Borland传奇》中讲过,Delphi在早期版本中(印象里是5.0)曾经有支持B/S开发的动议,但是被Borland公司高层否定了,未能有效利用C/S时代的优势,错失了历史机遇。等后来(7.0)加上支持B/S开发组件时候,技术上已经大大落后于时代了,成了非主流技术。除了B/S开发之外,即便是Windows底层开发Delphi也无法支持,更不必说嵌入式系统开发了。
2、Borland公司发展失误无法提供有力支持。Borland公司除了开发工具之外没有其他盈利产品,而开发工具产品在与Microsoft竞争中又逐渐处于劣势,拿不出足够资源来支持Delphi的发展。最后只能将开发工具卖给 Embarcader。
Delphi的没落有三个原因(比较贴切)的更多相关文章
- BaseAdapter导致notifyDataSetChanged()无效的三个原因及处理方法
原文 http://blog.csdn.net/dawanganban/article/details/21376979 前一段时间在做一个项目的时候遇到了一个关于BaseAdapter的notif ...
- Delphi COM编程技术三类型库(库文件中的工具栏,很全)
在COM组件的使用和开发过程中经常需要获取有关组件的信息.而COM组件以二进制代码的形式发布,如果不借助特定的工具这些相关信息将难以被获取.通过访问类型库就可以查看COM组件的信息. 一.类型库的基础 ...
- 为什么学习React Native三点原因
React Native不到两岁,兼容Android平台刚刚1年.我学习React Native其实也就不到1年,不算长,也不算短. Paul Graham在文章中写过:大多数人真正注意到你的时候,不 ...
- (转)Putty server refused our key的三种原因和解决方法
原文 上一篇博文介绍了使用Putty免密码登录,我后面试了另一台虚拟机,结果putty显示错误server refused our key(在linux下则表现为仍需要输入密码),搜索了下,很多人都遇 ...
- elementUI form表单验证不通过的三个原因
<el-form :model="form" :rules="rules"> <el-form-item prop="input&q ...
- codeblocks无法找到编译器问题的三个原因
出现如下提示: 查看了网上的资料, 1.编译器选择错误 查看路径:setting→compiler Selected compiler选取你已经安装且准备使用的编译器. 2.工程创建时配置错误 查看路 ...
- Delphi 语言
自1995年Borland公司发布Delphi 1.0以来,Delphi受到很多开发者的亲睐,到1999年发布Delphi5,Delphi以其开发快捷.控件丰富.易于上手等优势吸引了众多的开发者,用户 ...
- 第三章 传奇的开始--Delphi(附读书笔记)
第三章 传奇的开始--Delphi "是惊世之作的Delphi让Borland重新站了起来,没有当初的Delphi,就没有今日的Borland!" "是Turbo Pas ...
- 终于懂了:WM_PAINT 与 WM_ERASEBKGND(三种情况:用户操作,UpdateWindow,InvalidateRect产生的效果并不相同),并且用Delphi代码验证 good
一直对这两个消息的关系不是太了解,借重新深刻学习windows编程的机会研究一番. 1)当窗口从无效变为有效时,比方将部分覆盖的窗口恢复时会重绘窗口时:程序首先会通过发送其他消息调用DefWindow ...
随机推荐
- poj1573&&hdu1035 Robot Motion(模拟)
转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接: HDU:pid=1035">http://acm.hd ...
- 立贴读 《CLR》
弱弱的说,我要开始读<CLR>这本书了,怕自己不能坚持下来,特立贴监督自己,本来是大牛们涉及的区域,现在好朋友的鼓励下,勇敢的踏入,如有错误,还请各位指正.
- WPF 自带Datagrid编辑后无法更新数据源的问题
原文 WPF 自带Datagrid编辑后无法更新数据源的问题 解决办法: 在列的绑定属性里加上UpdateSourceTrigger,示例XAML如下 <DataGrid Grid.Row=& ...
- System.gc
Java中的内存分配是随着new一个新的对象来实现的,这个很简单,而且也还是有一些可以“改进”内存回收的机制的,其中最显眼的就是这个System.gc()函数. 乍一看这个函数似乎是可以进行垃圾回收的 ...
- 【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试
一. Fiddler内置命令. 上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都成为一个sessio ...
- Redhat下安装fedora
步骤具体解释: 1:到fedora官网下载fedora的DVD镜像文件. 2:在linux系统中预留一部分为未分区的空间大约50G 3: 在linux系统上的根分区创建一个fedora的目录,里面 ...
- VS2010+QT4.8.5 +FastReport教程
如需转载请标明出处:http://blog.csdn.net/itas109 採用QT 的QAxObject方式执行FastReport特别麻烦,并且无法在编译的时候知道代码是否正确,并且大部分的函数 ...
- MFC类中获得其它类指针
当用VC++的Application Wizard生成除了CDialog Basiced以外的应用程序时,将自动产生视图类.文档类.主帧窗口类.应用程序类等等.一般来说,程序的核心数据及操作在文档类中 ...
- element.style覆盖了我的样式!!
原文:element.style覆盖了我的样式!! 有时候在写css时,显示效果会出现非常诡异的效果 不知道有没有遇到这种 css: #logo{ border: solid 1px blue; } ...
- 【cocos2d-js公文】十七、事件分发机制
简单介绍 游戏开发中一个非常重要的功能就是交互,假设没有与用户的交互.那么游戏将变成动画,而处理用户交互就须要使用事件监听器了. 总概: 事件监听器(cc.EventListener) 封装用户的事件 ...