python – 从插入到本机代码:“动态”语言编译器支持

首先,我知道动态语言主要是由供应商使用的术语;我正在使用它只是为了包含像Perl(我最喜欢的),
Python,Tcl,Ruby,PHP等语言的容器词.它们被解释但我在这里感兴趣的是指具有强大功能的语言,以支持程序员的效率和对现代解释语言的典型结构的支持

我的问题是:有些动态语言可以在本机可执行代码中高效编译 – 通常用于Windows平台吗?哪个?也许使用一些第三方的临时工具?我不是在谈论带有完整解释器或类似技巧的大型可执行文件,也不是一些智能模块能够包含其自身的依赖性或一些必需的模块,而是一个诚实,直接,标准,可靠的可执行代码.

如果没有,有一些技术原因会阻碍这种两全其美的功能的可用性?

谢谢!

丹尼尔

最佳答案 我认为你是在一个误解的情况下运行的:这些可执行文件并不是很大,因为它们只是把解释器放在那里,它们是巨大的,因为整个运行时都在那里.

在Windows上,大多数运行时已经安装,因此您无需发货.您认为您的程序很小,但快速查看虚拟内存映射会告诉您,即使是用C编写的小型“hello-world”类型程序也只有几兆字节.

这就是有用的运行时间.

如果你真的想让你的船只尺寸变小,你唯一的选择是使用已经存在的运行时,这意味着C/C++和(最近)dot-net.

如果你真的无法吞下运行时,Forth就像它一样小.

具有最佳Windows编译器的最好,最具侵略性的动态语言是商业Lisps.在生成可执行文件时,它们会进行大量的内联和修剪,因此您最终只能运送您使用的内容.它们仍然比C/C++程序大1.5倍到5倍.

至于你所知道的语言:Perl和他们一样胖. ActiveState有perlapp,我相信你已经知道了,但你因为它的大小而被解雇了.如果可以,请重新访问.

现在,回答你的问题(是)有一些技术原因会阻碍这种两全其美的功能的可用性吗?:是的.

Perl无法进行静态分析(proof),这意味着perl编译器无法告诉可以丢弃的内容.这意味着Perl运行时的每个部分都需要可供您的程序使用,因为您的程序无法指出哪些部分可以被丢弃.

这意味着获得较小的可执行文件相当于获得较小的运行时,并且您应该乐于接受如果perl开发人员知道如何在不丢弃任何功能的情况下使perl运行时更小,他们可能会这样做.

如果您愿意使用严格的Python或PHP子集编写,则可以分析这些语言. Shed SkinHipHop-php非常好,但它们仍然很大,并且它们不支持所有Pythons和PHP的功能,这意味着某些模块根本不起作用.据我所知,没有人对这些语言中的任何一种进行修剪(这些编译器中的大部分焦点都在于改善其低迷的性能),并且在任何人困扰之前可能还有十年或更长时间,但这些仍然是你必须的限制.做这种事时接受.

点赞