首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从interpeted到本机代码:“动态”语言编译器支持

从interpeted到本机代码:“动态”语言编译器支持
EN

Stack Overflow用户
提问于 2010-05-19 21:00:32
回答 3查看 257关注 0票数 3

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

我的问题是:有没有动态语言可以高效地编译成本机可执行代码--通常是针对Windows平台?哪几个?也许使用一些第三方的ad-hoc工具?我不是在谈论携带完整解释器或类似技巧的大型可执行文件,也不是一些能够包含自己的依赖项或所需模块的智能模块,而是诚实、直接、标准、可靠的可执行代码。

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

谢谢!

丹尼尔

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-19 21:39:04

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

在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和HipHop-php的所有特性,这意味着一些模块根本不能工作。据我所知,还没有人为这两种语言实现剪枝(这些编译器的大部分关注点是改善它们平淡无奇的性能),可能还需要十年或更长时间才会有人担心,但这些仍然是你在做这类事情时必须接受的限制。

票数 4
EN

Stack Overflow用户

发布于 2010-05-19 21:04:40

PyPy项目完成了您对Python相当完整的子集的描述。

在一般情况下,这是一个很难解决的问题,这很大程度上是由于使这些语言“动态”的属性:后期绑定、弱类型变量、数据结构和容器、eval工具、编程和元编程之间的模糊划分等。但是,正在投入大量的工作,例如列出了here的JavaScript即时编译器项目。

票数 2
EN

Stack Overflow用户

发布于 2010-05-19 21:16:53

Shed Skin是一个实验性的(受限的) Python-to-C++编译器,它可以做你所描述的事情。正如Marcelo在上面使用PyPy时指出的那样,您可以使用Shed编译的内容存在限制,但是如果您愿意接受这些限制,您可以实现较大的加速。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2865669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档