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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

--------------------------------------------------------------------------------------------
认同你上述答案,但应该还有非常重要的一条:Borland 靠 Delphi 生活,而.net或java的拥有公司则没有这个压力。因此,我们国内的盗版环境对Borland是致命的伤害!若Borland不严打盗版,则收入有限而难以加大研发投入,以及加大文档支持与宣传力度;而严打盗版及制订高价,那么软件公司是能不用就不用,再加上你说的那几条,当然是雪上加霜了。
--------------------------------------------------------------------------------------------
还做了没有任何市场的Kylix
--------------------------------------------------------------------------------------------
王军,移动互联网/大数据
vb和delphi盛行的时候,正是windows下PC软件开发的黄金时代;后来互联网时代,变为java php .net等流行了;现在是移动互联网时代,流行的是java和object C
 
知乎用户,观天读史看天下
韬神 赞同
我认为Delphi的没落,主要有两个原因:
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的没落有三个原因(比较贴切)的更多相关文章

  1. BaseAdapter导致notifyDataSetChanged()无效的三个原因及处理方法

    原文  http://blog.csdn.net/dawanganban/article/details/21376979 前一段时间在做一个项目的时候遇到了一个关于BaseAdapter的notif ...

  2. Delphi COM编程技术三类型库(库文件中的工具栏,很全)

    在COM组件的使用和开发过程中经常需要获取有关组件的信息.而COM组件以二进制代码的形式发布,如果不借助特定的工具这些相关信息将难以被获取.通过访问类型库就可以查看COM组件的信息. 一.类型库的基础 ...

  3. 为什么学习React Native三点原因

    React Native不到两岁,兼容Android平台刚刚1年.我学习React Native其实也就不到1年,不算长,也不算短. Paul Graham在文章中写过:大多数人真正注意到你的时候,不 ...

  4. (转)Putty server refused our key的三种原因和解决方法

    原文 上一篇博文介绍了使用Putty免密码登录,我后面试了另一台虚拟机,结果putty显示错误server refused our key(在linux下则表现为仍需要输入密码),搜索了下,很多人都遇 ...

  5. elementUI form表单验证不通过的三个原因

    <el-form :model="form" :rules="rules"> <el-form-item prop="input&q ...

  6. codeblocks无法找到编译器问题的三个原因

    出现如下提示: 查看了网上的资料, 1.编译器选择错误 查看路径:setting→compiler Selected compiler选取你已经安装且准备使用的编译器. 2.工程创建时配置错误 查看路 ...

  7. Delphi 语言

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

  8. 第三章 传奇的开始--Delphi(附读书笔记)

    第三章 传奇的开始--Delphi "是惊世之作的Delphi让Borland重新站了起来,没有当初的Delphi,就没有今日的Borland!" "是Turbo Pas ...

  9. 终于懂了:WM_PAINT 与 WM_ERASEBKGND(三种情况:用户操作,UpdateWindow,InvalidateRect产生的效果并不相同),并且用Delphi代码验证 good

    一直对这两个消息的关系不是太了解,借重新深刻学习windows编程的机会研究一番. 1)当窗口从无效变为有效时,比方将部分覆盖的窗口恢复时会重绘窗口时:程序首先会通过发送其他消息调用DefWindow ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之0801信息输出

     题目

  2. YT工作日志-0911

    上午 在导师的帮助下,帮我从svn上下载了项目.但是因为项目太大(不算jar包有730M),很多模块不是我工作中涉及的,但是运行的时候会报错,所以导师还帮我找了很多错误.把那些不需要的东西注释了.就这 ...

  3. Controller@实现Controller的两种形式

    实现Controller的两种形式 形式1:仅仅实现IController接口,自定义Controller对Request的实现.形式2:在实现IController接口以后,继承Controller ...

  4. 第二代map-reduce架构YARN解析

    需求 我们在考虑hadoop map-reduce框架的时候,最重要需包括: 1. reliability 可靠性,主要是jobtracker,resource manager可靠性 2. avail ...

  5. 获取DOM元素位置和尺寸大小

    JavaScript获取DOM元素位置和尺寸大小 在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽 ...

  6. Python笔记之面向对象

    1.类和对象 #create a class class fruit: def say(self): print "hello, python" if __name__ == &q ...

  7. 微信jssdk已无力吐槽

    微信强大的整合能力让企业公众号的开发迅速窜红.尤其是企业须要个性化定制的一些功能.公司在同一时候上线的app和触屏版的应用中,微信分享自然是不可或缺的重要一环. 纵观如今大多数的微信公众号.分享大都是 ...

  8. Ubuntu下使用sshfs挂载远程目录到本地(和Windows挂载盘一样)

    访问局域网中其他Ubuntu机器,在不同机器间跳来跳去,很是麻烦,如果能够把远程目录映射到本地无疑会大大方面使用,就像Windows下的网络映射盘一样.在Linux的世界无疑也会有这种机制和方式,最近 ...

  9. How to decompile class file in Java and Eclipse - Javap command example(转)

    Ability to decompile a Java class file is quite helpful for any Java developer who wants to look int ...

  10. xxx==null和xxx.equals(null)的区别

    如果xxx不是null的话,xxx==null将返回false,如果xxx是null的话,xxx将返回ture 而对xxx.equals(null)而言,他将永远返回false,因为如果xxx不是nu ...