减小Lua的二进制体积

Lua本身已经是一个十分轻量级的脚本语言。在我的64位Windows上编译出来的lua53.dll仅248K。(参照物:python34.dll为3963K。)

Lua Technical Note 1介绍了通过删减功能来进一步减小Lua的二进制体积的方法。这篇文章针对的是Lua 3.2,16年前的版本,尽管如此,它仍然给了我很大的启发。

首先看Lua 5.3中哪些模块占用的二进制体积最多:

size	%all	%core	file
23571	7%	12%	lauxlib.o
20909	6%	11%	lparser.o
20256	6%	11%	lapi.o
18403	5%	10%	lvm.o
14413	4%	8%	llex.o
13526	4%	7%	lcode.o
12584	4%	7%	lgc.o
10214	3%	5%	ldebug.o
8967	3%	5%	lobject.o
8776	2%	5%	ldo.o
7002	2%	4%	ltable.o
5087	1%	3%	lundump.o
4887	1%	3%	lstate.o
3970	1%	2%	ltm.o
3832	1%	2%	ldump.o
2818	1%	1%	lstring.o
2525	1%	1%	lfunc.o
2170	1%	1%	linit.o
1810	1%	1%	lopcodes.o
1498	0%	1%	lmem.o
1406	0%	1%	lzio.o
860	0%	0%	lctype.o
189484	54%	100%	(core)
继续阅读 →

Lua语言中的“惊喜”

Lua在有些地方没有采用其他语言(尤其是C)的约定俗成,所以经常给程序编写者带来惊喜(surprise, “gotcha”)。根据我的经验,整理如下:

  1. 不等号是~=,而不是!=
  • 这是我写Lua程序时最常犯的一个笔误。只能说,几乎所有的程序语言,不等号用的都是!=(C家族),还有一部分用<>(Pascal, Basic, SQL)。用~=真的只有Lua一家。
继续阅读 →