gpt4 book ai didi

python - 从解释到 native 代码 : "dynamic" languages compiler support

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:24 25 4
gpt4 key购买 nike

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

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

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

谢谢!

丹尼尔

最佳答案

我认为您是在误解下操作:这些可执行文件并不大,因为它们只是将解释器混在一起,它们很大,因为整个运行时 都在里面。

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

这就是有用的运行时有多大。

如果您真的想保持您的飞船尺寸较小,您唯一的选择是使用已经存在的运行时,意味着 C/C++ 和 (最近)点网。

如果您真的不能吞下运行时,Forth 已经足够小了。

具有最佳 Windows 编译器的最佳、最具攻击性的动态语言是商业 Lisp。他们在生成可执行文件时进行了大量的内联和修剪,所以你最终只发布你使用的东西。它们仍然比 C/C++ 程序大 1.5 到 5 倍。

就您所知道的语言而言:Perl 是最胖的。 ActiveState 有 perlapp我相信你已经知道了,但你因为它的大小而忽略了它。如果可以,请重新访问它。

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

Perl 无法进行静态分析 ( proof ),这意味着 perl 编译器无法判断哪些内容可以丢弃。这意味着 Perl 运行时的每个部分都需要对您的程序可用,因为您的程序无法指示哪些部分可以丢弃。

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

如果你愿意用 Python 或 PHP 的严格子集编写,这些语言是可以分析的。 Shed SkinHipHop-php非常好,但它们仍然很大,并且它们不支持所有 Python 和 PHP 的功能,这意味着某些模块根本无法工作。据我所知,没有人对这两种语言中的任何一种实现修剪(这些编译器的大部分重点是改善它们乏善可陈的性能)并且可能还需要十年或更长时间才会有人打扰,但是这些仍然会 做这种事情时必须接受的限制。

关于python - 从解释到 native 代码 : "dynamic" languages compiler support,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com