1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
% language=us runpath=texruns:manuals/ontarget
\startcomponent ontarget-binary
\environment ontarget-style
\startchapter[title={The binary}]
This is a very short chapter. Because \LUAMETATEX\ is also a script runner, I
want to keep it lean and mean. So, when the size exceeded 3MB after we'd extended
the math engine, I decided to (finally) let all the \METAPOST\ number interfaces
pass pointers which brought down the binary 100K and below the 3MB mark again.
I then became curious about how much of the binary actually is taken by
\METAPOST, and a bit of calculation indicated that we went from 20.1\percent\ down
to 18.3\percent. Here is the state per May 13, 2022:
\startluacode
local bytes = {
liblua = 515156,
libluaoptional= 103668,
libluarest = 82492,
libluasocket = 105700,
libmimalloc = 178800,
libminiz = 51584,
libmp = 797636,
libmp = 797636, -- went from 20.1% to 18.3% after going more pointers
-- libmp = 797636 + (3061799 - 2960091),
libpplib = 325162,
libtex = 2207190,
}
local comment = {
liblua = "lua core, tex interfaces",
libluaoptional= "framework, several small interfaces, cerf",
libluarest = "general helper libraries",
libluasocket = "helper that interfaces to the os libraries",
libmimalloc = "memory management partial",
libminiz = "minimalistic core",
libmp = "mp graphic core, number libraries, lua interfacing",
libpplib = "pdf reading core, encryption helpers",
libtex = "extended tex core",
}
local luametatex = 2960091
local libraries = 0 for k, v in next, bytes do libraries = libraries + v end
local normalizer = luametatex/libraries
local luastuff = bytes.liblua
+ bytes.libluaoptional
+ bytes.libluarest
+ bytes.libluasocket
-------(luametatex) context.par()
-------(libraries) context.par()
-------(normalizer) context.par()
context.starttabulate { "|l|r|r|p|" }
context.FL()
context.NC() context.bold("component")
context.NC() context.bold("pct")
context.NC() context.bold("bytes")
context.NC() context.bold("comment")
context.NC() context.NR()
context.ML()
for k, v in table.sortedpairs(bytes) do
context.NC() context(k)
context.NC() context("%.1f",100*v/libraries)
context.NC() context(math.round(normalizer*v))
context.NC() context(comment[k])
context.NC() context.NR()
end
context.ML()
context.NC() context.bold("luametatex")
context.NC()
context.NC() context.bold(luametatex)
context.NC() context("2022-05-13")
context.NC() context.NR()
context.LL()
context.stoptabulate()
function document.texstuff() context("%.1f\\percent",100 * bytes.libtex /libraries) end
function document.mpsstuff() context("%.1f\\percent",100 * bytes.libmp /libraries) end
function document.pdfstuff() context("%.1f\\percent",100 * bytes.libpplib/libraries) end
function document.luastuff() context("%.1f\\percent",100 * luastuff /libraries) end
\stopluacode
It is clear that the \TEX\ core is good for half of the code (\ctxlua {document .
texstuff ()}) with the accumulated \LUA\ stuff (\ctxlua {document . luastuff ()})
and \METAPOST\ being a good second (\ctxlua {document . mpsstuff ()}) and third
and the \PDF\ interpreting library a decent fourth (\ctxlua {document . pdfstuff
()}) place.
\stopchapter
\stopcomponent
|