问题标签 [perlcc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 为什么 Perl 有单独的“perl”编译器和“perlcc”前端?
我试图用我的 Perl 代码制作一个可执行文件,然后我意识到perl
编译器没有这样的选项。经过一番搜索,我找到perlcc
了 ,它是 Perl 编译器的前端,可以完成这项工作(生成二进制文件)。
为什么 Perl 有单独的编译器和前端?例如,gcc
对于 C/C++ 而言,它本身就是一个完整的工具。这就是它的方式,还是有一些好的原因?
perl - 用 cpanm 安装 B::C 挂起?
当我安装 B::C 时cpanm
,它挂起
perl - 如何测试模块是否与 Perl 编译器 (perlcc) 兼容?
有没有办法,给定 CPAN 上的一个模块来确定该模块是否可以在Perl 编译器中运行, ( perlcc
)。
如果我尝试编译测试套件本身,运行./t
文件不会产生任何输出。
这里是test.t
,
如果我运行它,我会得到,
但是,如果我使用它编译perlcc ./t/test.t
并运行它,./t/test
我将没有输出。
有没有一种方法可以测试模块与 Perl 编译器的兼容性?
perl - 为更快的 FastCGI 操作编译 Perl
我一直在探索编译 Perl 程序,以此来改善复杂 Perl CGI 程序的初始启动时间。@Rurban 的详细概述对我很有帮助。编译我的主进程脚本使用perlcc -o launcher launcher.fpl
. 由此产生的过程至少快 20% - 不是压倒性的,但仍然有意义。
为什么我要编译而不是简单地进一步优化? 我花了几个月的时间Devel::NYTProf
来捕捉低效的代码,所以我相信我已经攻击了大部分低效的优化成果。代码很快,一旦加载,它通过mod_fcgi
FastCGI 运行,所以它保持持久加载。但是,如果它发生崩溃或者如果 FastCGI 需要生成一个新进程(或者因为前一个进程已经达到其最大请求级别,或者有足够的需求需要另一个工作人员),那么缓慢的加载时间就会引起它的丑陋。新进程的第一个请求可能需要 1-1.5 秒,而后续请求的时间不到 200 毫秒。
问题:很多程序都是 Perl 模块的形式,核心“加载器”根据它正在做的事情动态加载。例如,为我的网站首页加载的模块是最慢的模块之一。因此,按理说,一些最重要的优化将来自编译这些模块。但是,同时使用perlcc -B Front.pm -o Front.pmc
andperl -c Front.pm
时,当我尝试运行程序时会遇到无用的段错误:
编译过程不提供提示问题的调试消息。(要清楚:为了简单起见,在这个例子中,launcher.fpl没有编译,只是简单的 Perl。)如果我删除 pmc 文件,以便 launcher.fpl 可以再次加载未编译的模块,它加载时不会出错。
我也试过:
这似乎工作得稍微好一些,但是当我尝试运行程序时会产生这个错误:
Loader.pm 第 117 行是需要 Front.pm(c) 模块的地方:
这导致了两个主要问题:(1)我是否以正确的方式开始以及(2)如果我没有完全走错路,有没有办法调试为什么我的模块在编译时会出现段错误?