% 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
