为什么Delphi程序员会使用Lazarus作为IDE,而不是使用Delphi的IDE?

48
我一直很喜欢使用Delphi IDE进行编程。
但是我听说过Lazarus编程环境,并且也听说有些Delphi程序员使用它代替Delphi IDE。
Lazarus相比Delphi IDE有哪些优势?为什么一个Delphi程序员会或应该转而使用它呢?
答案让我比之前更有疑问。似乎有些人不同意在开发Delphi代码时可以使用Lazarus作为编辑器。我想你可以将所有内容保留在Delphi中,只是更改IDE。 Lazarus Wiki的Lazarus for Delphi Users部分说:

转换Delphi项目的第一件事
打开Lazarus后,您应该转到工具,然后转换Delphi项目为Lazarus项目。这不会为您做所有事情,但仍然会带您很远。请注意,Lazarus IDE的转换工具通常是单向转换。如果您需要保留Delphi兼容性,以便可以使用Delphi和Lazarus编译您的项目,请考虑使用XDev Toolkit转换您的文件。

因为Lazarus是免费的,并不是切换的原因,但不会因此在物理$方面惩罚您的切换。(您仍然需要投资时间进行转换和学习。时间=$)。

根据您的回答,我尽我所能得出的结论是,为什么有人可能从Delphi切换到Lazarus:显然,它必须提供Delphi目前无法提供的某些内容。当前是多平台支持和可能的64位支持。Delphi曾经有Kylix,但没有Mac支持。

但是,由于Embarcadero公司即将推出这两种编程语言,并且承诺很快会推出64位编程语言,你告诉我没有理由(至少对我来说)去切换。


2
显而易见的原因是有些人喜欢它。但是关于真正的功能比较,我无法告诉你。 - RCIX
1
在https://dev59.com/W3RB5IYBdhLWcg3wa2q2中,我们看到了其他用于编写Delphi代码的IDE,包括Emacs、Multi Edit和EditPad Pro。如果有人使用这些工具来编写Delphi代码,那么一定有其原因。我认为这个问题是询问为什么Delphi用户可能会选择Lazarus而不是其他替代品,而不是继续使用Delphi自己的IDE。(如果Ikessler能够支持我的解释,那就太好了,因为许多其他人似乎认为这是要放弃Delphi,转而使用Free Pascal。) - Rob Kennedy
2
Rob:Lazarus与普通编辑器不同,因为它具有表单编辑器和代码工具等功能,并且在掌握一定技巧后可以来回迁移(特别是在较新版本中)。但我同意替代是一种不好的思维方式。几乎所有全职使用Lazarus/FPC的用户也使用Delphi。甚至包括我在内的几个开发人员也是如此。 - Marco van de Voort
1
对于那些使用Delphi编写“沉闷/严肃”的客户端软件作为交付客户解决方案所需的许多技能之一的人来说,Lazarus现在是一个很好的解决方案,可以在Delphi模式下构建这些软件的64位二进制文件。一些程序员被聘为Object Pascal程序员4 life,他们可能会像FPC/Lazarus的开发者一样密切关注Delphi和Object Pascal的发展,并且没有问题。而使用Delphi是幸运少数人的奢侈选择,FPC适用于所有人,而Lazarus是一个很好的IDE。 - Henrik Erlandsson
1
2021年更新:我唯一看到的大差异/问题是Lazarus调试器比Delphi的慢且痛苦。提示:使用fpdebug包可以使其开始变得可用。但是现在的Lazarus编辑器非常稳定。对于代码编辑,比Delphi更加稳定和快速。它的自动完成功能也很好用。它真正实现了跨平台。我建议使用https://github.com/LongDirtyAnimAlf/fpcupdeluxe从源代码构建FPC和Lazarus,然后轻松安装交叉编译器。问题仍然是第三方组件,这些组件可能(遗憾地)只适用于Delphi。 - Arnaud Bouchez
显示剩余9条评论
12个回答

62
好的。这是一个旧的帖子,但需要更新一下。大约十年前,我停止使用Delphi,主要是因为别无选择。作为一个Delphi程序员工作了5年多,我现在又成了一名学生,而Delphi的价格简直是离谱。Delphi本身并没有问题,它是一个天才的系统,但是Borland(以及后来的继任者)完全误解了不断变化的计算机世界。微软能够提供一个可以免费下载的编程环境,而且它的.NET环境在所有重要方面都与VCL相当,与此同时,即使是Delphi的基本版本也会让你破产,或者根本无法在学生预算内购买。最终的结果是,由于没有新的Delphi程序员加入,继续使用Delphi对企业来说变得冒险。最后,随着Linux的崛起,Kylix成为一个完全失败的环境,没有利用可用的UI工具链,而且还带有一种可疑的Wine气味,再加上对GPL软件的侮辱性态度,将其视为共享软件。最后,当多年后推出Turbo Delphi时,它无法利用像Tories组件网站这样的令人惊叹的资源。很明显,Borland对其程序员生态系统毫无尊重。
所以拉撒路似乎从这一切中浮现出来,花了很长时间孕育,似乎旨在成为Delphi 4的某种类似物,被许多人认为是Delphi系列中最干净、最整洁的版本之一。它几乎符合所有要求,它对Object Pascal的实现完美无缺,最重要的是,它在开源软件中所关注的所有方面都是免费的。
然而,它有着漫长的错误历史,以及其控件的不完整实现。对我和许多其他人来说,这是一个致命的问题。
话虽如此,最近我决定出于好奇心下载它,并发现它已经取得了长足的进步。数据库组件只需要一点点的教程和一些线索,就能正常工作,而且在iPhone和Android构建目标方面也取得了重大进展。
我不确定我是否已经准备好将其部署到我的商业客户中,但我打算用一个个人项目再试一次,看看它的表现如何。如果它能正常工作,我想我终于能与我的第一个编程爱好——Pascal再次相聚了,并且能够在我的Mac上进行繁重的工作,同时提供Windows和Linux版本的构建。
所以基本上这是关于比较的事实;- Lazarus和Delphi是完全独立的实体。Lazarus不是Delphi的交叉编译器,但具有一定的兼容性。它更像是GCC与MS C++之间的比较。 Delphi更加精细和稳定。 Lazarus提供了一个类似Delphi 4的环境,老手Delphi编程人员会觉得非常舒适。 但Lazarus有时可能会有些反复无常,Delphi程序员需要明白最新和最好的Delphi并不是所有东西都适用于他们。 Delphi擅长Windows,而且做得非常好(是的,我知道新版本有一些交叉编译目标,但据说还有点不稳定,需要在炼金术师的炉子里多煮一段时间才能真正达到那个水平),而Lazarus几乎可以编译到任何平台。当前支持的目标列表包括:Darwin、NetBSD、OpenBSD、FreeBSD、Linux、Solaris、Win32、Win64、WinCE、go32v2(我认为这是带有32位扩展的MS-DOS!)、OS2、Netware(!)、BEOS、Haiku(?!)、QNX、wdosx(?)、emx、netwlibc、Atari、Amiga、Palm-os、Gameboy advance、nds、MacOS、Morphos,此外,还有对IOS和Android的实验性支持。除此之外,该工具还可以使用来自QT、GTK、GTK2、Win32/Win64、Carbon、fpGUI(不知道是什么)、Cocoa或者没有GUI的部件集,具有不同程度的实现透明度。
这是一个详尽无遗的清单!
所以请注意购买者自负。我强烈建议Delphi编程人员下载这个并进行一些个人项目来感受一下,不要用老板的钱,但Lazarus有很多深度和实质性的东西,它有可能成为处理Windows之外生活的重要工具。
此外,由于Delphi的新主人仍然没有从Delphi失宠的原因中吸取到任何教训(提示:让它对爱好者和学生来学习和创建自定义组件变得负担得起或免费),这实际上是唯一的预算选择。如果Embarcadero醒悟过来,也许情况会改变。在那之前,长命Lazarus。
*20多年前的2023年,这个答案已经11年了。

8
感谢你,@Shayne,提供了这样精彩的历史和讨论。+1 - lkessler
7
但是有时候Lazarus可能会不稳定 - 在过去几年中,Lazarus变得坚实稳定。不幸的是,我不能说同样的话。随着时间的推移,Delphi变得越来越不稳定。最近我花了钱购买了一个非常不稳定的Delphi XE7许可证。我还有另一个朋友几年前购买了XE3,从未使用过(仍在使用XE1)。如果Lazarus的一个版本变得不稳定,至少你没花费1000欧元以上! - Gabriel
6
我同意,@Frostyfrog,最近我又仔细看了一下,它确实是一个非常可用的集成开发环境。 - Shayne
2
FPC在内部汇编中支持AVX2。我的几个Delphi应用程序目前加载了由FPC生成的dll,其中包括MD5(部分库,但这更容易,因为FPC具有加速MD5的ROR / ROL内置函数)和AVX(2)使用。 - Marco van de Voort
2
我曾经使用过 Delphi 7 到 XE7 Ultimate。为了实现一些 Linux 兼容性,我想升级,所以今天早上我第一次尝试了 Lazarus,并且被它深深地吸引了。我非常喜欢它。 - Kevin Berry
显示剩余10条评论

30

对我来说,选择使用它的两个主要原因是:

1)多平台支持(Linux、Mac OS X、Windows)

2)免费价格$0


1
@RRUZ:但是你不是必须购买Delphi才能在Lazarus中使用它吗?那么你已经有了Delphi IDE,而且没有额外的费用。 - lkessler
2
@lkessler,Lazarus与Delphi没有任何商业关系,它们是两个不同的产品。 - RRUZ
2
@Rob,根据我的个人经验,当我需要为我的客户开发Linux桌面应用程序时,我使用Lazarus而不是Delphi,因为不幸的是,Delphi仍不支持Linux。 - RRUZ
2
@Rob:如果我必须(本地)针对Delphi尚未支持的平台进行开发(例如64位!),并且不想学习一种新语言,那么我可能会使用它 - 同时希望项目以后可以移植回Delphi,一旦Embarcadero为相关目标添加支持。 - Oliver Giesen
5
我现在是一名FPC开发者,但十三年前我开始使用FPC,因为Delphi无法为我的(FreeBSD)Web账户生成CGI。 - Marco van de Voort
显示剩余4条评论

21

一个使用Delphi的程序员不能用Lazarus来编写Delphi代码,因为Lazarus并不是Delphi。实际上,Lazarus是一个基于Free Pascal的IDE和一堆类似Delphi的类库。但请注意,像Delphi的VCL之类的东西在Lazarus中并不存在,而且坦率地说,在Lazarus中的IDE和调试体验非常有待提升,不过它是免费的,所以这很重要。

总之,Delphi与Lazarus是不同的。如果你想要一个出色的IDE和调试器、庞大的第三方支持和技术支持,并且你的目标是针对MS Windows平台,而且你愿意付费的话,那就使用Delphi。如果你想要一个免费的IDE,支持多个平台,并且具有类似Delphi的语法,请使用Lazarus(Free Pascal)。


22
一位 Delphi 程序员确实可以使用 Lazarus 写 Delphi 代码。事实上,一位 Delphi 程序员甚至可以使用记事本写 Delphi 代码。这个问题的前提是有 Delphi 程序员使用 Lazarus 编写 Delphi 代码(而不是 Free Pascal 代码)。Ikessler问为什么他们要这样做。如果你的答案是否认前提,那么请明确说明。否则,我不认为你已经回答了这个问题。 - Rob Kennedy
2
嗨,罗布, 也许我应该说写和编译Delphi代码。当然你可以用任何东西来写Delphi代码。我的意思是Pascal方言和两个产品中使用的类库虽然相似,但并不可互换。(除了非常简单的情况) - Tim Jarvis
我在我的私人笔记本电脑上安装了Lazarus。最近的版本中,我在该笔记本电脑上设置了项目(甚至是可视化的项目),然后将它们加载到工作中的Delphi中。使用一些DFM清理工具,这与在Delphi版本之间移动并没有太大区别。 - Marco van de Voort
39
“Delphi != Lazarus” 应该翻译为“Delphi不等于Lazarus”。“shouldn't that be "Delphi <> Lazarus"?”可以翻译为“这不应该是‘Delphi <> Lazarus’吗?”(其中“<>”是表示不等于的符号) - Mawg says reinstate Monica
@Mawg +1 让我微笑 - 我一直盯着屏幕 ;) - itsols
4
这个回答有点不合逻辑。Borland(Codegear / Inprise)所称的“Delphi”代码就是他们以前称之为“Object Pascal”代码,而其他人也是这么称呼它的。Delphi只是一个集成开发环境(IDE),就像Lazarus一样。任何一个都可以用来编写Object Pascal代码。更重要的是,FreePascal甚至有一个“Delphi兼容模式”,使语言语法和默认设置更像Delphi。如果你想说“Delphi因为商业原因得到了更好的支持”,那就直说吧。但是两者都有彼此不具备的特点。 - Noah

15

也许我理解有误,但您似乎认为IDE是可以互换的。这是不正确的。Lazarus是基于FPC编译器构建的,并且与它紧密相连,就像Delphi与DCC编译器相连一样。此外,它们使用不同的窗体描述文件格式。Delphi无法读取LFM文件,而Lazarus可以尝试读取DFM文件,但效果并不好。

FPC/Lazarus与Delphi非常相似,但它是一种不同的Object Pascal方言,认为它们是等价的是错误的。


@Toby:我不是很确定。它有点可以,但最终得到的结果看起来都不对。控件位置错乱等问题。 - Mason Wheeler
Mason:你尝试过新项目或打开旧的Lazarus代码吗?基本的表单编辑对我来说相当兼容。如果你使用旧版的Lazarus项目,一些为不支持的Delphi功能而设计的旧解决方案可能会引起问题。 - Marco van de Voort
@Marco:我尝试过转换Delphi项目。虽然我已经有一段时间没有尝试了,但是以往每次尝试都会导致表单布局完全错误。 - Mason Wheeler
Delphi窗体文件在不同版本之间的兼容性非常好,至少在向上转移时是这样。我最近将D6升级到2010,处理得非常完美。 - David Heffernan
重新实现表单可能是个明智的想法,而且要以一种方式来允许你拥有不同的布局,适用于Mac、PC和Linux,因为这三者具有不同的可用性标准(例如Windows的扁平化和Mac的Cocoa风格)。大多数业务逻辑应该可以很好地转换,假设它不太依赖于没有FPC版本的第三方库(而现在许多库都有了FPC版本),但最好再对UI进行一次检查。当然,如果你使用现代MVC样式的设计模式,那应该不会太难 ;) - Shayne
显示剩余2条评论

14

Lazarus是跨平台的并且免费,不仅支持言论自由而且也可以免费使用。相比之下,Delphi则不然。Lazarus使用一个不同的编译器,该编译器编译出一种与Delphi 99%兼容的语言,并提供了不同的可视化组件库,类似于但与Delphi的VCL不兼容。


1
@glebm: 但是Delphi目前还不支持跨平台。 - lkessler
3
Delphi不是,而Lazarus是。Lazarus完全不使用Delphi,它使用的是FreePascal编译器。 - glebm
1
Delphi语言<>Delphi IDE。Delphi是一种语言的名称(在Borland Delphi 7之前称为Object Pascal)。FreePascal编译器编译的语言是Delphi语言(99%)。然而,编译器Delphi也从Delphi语言编译,但它是完全不同的产品。希望这能为您澄清一些事情。我不是“Delphi程序员”,我是软件开发人员。 :) - glebm
1
我认为值得注意的是,尽管由于商标原因FPC确实将其称为Obj Pascal,但开关仍然区分Turbo-Pascal目标pascal模式和Delphi目标pascal模式。在实现方式上存在微妙的差异,幸运的是,FPC在解决这些差异方面做得非常出色。 - Shayne
Delphi缺乏对Linux的支持是Delphi开发人员的主要问题。这就是我安装Lazarus的原因(但尚未严肃使用)。 - UnDiUdin
显示剩余9条评论

13

我在Delphi上运行了一个声音识别算法,当我的上级要求在WinCE上运行时,我尝试了Lazarus。Pascal就是Pascal,而Lazarus则更胜一筹。我已经完成了它。

该算法是用Pascal编写的。我试图进行转换。C#容易被反编译并使用不同的逻辑。幸运的是,我找到了Free Pascal。

我已经在ARM上的WinCE上运行起来了,感谢所有FPC的合作者。

编辑:我现在也在Linux上运行它。


9

是的,Linux已经安装在70%的服务器上。它正在为Facebook提供动力,该公司拥有超过4亿用户。难道你让我使用Windows吗?告诉我不要使用64位操作系统?

我将使用Lazarus,直到Delphi开始流行起来。


8

我需要翻译的内容是:主要原因是Delphi目前无法编译64位应用程序,因此无法查看、读取或写入某些注册表键。


1
实际上,您可以从32位进程中读取注册表的64位部分。 - David Heffernan
为了了解这是如何实现的,我引用了http://msdn.microsoft.com/en-us/library/aa384129(v=VS.85).aspx。 - David Heffernan
实际上,您可以读取64位部分,但不幸的是只有部分 - 有些64位注册表键没有显示出来。在我发布这篇文章时,我发现SOFTWARE\Wow6432Node\Classes\Filter\中缺少了许多64位键。我用Lazarus编写的64位应用程序可以看到所有的键。 - TheSteven
如果我使用RegOpenKeyEx()而不是TRegistry函数,可能我在Delphi中会得到不同的结果。另一方面,我能够将我的原始代码(用于处理注册表信息)在Lazarus中使用(据我回忆)未经修改。 - TheSteven
更新:Delphi XE2现在支持64位Windows。 - Arnaud Bouchez

8

嗯,我是那些使用Lazarus IDE编写Delphi源代码的人之一。

我很喜欢Delphi。但使用Delphi的编辑器真的很痛苦。我尝试过VIM,并一直梦想拥有一个像Visual Studio那样的IDE:简单,干净,可以水平或垂直分割窗口...

最后我找到了Lazarus编辑器,比Delphi的好得多。所以我使用Lazarus编写Delphi源代码,而RAD IDE只用来编译和调试。


3
你介意再详细解释一下吗?你只是说你喜欢分割窗口,并没有说出其他Delphi编辑器中存在哪些让你感到“困难”的问题,而Lazarus则更为出色。我很好奇这些问题具体是什么。 - lkessler
3
是的,Lazarus IDE比Delphi IDE聪明多了。当你粘贴一堆代码时,它能正确地缩进它。它可以自动完成方法覆盖,当修改函数原型并使用ctrl-shift-up/down跳转到实现时,光标会停留在需要修复的位置,并且甚至还能自动完成更改!只要你知道键盘快捷方式,它可以带来极大的节省时间。看到这样做的效果让我想知道为什么Delphi到现在还不是这样。不幸的是对于Embarcadero而言,Lazarus/FPC将会压垮他们。他们再也追不上了。 - DDS
1
我想补充一下,这个问题特别涉及到IDE,并且这方面没有得到实质性的解决。话虽如此,我还是要重申:Delphi之所以成为一个濒临消亡的品种,不仅仅是因为它的价格昂贵,而且因为FPC已经无处不在了。此外,开放的性质为任何人提供了机会来解决烦人的问题,比如Laz IDE中发现的代码完成增强功能。请注意,这非常重要。很大一部分代码都是枯燥乏味的东西,比如在接口和实现中重复函数签名。这应该是非常容易的,在Lazarus中也确实如此。 - DDS
@lkessler 抱歉有些时候没有联系。这里是我注意到的一些事情: - Jack Wu
我认为Delphi的衰落几乎完全是因为成本的问题。我只是不明白,为什么Embarcadero有着30多年的数据可以参考,却仍然没有意识到荒谬的定价会让他们亏损。 - undefined
显示剩余2条评论

7

对于我来说:

  • 64位操作系统已经普及(Delphi也是如此,但可能有些不稳定,有时候可以,有时候不行,最后可能还是不行)
  • 跨平台(Delphi没有),顺便说一下还有很多工作要做,但它确实可行!
  • FPC是一个非常好的编译器
  • 社区非常酷,而且非常活跃

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接