我真的很喜欢live smalltalk环境(虽然我只用Pharo进行了一些实验)但是有一件事我为什么不能真正用它来进行日常开发.似乎无法从smalltalk系统创建本机独立可执行文件.本机独立可执行文件意味着创建单个可执行文件(Windows上的PE,Linux上的ELF,macosx上的Mach-O),用户可以通过双击它来运行,而无需安装任何其他执行环境.我错过了什么,实际上可以使用smalltalk创建本机独立可执行文件?
如果我们具体谈论Pharo.我知道Pharo的环境包括高效的及时编译器(从Pharo的VM字节码生成真正的本机代码),我知道可以通过剪切我的应用程序不需要的代码来删除VM映像.所以基本上我们已经拥有了几乎所有东西(我猜的链接器除外)能够创建本机独立可执行文件.如果我们在图像中放置所有代码生成内容(对于所有目标处理器),交叉编译也不应该成为问题.
我知道在smalltalk世界中,将整个VM映像与运行时环境分开交付被认为是一件好事,因此用户可以破解他/她正在使用的软件.但是,我没有看到为什么不能将您的smalltalk软件作为完全编译的本机独立可执行文件提供的任何理由.你能解释一下为什么在smalltalk世界里做这件事并不常见吗?是否有任何良好的smalltalk实现允许这样做?
总结这一切.我梦想有一个实时的smalltalk环境,在那里我可以开发和测试我的软件,但随后(当软件实际上已准备好交付时)将其交叉编译为我的单一开发机器中的windows,linux和macosx的本机可执行文件.那真是棒极了.
不是Pharo,而是原生的,编译(通过ANSI C或其自己的JIT)smalltalk [应用程序](能够加载预编译的DLL或[JIT-]按需编译代码):
Smalltalk中/ X
http://www.exept.de/en/products/smalltalk-x.html
或(非官方增强开发版):
Smalltalk/X JV分支 - https://swing.fit.cvut.cz/projects/stx-jv/
几乎完全开源.除librun(核心运行时 - 内存管理,JIT等)和stc(smalltalk-to-c)编译器之外的所有东西都已经是开源的.Claus Gittinger/Exept还承诺/确认如果他们停止进一步开发,他们会释放剩余来源(AFAIK,这些部件仅因现有客户的担忧而关闭).
我强烈建议大家查看它,这是一个奇迹,这么棒的实现是如此鲜为人知.
具有讽刺意味的是,有一件事需要预加载 exe。你的操作系统。看到的事情是 C/C++ 可以如此轻量级,因为您的操作系统已经与图像与大量预加载的库一起工作了。您需要浪费几 GB 的内存,只需启动一个简单的计算器即可。您的操作系统是 C/C++ 库的集合。
与其他语言(如 python、java 等)相比,事情并没有更漂亮,即使应用程序更小,它们仍然依赖于这个库,并且它们会出现非常大的库,无论您的应用程序是否使用它们,都需要安装它们。
Pharo 和 Smalltalk 通常是不同的情况,因为它们本身就渴望成为一个虚拟操作系统。与真正的操作系统不同,smalltalk 图像被用户以简单的方式破解。
假设您可以重命名 pharo 可执行文件,更改其图标,禁用 Pharo 中的 IDE 工具,以便您的用户只能看到您的应用程序的 GUI。像 Dr. Geo 和 Phratch 这样的应用程序已经做到了这一点。
将 Pharo 项目编译为本地可执行文件不会有太大区别,因为 a) Pharo 已经编译为本地可执行文件 b) 您不需要这样做,因为 Pharo 已经是独立的,甚至不需要安装。
我的建议是不要担心那些无关紧要的事情,并享受学习 Pharo 的强大和乐趣。
小智 5
您还可以查看 Object Arts 中的 Dolphin。
它仅适用于 Windows,但却是最好的IDE,没有之一。如果您在 Smalltalk 中做任何事情,您应该购买一份副本。(他们也有一个免费的非商业版本,但你会想通过购买专业版来支持其背后的工艺。恕我直言,这是一个绝对强大的产品)。
如果您想要的话,它将生成一个独立的 exe。我用它制作了一个中等功能的 wiki 的 exe - exe 不到 1 MB。这不是一个错字。
-吉姆
问题是,在这种情况下,Pharo 无法与任何本机编译器(如 C、C++ 或其他编译器)进行比较,而更像 java、python、ruby 和其他带有虚拟机的语言。
在这些语言中,您可以生产罐子、鸡蛋或宝石来分发您的项目。
在 Pharo 中,您可以按照您已经提到的技术生成“生产图像”。但没有什么可以阻止您交付工件,包括 PharoVM(毕竟它有 2m 大),并且您可以准备应用程序来检测和打开您的生产映像(无需请求)。