我真的很喜欢Factor语言。但是我发现用它编写的编译程序非常慢,因此使用Factor创建实际项目是不可行的。
例如,在我的笔记本电脑上编译样本Calculator WebApp大约需要5分钟(i3处理器,2GB内存,运行Fedora 15)。
我已经四处寻找,但找不到比使用解释器(主要因素二进制可执行文件)更快的编译因子程序的方法。
当您尝试仅为每次运行使用解释器而不是将程序“部署”到本机二进制文件(在许多程序中甚至不起作用)时,这会变得荒谬。 这意味着每次我想运行计算器时,我都要等待5分钟的冷启动时间。
我想知道这是否是一个常见问题,以及是否有一个很好的解决方法。
答案 0 :(得分:12)
我承认在今天之前,我从未听说过因素。我借此机会玩它。它看起来不错(让我想起squeak-vm和lisp同时)。我会剪掉 smalltalk (非常想要的双关语)并跳转到你的问题。
似乎因子的工作方式导致加载词汇量变慢。
我在我的64位四核linux系统上编译了Factor(来自git revision 60b1115452
,10月6日星期四)。将所有内容放在tmpfs构建目录上需要641Mb,其中2x114Mb位于factor.image中,它是备份(factor.image.fresh)。
当strace
加载计算器应用程序时,会加载大量因子文件:
我强烈怀疑你的盒子内存不足,可能会变得非常快速
这肯定会解释编译花费5分钟
您能否确认是否属于这种情况(可能是您正在运行某种共享主机或VPS设备)。如果您运行虚拟机,请考虑增加可用的系统内存。
我之前已经提到过factor.image文件(114Mb)。它包含因子VM的“预编译”(实际上是),堆映像。 VM中的所有操作(处理UI侦听器或编译因子文件)都会影响堆映像。
为了避免一次又一次地重新编译源文件,您可以将最终结果保存到自定义堆映像中:
http://docs.factorcode.org/content/article-images.html
图片
要使用自定义图像启动因子,请使用-i = image命令行开关;见Command line switches for the VM。
保存自定义图像的一个原因是,如果您发现自己在每个因子会话中加载相同的库;有些库需要一些时间来编译,因此使用加载的库保存图像可以节省大量时间。
例如,要在加载Web框架的情况下保存图像,
USE: furnace save
可以从头开始创建新图像:Bootstrapping new images
保存堆映像会导致(通常)大于原始引导程序映像的文件。
Application deployment tool创建精简图像,其中包含足以运行单个应用程序的代码
在tools.deploy词汇表中实现的独立应用程序部署工具将词汇表编译为运行词汇表MAIN:挂钩的本机可执行文件。部署的可执行文件不依赖于正在安装的因子,也不会公开任何源代码,因此适用于提供商业最终用户应用程序。
大多数情况下,tools.deploy词汇表中的单词不应直接使用;相反,请使用Application deployment UI tool。
您必须明确指定所需的主要子系统,以及所需的反射支持级别。这可以通过在部署之前修改部署配置来完成。
我希望你能从中获益(按最快的顺序获胜):
USE: db.sqlite USE: furnace.alloy USE: namespaces USE: http.server save
此步骤将我的系统上的编辑从〜
30s
下调到0.835s
简而言之,感谢您将因子引入我的注意力,我希望我的研究结果会有所帮助,干杯