LuaJIT 和 LuaTeX

LuaJIT 和 LuaTeX

是否可以将 LuaTeX 中的 Lua 引擎更改为 LuaJIT?

这是否像用 LuaJIT 源替换 LuaTeX tarball 中的 Lua5.1 源代码一样简单,还是需要对构建系统进行(大幅)更改,或者完全不可能?

答案1

不久前我尝试过 LuaJIT 1,看起来并不难。需要进行一些小的构建调整,但没有什么大问题。

目前 LuaTeX 中没有 LuaJIT 的主要原因是,我们现在有一些 Lua 补丁,这些补丁不在 LuaJIT 中(而且很难添加),例如扩展的协程子系统。在 lua5.2 中,我们对 Lua 核心的补丁将变得过时,因此一旦我们切换到该 Lua 版本,LuaJIT 就会再次变得有趣,我一定会尝试在支持的平台上默认支持 LuaJIT。那应该是在 LuaTeX 1.0 之前,但不会在未来几个月内。

但是,不要期望太多。即使在 ConTeXt 中,大多数 Lua 处理都是使用我们嵌入的 Lua 支持库对 C 数据结构进行迭代。对包装在一起的少量 Lua 代码进行 JIT 处理不会有太大帮助,我目前的猜测最多只能提供百分之几(这也是为什么整合 LuaJIT 的优先级较低)

答案2

自 2012-12-25 起 LuaJitTeX 可用。它是基于 Lua 5.1 的 LuaTeX 和 LuaJit。

默认有两种模式:

  • jit 关闭,默认模式(仅使用更快的虚拟机)
  • jit 开启(大多数情况下不是更快,甚至更慢)

ConTeXt 独立版本默认包含 LuaJitTeX,这意味着使用 MkIV 和 LuaJitTeX 就像提供参数一样简单--jit

context --jit   somefile.tex  # or
context --jiton somefile.tex

对于 plainTeX 只需使用luajittex作为编译器:

luajittex         --fmt=luajittex-plain.fmt somefile.tex  # or
luajittex --jiton --fmt=luajittex-plain.fmt somefile.tex

构建 plainJitTeX 的格式与构建 LuaTeX 的格式没有什么不同。

为了展示速度差异,我对一份简单文档进行了快速的非科学测试。以下是具有三个可能选项的 ConTeXt 文档的结果:

Engine                      Compile time
------                      ------------
LuaTeX                      3.6s
LuaJitTeX (jit turned off)  2.9s
LuaJitTeX (jit turned on)   3.0s

编辑:关于如何获取 LuajitTeX 似乎有些困惑。该项目托管在foundry.supelec.fr - LuajitTeX。最近他们重组了服务器并重新定位了内容。不幸的是,URL 已更改,旧 URL 不再有效。可以使用 SVN 获取源代码

svn checkout --username anonsvn https://foundry.supelec.fr/svn/luajittex/trunk

可以找到二进制文件在 ConTeXt 花园。

相关内容