\documentclass{article} \usepackage{l3precom} % let's dump what is known about the LaTeX internals so far. % this will not be much as the very basic stuff doesn't get % dumped and we haven't got anything else. % \dumpLaTeXstate{test1} \CodeStart % we need some variants of tlp_set which are not yet % defined for use in the code below. % \exp_def_form:nnn{tlp_set}{Nn}{on} \exp_def_form:nnn{tlp_gset}{Nn}{on} % okay, here we either load a dump file (testdump.cmp) % and then jump tp \cs_dump: or we compile one for next time. % don't forget that if you change code below it will only have any % affect if a new dump file is written so you may have to remove % the existing one. % \cs_load_dump:n{testdump} % two test definitions % \def_new:Npn\foo{some foo} \def_new:Npn\baz{some baz} % we say that \foo should be dumped in the compiled style. % this is pretty useless as it is certainly not faster than defining % it in the first place. but this is only done for showing that it % works. just assume that \foo is actually a pretty difficult % definition which does need a lot of static compilation due to % parsing, comparing values, etc., so that it is much faster load the % final version rather than do the compilation each time again. % % btw note that \baz is not dumped and will not be available in the % production run (ie the one using the cmp file) % \cs_record_name:N\foo % get our self a scratch register (again this will not be available in % the production run) % \tlp_new:Nn\l_scratch_tlp{} % now we generate a unique cs name and assign it the string "foo". % again pretty useless example. but with this mechansim you can build % complex graph structures etc using these names as pointers, etc. and % in such a case you need to dump the state of your graph at some % point to be able to load it very fast in production. % \cs_gen_sym:N\l_scratch_tlp{} \tlp_set:on \l_scratch_tlp {foo} % ditto for a global unique name % \cs_ggen_sym:N\l_scratch_tlp{} \tlp_gset:on \l_scratch_tlp {bar} % and now we dump the whole rubbish. In the current implementation % only csnames can be precompiled, perhaps registers should be handled % similarly. % \cs_dump: % and some int register to show something in the second LaTeX state % dump. % \int_new:N\l_my_int \int_set:Nn\l_my_int{42} % % as the allocation routines are not distributed we have to do this % manually. % \register_record_name:N\l_my_int \dumpLaTeXstate{test2} % and changing something ... what happens with the LaTeX state? % \int_set:Nn\l_my_int{0} \def:Npn\file_not_found:nTF#1#2#3{} \dumpLaTeXstate{test3} \CodeStop \begin{document} \LaTeX\ still works! \end{document}