diff options
Diffstat (limited to 'doc/context/presentations/context/2021/context-2021-programming.tex')
-rw-r--r-- | doc/context/presentations/context/2021/context-2021-programming.tex | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/doc/context/presentations/context/2021/context-2021-programming.tex b/doc/context/presentations/context/2021/context-2021-programming.tex new file mode 100644 index 000000000..907a9ebfa --- /dev/null +++ b/doc/context/presentations/context/2021/context-2021-programming.tex @@ -0,0 +1,325 @@ +% language=us + +\usemodule[present-boring,abbreviations-logos] + +\definehighlight[nb][style=bold,color=middlegray,define=no] + +\startdocument + [title={PROGRAMMING}, + banner={the way \CONTEXT\ is set up}, + location={context\enspace {\bf 2021}\enspace meeting}] + +\starttitle[title=Levels] + +When you look at \CONTEXT\ bottom|--|up (engine|--|interface) you will notice: \blank[2*big] + +\startnarrower + +\startitemize[n] + +\startitem + \highlight[nb]{primitives:} this is what the engine comes with +\stopitem +\startitem + \highlight[nb]{infrastructure:} basic management of data structures +\stopitem +\startitem + \highlight[nb]{helpers:} macros that hide complexity +\stopitem +\startitem + \highlight[nb]{subsystems:} collections of macros that implement functionality +\stopitem +\startitem + \highlight[nb]{mechanisms:} these combine various subsystems +\stopitem +\startitem + \highlight[nb]{modules:} extra functionality (uses 1--5) +\stopitem +\startitem + \highlight[nb]{styles:} handling sources and layout (uses 4--6) +\stopitem + +\stopitemize + +\stopnarrower + +\blank[2*big] Users normally see \CONTEXT\ top|--|down (usage|--|hacking). + +\stoptitle + +% % % + +\starttitle[title=Styles] + +\startitemize + +\startitem + These are prebuilt solutions for common as well as rare situations. +\stopitem + +\startitem + The system comes with some styles: the \type {s-*} files. +\stopitem + +\startitem + Right from the start the idea was that you get some reasonable default. +\stopitem + +\startitem + And if you want more you stepwise define your style as you go. +\stopitem + +\startitem + It really is part of the game: exploration. +\stopitem + +\startitem + Solving your problem is a nice challenge. +\stopitem + +\startitem + If you want a completely predefined setup, shop somewhere else. +\stopitem + +\stopitemize + +\stoptitle + +% % % + +\starttitle[title=Modules] + +\startitemize + +\startitem + A lot of functionality is built in. +\stopitem + +\startitem + This helps to keep the system consistent. +\stopitem + +\startitem + We could cheat and ship thousands of few|--|liner styles but don't do that. +\stopitem + +\startitem + There are a few mechanisms that don't really fit into the core, so these are + implemented as modules that do fit into the interface: the \type {m-*} and + \type {x-*} files. +\stopitem + +\startitem + Users can build and share their solutions which has resulted in some + third party modules: the \type {t-*} files. +\stopitem + +\startitem + For (a few, often old) private files I use \type {p-*} name scheme. +\stopitem + +\stopitemize + +\stoptitle + +% % % + +\starttitle[title=Mechanisms] + +\startitemize + +\startitem + These are combinations of subsystems but often they cannot really be distinguished. +\stopitem + +\startitem + Examples are notes, that combine notations, lists, references, descriptions etc. +\stopitem + +\stopitemize + +\stoptitle + +% % % + +\starttitle[title=Subsystems] + +\startitemize + +\startitem + This is what users see and can configure +\stopitem + +\startitem + Most are (conceptually) rather old but evolved over time. There are no + fundamental differences between \MKIV\ and \LMTX, but the later is hopefully + a bit cleaner. +\stopitem + +\startitem + Examples are fonts, languages, color, structure (sectioning, lists, + constructions, itemgroups, references), spacing, graphics, bibliographies, + positioning, numbering and layout. +\stopitem + +\startitem + More hidden are the backend, export and \XML\ interfaces. +\stopitem + +\startitem + Some have subsystems themselves, like widgets that relate to a specific + backend. +\stopitem + +\startitem + There are often dependencies between subsystems which makes that it's not really a + hierarchy. A more strict separation would demand much more overhead. +\stopitem + +\stopitemize + +\stoptitle + +% % % + +\starttitle[title=Helpers] + +\startitemize + +\startitem + These provide basic programming help. +\stopitem + +\startitem + Examples are macros for comparing things, loops, list processing, + argument handling. +\stopitem + +\startitem + But more abstract box manipulations also fits in here. +\stopitem + +\startitem + Some subsystems, like \XML\ and bibliographies provide more specific low + level helpers. +\stopitem + +\stopitemize + +\stoptitle + +% % % + +\starttitle[title=Infrastructure] + +\startitemize + +\startitem + The engine provides counters, dimension and other registers that need + to be managed in order to avoid clashes in usage. +\stopitem + +\startitem + Many of the helpers, subsystems and mechanisms fall back on common rather + low level functions (\LUA) and macros (using primitives). +\stopitem + +\stopitemize + +\stoptitle + +% % % + +\starttitle[title=Primitives] + +\startitemize + +\startitem + This is what the engine provides: the built|-|in commands and features. +\stopitem + +\startitem + In addition to the visible primitives there are \LUA\ interfaces and these + permit adding extra primitives. +\stopitem + +\startitem + In \LUAMETATEX\ we have the core \TEX\ set but a few were dropped because we + don't have a backend and a different \IO\ subsystem (so they have to be + emulated). +\stopitem + +\startitem + We also have some of the \ETEX\ primitives and very few of the \PDFTEX\ ones + but I now consider for instance expansion and protrusion extensions to be + kind of \ETEX. +\stopitem + +\startitem + There are additional \LUATEX\ primitives but some were dropped, again because + of the backend, so we emulate some, and also because some were experimental. +\stopitem + +\startitem + There are quite some new primitives and existing mechanisms have been extended, + cleaned up and (hopefully) improved. +\stopitem + +\stopitemize + +% % % + +\starttitle[title=The shift] + +\startitemize + +\startitem + There have always been complaints about \TEX\ as a language (what makes me + wonder why those who complain use it.) +\stopitem + +\startitem + Although there are some extensions to the language in \ETEX, follow|-|ups have + not really succeeded in this area. +\stopitem + +\startitem + At some point I decided that code in the categories 1|--|4 cold benefit from + extensions. +\stopitem + +\startitem + That also meant that we use less of the low helpers. It makes the code look a + bit more \TEX. +\stopitem + +\startitem + It also means less clutter, in code as well in tracing. Often the code + becomes simpler too. +\stopitem + +\startitem + The idea is that \TEX\ becomes a bit more a programming language. +\stopitem + +\startitem + Of course it takes away the \quotation {Watch me, I can do real dirty \TEX\ + hacking!} brawling. +\stopitem + +\startitem + It also can take away some of the complaints. +\stopitem + +\startitem + And it definitely adds some fun. +\stopitem + +\stopitemize + +{\em During the week we show some of the implementation (in Visual Studio) and +examples of applications. We also write a small extension (the {\tttf dk} unit)} + +\stoptitle + +\stopdocument |