为什么C#程序员应该闭嘴谈论Delphi

2020-05-27 13:21:17

编辑:在这篇讽刺帖子发表大约3年后,一家名为“.NetRock”的网站决定把它搞成一个数字。讽刺显然超出了他们的头脑,我在帖子中概述的事实遭到了嘲笑。我对.NetRock有点失望,因为这对他们来说可能是一个很好的机会,让他们更多地了解现代Object-Pascal开发及其生态系统。他们似乎真的对德尔福和Object-Pascal在2016年(和2019年)被使用感到困惑,他们的行为和反应表明了我们对他们这种类型的“兄弟”的非常傲慢和无知。

我必须承认,像.NetRock这样的大型节目完全不知道Object-Pascal作为一种语言在世界各地拥有数百万用户,这让我有点震惊。您可以使用像RemObjects的Oxygene这样的编译器,它们面向.Net、Java、x86、ARM和WebAssembly。因此,他们关于“如何将Delphi应用程序移植到C#”的整个播客都是荒谬的,因为这不是将代码从Delphi迁移到.Net的方式。Elements生态系统(涵盖C#、Pascal、Java、Swift和GoLang)直接安装到Visual Studio中,并将Object-Pascal添加到环境中。您还可以通过自动化在Pascal和C#之间转换源代码。至少可以说,手动处理这些任务是业余的,但老实说,当他们用辱骂打开他们的播客时,我并没有期待太多。

NetRock似乎忽略了另一点,那就是自从Embarcadero从Borland手中接管以来,Delphi一直在积极地进行优化。2016年,Object Pascal在Tiobi指数上排在第14位[2.164分],超过了[全球]最流行的编程语言,仅比C#低9分。因此,使您的遗留Delphi应用程序现代化的最具成本效益的方法是从RemObjects购买元素,或者将您的Delphi版本升级到本世纪。

如果他们不厌其烦地查看一下,他们也会知道我在社交媒体上管理着大约16+个开发人员小组,总共大约有50.000名开发人员。我也曾为制作德尔福的Embarcadero工作过,所以我的言论虽然异想天开和讽刺,但都是基于事实的。我与美国的财富500强公司以及欧洲各地的大公司合作,这些公司的日常运营都依赖于Object-Pascal。见鬼,就连华特迪士尼公司也想在2018年摆脱.Net,转而使用Object Pascal。事实证明,在针对硬件中断和“老式”自动化进行编码时,JIT是一场灾难。谁能猜到呢?(顺便说一句,这是讽刺)。

总体而言,.NetRock的人似乎对专业开发人员用于专业工作的工具一无所知,这一点令人担忧。手工移植Delphi代码库,好吧,充其量是业余的。他们不妨做一个关于如何使用ms-aint创作艺术的播客,因为人们使用的不是Adobe Photoshop或Illustrator(顺便说一句,这是讽刺)。

然而,我也很高兴,因为.NetRock无意中展示了我对完美🙂的观点,而不是更多地了解Anders Hejlsberg在加入微软之前的旅程和生活,.Net类层次结构如何受到Delphi VCL框架的严重影响,或者.Net最终成为.Net的概念实际上是如何在更早的时候被原型和实验的-他们直接跳到了嘲笑中。一篇讽刺帖子(哈哈!)。

您可以单击此处查看我的完整回复。说真的,怎么可能把这篇老帖子误认为是严重的讽刺,这是我无法理解的。但我要感谢.NetRock证明了我的观点。我再也找不到比这更好的傲慢和无知的例子了,🙂摇滚!

那些关注我的博客或了解我个人的人也知道,我不会刻意表现出对抗或不尊重的态度。我尽我最大的努力走中间路线,在任何事情上都要看到积极的一面。但有时,你会面临某种程度的愚蠢,这需要你的回应,而不是口头上的回应。这就是其中一个案例。

最近,我看到越来越多的Delphi开发人员与C#开发人员展开辩论,他们面临的态度和信仰体系相当坦率地说是完全是无稽之谈。它不是基于历史或事实,而是植根于幼稚的“主义”的争论。旧习惯和对新意味着更好的概念的不健康痴迷的混合。

如果是这样的话,那么C/C++应该是彻头彻尾的狗屎,因为C比Pascal早了3年。创建Pascal是为了取代C,并摆脱(在其他事情中)荒谬和耗时的头文件实践,更不用说当头引用其他头和条件符号堆积时仍然会发生的递归地狱。

你知道花括号是怎么流行起来的吗?跳到离你最近的塔迪斯,把目的地设在20世纪60年代中期。回到大型机只有葡萄牙那么大的时候,1024字节的内存是炸弹。您知道,那时候内存很少,几乎所有的语言(或工具包)都需要节省空间。因此,{}个卷曲被用作“BEGIN”和“END”等单词的代号。为什么?因为一个ASCII字节小于五个ASCII字节。当您只有几KB内存时,每个字节都很重要。

PS:当我在这里使用工具包这个词的时候,我真的是指在织布机上随意堆积的ASM片断。收集来制作C的骨头实际上是当时不同工程团队制造的自制工具包的混合体。这些工具包中的每一个都有自己的粉丝俱乐部/斜杠/法律代表;因为他们所有人奇迹般地都在其他人之前同时发明了完全相同的东西。这些家伙一直在争夺谁拥有什么,一直持续到沃特康时代。这可能是自罗马皇帝卡里古拉宣布服装非法以来,持续时间最长的成年人发脾气的示威活动。

快进到1970年,大型机上的内存使用量已经翻了几番,就像摩尔五年前预测的那样。丹尼斯·里奇(Dennis Ritchie)苦口婆心地从脾气暴躁的老技术人员手中挣扎出来的C标准应该升级了。测试是由穿着灰色衣服的非常枯燥、非常严肃的人完成的-他们惊恐地发现,人类与单词和短语的互动速度会比符号和字形更快。因此,像“开始”这样的词被大脑接受的速度会比{.。这只是淘汰品,不是吗?

你不能一边称赞安德斯是一位天才建筑师,一边又把他毕生的作品扔进垃圾桶。也许你应该问问自己,为什么安德斯如此热爱Object Pascal,以至于他职业生涯的一半时间都致力于确保大学能够接触到它。

尼克劳斯·沃斯(Niklaus Wirth)出场了,他是一个非常聪明和有学问的人,他不会捕捉到例外;他是一个例外。但在伯克利的同事们旁边,我们亲爱的尼克劳斯是一位广为人知的摇滚明星。他决定,为了让学生更容易掌握编程,更容易学习,最重要的是,建立一个更安全的代码标准,他们应该把科学放在心上,并将其包括在编程语言设计中。因此,他穿上了最庄严的实验室大衣,开始实施“更好的C”,在那里他应用了大脑比符号和符号更快地识别单词的研究。9个月后,帕斯卡出生了,为了庆祝那一天,尼克劳斯穿上了彩色袜子。一项有风险的生意可能会让他失去在奇怪的棕色女生联谊会俱乐部的席位,在那里他是仪式的主持人。但是,嘿,尼古拉斯不是一个叛乱者,而这毕竟是摇摆不定的70年代。

我的意思是?这就是Pascal使用“BEGIN”和“END”而不是{AND}的原因。这是使帕斯卡语言如此容易掌握的众多方面中的一个。

撇开异想天开的讽刺不谈:知道C实际上比帕斯卡更老,更不用说它在功能、深度和复杂性上都与帕斯卡相同--它会是什么呢?你还坚持认为老的价值要比新的低吗?或者,是否实际上您一开始就没有真正仔细研究过对象Pascal?您是否安装了Delphi的现代版本,并将其作为值得的试驾?或者,你只是根据你喜欢和知道的东西说出来,而不是你不知道的,甚至没有尝试过的东西。

我8岁的女儿就是这样。她还没尝过就对食物下了决心。一个训练有素的工程师肯定能做得更好吗?

我这么说是因为--如果我们按照你的推理路线,C/C++应该不能生成C#。旧的和过时的东西怎么可能产生新的和令人兴奋的东西呢?你应该知道C#是用C++和汇编语言写的,对吧?而且Java和所有其他高级语言并不是自发地自组装的。它们都是用C、汇编语言或PASCAL编写的。这是有原因的。

就像大自然有不同的层次,从颗粒到矿物,从矿物到细菌,从细菌到植物,从植物到昆虫(等等)-计算机也是如此。这些层次中的每一个都有管理它们的法律和原则,无论你多么想把一些东西从更高的层次引入到更低的层次-那就是现实不是这样运作的。

规律很简单:每级只能散发复杂性以上。所以汇编语言被用来产生C和PASCAL,C和PASCAL被用来产生C++和对象PASCAL,C++和对象PASCAL被用来产生你认为理所当然的每一项技术。

因此,当您批评Delphi而使用C#时,您只是在潜意识中没有真正理解原型语言和基于上下文的语言之间的区别。

这就好比说Visual basic5比汇编程序更酷。你不会和那样的人辩论,你只是用怜悯的眼光看着他们。我不知道软件工程学士学位在其他地方是多少年,但如果你只是在大学度过了3年,在大学度过了2年,然后又花了一两年时间获得文凭-这就是你毕业时的洞察力水平,那我就可怜你了。我同情你的雇主,因为你迟早会带来世界末日。

如果我们把理性的逻辑思维运用到手头的这个命题上,就不能不得出这样的结论:“新总是更好”的观念是错误的,是把营销误认为是事实,把资本主义误认为是科学。计算的基本原则不会因为您偏爱高级编程语言而改变。C/C++嵌入式市场不会奇迹般地翻身,因为C#在嵌入式设备上是一场减轻了灾难的灾难。我说的是经验,而不是喜好。

你的老师应该教你这一点:“在电脑里,就像大自然一样,过去永远是活的。”仔细观察您的全新PC或Mac:BIOS、VESA屏幕模式、非线性内存、硬件中断向量和支持不少于3个指令集的CPU。你有一层又一层不断增加的复杂性(也就是“过去的还在”)。为什么不打电话给Linus Torvalds,问他为什么在他的工作中不使用C#;或者NVIDIA为什么他们的GPU流水线只附带C头而不是C#类。我敢肯定,该死的,我不想成为那个电话的接收方。

唯一值得使用的C#编译器实际上是RemObjects C#(Elements编译器)。因为与mono或ms的编译器不同,Elements在与C/C++和Pascal相同的级别上构建适当的二进制文件。如果您愿意,您实际上可以使用元素编写内核模块,这是使用Mono或Visual Studio所不能做的。见鬼,.Net服务仍然需要Windows上的服务主机。

实际上并非如此。今天被称为.Net的东西,从它的CIL中间语言一直到全局汇编缓存,几乎都是Delphi,上面有一个新的语法解析器。是的,您没看错,整个.Net产品系列实际上都是Delphi重构的。整个字节码制度是安德斯从事的最后几个恶作剧项目之一,实际上在它神奇地重新成为微软的旗舰产品之前几年,Borland的新闻服务器上就描述了整个字节码制度。

Anders Hejlsberg在Borland工作期间创建并制作了这些技术的原型(许多其他公司也是如此,因为Java使字节码变得很酷)。事实上,C#和整个.net堆栈之父不是别人,正是Delphi之父。

在Borland大学(在Borland.language新闻馈送中,我记忆犹新),这些技术以“便携Delphi”的代号被提及。我在新闻服务器上关注了很长一段时间。Borland正在修补下一件大事,这已经不是什么秘密了,我相信这最终是Borland对Java的回应。因为当时爪哇吃掉了相当大一块博兰兹的教育席位执照。如果Anders继续为Borland工作,Delphi和C++Builder今天可能会基于字节码。

事实:安德斯加入微软时被分配的第一个项目是J#。微软试图劫持Java语言。微软输掉了这场法律战,被迫转向。最终结果将是C#。

所以,当你这个C#的粉丝提出Delphi在某种程度上不如.Net,或者说Pascal对象过时了,在技术上落后于C#时,坦率地说,你完全不知道自己在说什么。是仿制药吗?我们有那个。是一个丰富而强大的RTTI吗?我知道了。匿名手术?它也在那里。事实上,这里的整个误解源于这样一个事实,即C#开发人员通常认为“Delphi 7”就是Delphi的全部。这就是说.Net就是版本1中出现的东西。在我们这个时代,谁会该死地使用Delphi 7呢?

但我只想说清楚一点:Anders Hejlsberg不仅仅是C#和dot net之父:他也是Delphi之父,而且在此之前他还诞生了Turbo Pascal。事实上,Anders在加入微软之前已经有3个(如果不是4个)Pascal开发系统支持他。

安德斯工作的公司Borland被微软赶出了牧场。比尔·盖茨发起了一场地球上很少有公司能够忍受的金融冲击。原因是微软确实拥有市场上最差的开发工具(Visual Basic和Visual C++),而Borland则是最好的。因此,在很长一段时间里,Borland在软件开发方面彻底摧毁了微软。

当Borland后来开始与Linux(Delphi Kylix)调情时,这一定让微软的研发部门感到恼火。Delphi负责数以千计的桌面应用程序,这是Windows的同义词-如果Linux用户获得了像Delphi这样的RAD工具,成千上万的应用程序准备好移植到上面呢?算一算吧。你要记住,这是在云计算出现之前,微软没有后备战略,依赖于台式机和服务器的销售。Linux可以做Windows能做的一切,但它缺乏桌面应用程序、用户友好性和Borland使之变得简单的功能。

基本上,微软所做的就是从Borland手中买断安德斯(他们还收购了Borland研发部门的一大部分),同时从各个角度攻击公司。将他们淹没在胡说八道的诉讼、专利主张和微软当时所有肮脏、懦弱的做法中(我们都还记得网景以及当时的情况)。

比尔·盖茨亲自打电话给安德斯,给了他“一个我无法拒绝的提议”。不管那是什么意思。

因此,我要把这个神话抛诸脑后:作为一种语言的C#和作为一种技术的.net并不是起源于微软。它写满了Borland,它的体系结构与Delphi和C++Builder紧密结合在一起。像微软这样的公司不再创新,他们购买能力,并将其重新塑造为自己的品牌。

如果这还不够,那就仔细看看.Net框架是如何组织的。要特别注意基类和RTTI的特性和方法。您看到的是VCL、可视化组件库、Delphi和C++Builder的运行时库。

如果您熟悉Delphi,并且熟悉它的RTL和C#,那么您很快就能认出它的架构。语法可能不同,但是组织和名称都太熟悉了。

这从没有任何秘密,但它也没有广告,所以我不会责怪人们没有认识到它。但是,当人们开始对本应是激情爱好或专业纪律的行为感到不快时,就必须说出真相,因为.NET框架的基础是直接从VCL中拿出来的。

为什么不能呢?整个平台最初的代号是“可移植的Delphi”,它甚至是由同一作者设计的-所以为什么它基本上是用不同的语法解析器转世的Delphi就不足为奇了呢?无论哪种方式,都应该开始在您的脑海中响起几个铃声-告诉您可能对Delphi和Object Pascal的看法总体上是错误的,这可能是因为您从一开始就对Delphi知之甚少。

所以,尽管你可能认为C#有别于Delphi,但你想象的给予dot net相对于Delphi的优势-实际上恰恰相反:它就是Delphi。它起源于德尔福,受到德尔福的启发,直接来自德尔福的发明者本人。在为微软工作之前,Anders负责两个不同的Object Pascal开发平台。花点时间反思一下这一点。

你不能一边称赞安德斯是一位天才建筑师,一边又把他毕生的作品扔进垃圾桶。也许你应该问问自己,为什么安德斯如此热爱Object Pascal,以至于他职业生涯的一半时间都致力于确保大学能够接触到它。

C/C++今天仍然存在,这一事实证明了我的观点:在处理基本技术时,年龄没有意义。这些语言体现了计算的基本原理。它们不会变老,因为它们代表了一个永远无法取代的根本水平。现在有一条法律说,C必须在那里,坚持下来的最终是C带来的特性-从汇编到桌面。这些相同的功能只能在另一种语言中找到,即帕斯卡语。

事情是这样的是有原因的。以及在你建立标准之前的程序员,这些标准解决了你可能不需要处理的事情,但那是因为他们在你之前处理了这些事情。你看不到水管并不意味着它不在那里。

这些编译器负责所有其他语言、操作系统、应用程序和服务所依赖的基础。移走这些,整个纸牌屋就会倒塌。

因此,C/C++和object Pascal继续存在,甚至蓬勃发展,正是因为它们与硬件本身交互,而不是与虚拟机或字节码格式交互。Delphi作为一种产品自然是为操作系统量身定做的,就像C/C++一样。但这是因为我们使用编程语言来创建应用程序。没有什么阻碍人们使用像freepascal这样的编译器,并从头开始编写一个操作系统。

相比之下,C#、Java和Visual Basic是上下文相关的语言。它们纯粹存在于操作系统或运行时环境的上下文中。它们离不开这些,缺乏C和PASCAL给桌面带来的深度。跨越多个级别的深度,从最低级别一直到云和域驱动编程。

看看Android,它是用Java编写的操作系统,对吗?嗯,那不是真的。Android操作系统依赖于本机引导,这是一段为Java应用程序建立运行时环境的代码。因此,当你启动Android手机、平板电脑或机顶盒时,首先要启动的是用普通C编写的加载机制,这反过来会挂载一个文件系统,并继续加载大量本地驱动程序。显示器、存储、wi-fi和最终组成SoC(片上系统)的所有硬件和组件的驱动程序。

只有在这个漫长的过程之后,环境才有能力。

..