← Back to context

Comment by amszmidt

12 hours ago

Don’t think TeX ever did that, that was a “simple” Pascal program.

Lisp Machines though.. updating the operating system was by loading bunch of compiled files that replaced currently loaded functions in memory.

Then again, Lisp Machines where very proud of self modification — the CADR had a fun feature where it could modify the next instruction depending on things…

How the world has changed.

Pascal TeX to the best of my knowledge never did it but the web2c version does.

The description is a bit confusing because it can both dump only the warmed up interpreter image or the whole process, I think.

"With the program undump, you can use `core' to reconstitute a preloaded executable, which does not need to read a `.fmt' file to get started. Although preloaded executables save startup time, they have a big disadvantage: neither the disk space to store them nor their code segments (at runtime) can be shared. Therefore, if both tex and latex are running, twice as much memory will be consumed, to the general detriment of performance."

https://mirror.gutenberg-asso.fr/tex.loria.fr/texlive-htmldo...

> Don’t think TeX ever did that, that was a “simple” Pascal program.

Not exactly the entire process image, no, but essentially all of its data in a single chunk. It’s a peculiar Pascal program because it bypasses basically all of Pascal’s typing, records, etc., and instead builds its own from a set of (WEB) macros on top of a giant untyped array. Quoth Knuth in TeX: The Program §115:

> The dynamic storage requirements of TeX are handled by providing a large array mem in which consecutive blocks of words are used as nodes by the TeX routines. Pointer variables are indices into this array [...].

There are a few more areas designated for specific purposes, but at the end of the day (§1302) it works out about the way you’d expect:

  procedure store_fmt_file;
  [...] begin ⟨ If dumping is not allowed, abort 1304 ⟩
  ⟨ Create the format ident, open the format file, and inform the user that dumping has begun 1328 ⟩;
  ⟨ Dump constants for consistency check 1307 ⟩;
  ⟨ Dump the string pool 1309 ⟩;
  ⟨ Dump the dynamic memory 1311 ⟩;
  ⟨ Dump the table of equivalents 1313 ⟩;
  ⟨ Dump the font information 1320 ⟩;
  ⟨ Dump the hyphenation tables 1324 ⟩;
  ⟨ Dump a couple more things and the closing check word 1326 ⟩;
  ⟨ Close the format file 1329 ⟩;
  end;