% Copyright 2017-2018 The LaTeX3 Project

\documentclass{ltnews}

\PassOptionsToPackage{colorlinks}{hyperref}

\usepackage{csquotes}
\usepackage{hologo}
\usepackage{ragged2e}
\usepackage{underscore}


%%% wrong in ltnews.cls ... so some tmp fix here at the moment:
\makeatletter
\renewcommand{\subsubsection}{%
   \@startsection
      {subsubsection}{2}{\leftmargini}{-1.5ex \@plus -1ex \@minus -.2ex}%
      {1sp}{\@subheadingfont}%
}
\makeatother


\AtBeginDocument{%
  \renewcommand*{\LaTeXNews}{\LaTeX3~News}%
  \RaggedRight
  \setlength\parindent{1em}%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\publicationmonth{February}
\publicationyear{2018}
\publicationissue{11}

% Avoid hyphenation of csnames
\makeatletter
\protected\edef\cs#1{%
  \noexpand\path{\@backslashchar#1}%
}
\makeatother
\hyphenpenalty=10000 \exhyphenpenalty=10000

\begin{document}

\maketitle

\tableofcontents

\section{Move of sources from Subversion to Git}

The \LaTeX{} team have used a variety of version control systems over the life
of the \LaTeX3 sources. For a long time we maintained the \LaTeX3 sources in
Subversion (\texttt{svn}) but also provided a read-only clone of them on GitHub using
SubGit from TMate Software~\cite{SubGit} to synchronize the two
repositories---a solution that worked very well.

We have now retired the Subversion repository and completely moved over to Git,
with the master \LaTeX3 repository hosted on GitHub:
\url{https://github.com/latex3/latex3}. This new approach means we are (slowly)
adopting some new approaches to development, for example branches and accepting
pull requests.

\subsection{Version identifiers}

Following this change, we have removed Subversion \verb=$Id= lines from the
\LaTeX3 sources. At present, we will be retaining \cs{GetIdInfo} as there are
several possible use cases. The \LaTeX3 sources now have only release date
strings as identifiers. However, the team recommend that package authors
include version information directly in \cs{ProvidesExplPackage} (or similar)
lines.

\section{\pkg{expl3} updates and extensions}

Work has continued on the codebase over the last year, with both small
changes/fixes and more substantial changes taking place. The following sections
summarise some of the more notable changes.

\subsection{\pkg{l3sort} moves to the kernel}

Sorting is an important ability, and for some time the team have provided a
stand-alone \pkg{l3sort} to support this. The functionality has seen wide take
up, and so has now been integrated directly into the kernel. This took place in
parallel with some interface changes to \enquote{round out} the code.

\subsection{Boolean functions}

For some time, the team have been aware that boolean expressions can fail in
certain circumstances, leading to low-level errors. This is linked to two
features of the long-standing \cs{bool_if:n(TF)} function: expandable operation
and short-circuit evaluation.

Addressing that has meant two changes: altering \cs{bool_if:n(TF)} to
\emph{always} evaluate each part of the expression, and introducing new
short-circuit functions without the issue. The latter are \verb|lazy| in \pkg{expl3}
terms:
\begin{itemize}
\item \cs{bool_lazy_all:n(TF)}
\item \cs{bool_lazy_and:nn(TF)}
\item \cs{bool_lazy_any:n(TF)}
\item \cs{bool_lazy_or:nn(TF)}
\end{itemize}
These new, stable functions are now the recommended way of handling boolean
evaluations. Package authors are encouraged to employ these new functions as
appropriate.

\subsection{Revision of \pkg{l3file}}

Large parts of \pkg{l3file} have been revised to give a better separation of
path/file/extension. This has resulted in the addition of a number of new support
functions and variables.

At the same time, new experimental functions have been added to utilise a
number of useful primitives in \hologo{pdfTeX}{}: \cs{file_get_mdfive_hash:nN},
\cs{file_get_size:nN} and \cs{file_get_timestamp:nN}. Currently, \hologo{XeTeX}
does not support getting file size/timestamp information: this is available in
other engines.

Paralleling these changes, we have added (experimental) support for shell
escape to the \pkg{l3sys} module, most notably \cs{sys_shell_now:n}. A range of
test booleans are also available to check whether shell escape is enabled.

\subsection{Detection of \cs{cs_generate_variant:Nn} errors}

The ability to generate variants is an important feature of \pkg{expl3}. At
the same time,  there are crucial aspects of this approach that can be
misunderstood by users. In particular, the requirement that variants map
correctly to an underlying \verb|N|- or \verb|n|-type base function is sometimes
misunderstood.

To help detect and correct these cases, \cs{cs_generate_variant:Nn} now
carries out error checking on its arguments, and raises a warning where
it is mis-applied. At present, the team have avoided making this an error
as it is likely to be seen by end users rather than directly by package
developers. In time, we are likely to revisit this and tighten up
further on this key requirement.

\subsection{Accessing random data}

To support randomised data selection, we have introduced a family of
experimental functions which use under\-lying engine support for random values,
and provide one entry at random from the data type.

At the same time, we have addressed some issues with uniformity stemming from
the random number function used by \hologo{pdfTeX}{} and inherited by other
engines. This means that \pkg{expl3}'s FPU will generate \emph{pseudo}-random
values across the range of possible outputs.

\subsection{More powerful debugging}

A new set of debugging functions have been added to the kernel. These allow
debug code to be enabled locally using the new option \verb|enable-debug| along
with functions \cs{debug_on:n} and \cs{debug_off:n}. Accompanying this change, we
have improved the handling of global/local consistency in variable setting.

\subsection{Mark-up changes in \pkg{l3doc}}

Since the introduction of the \verb|__| syntax to mark internal functions, the
need for explicit markup of internal material in sources has been negated.
As such, we have now dropped the requirement to mark internal material with
\verb|[aux]| when using \pkg{l3doc}. Instead, the status of functions and
variables is auto-detected from the presence of \verb|__|. For cases where
non-standard names are used for internal code, the mark-up \verb|[int]| is
retained, \emph{e.g.}
\begin{verbatim}
\begin{macro}[int]{\l@expl@enable@debug@bool}
\end{verbatim}

\newpage
\section{\pkg{l3build} updates}

Work on \pkg{l3build} has continued in parallel with \pkg{expl3} work, in
particular continuing to develop features to allow wider use of the tool.

Paralleling the move of the \LaTeX3 codebase to Git, \pkg{l3build} now has its
own separate Git repository: \url{https://github.com/latex3/l3build}. This will
enable us to involve other developers in the Lua code required for the build
system. At the same time, we have split the code into a number of small source
files, again to ease development both for the team ourselves and for potential
collaborators.

Another major change is that \pkg{l3build} can now retain the structure of
source repositories when creating a CTAN archive. Whilst the team favor `flat'
source setups, other users prefer structured approaches. Most notably, this
new \pkg{l3build} functionality means that it is now used to carry out
\pkg{beamer} releases.

The other major new feature is a new approach to multiple test setups, which
replaces the older \verb|--testfiledir| option. In the new approach, separate
configuration files are listed in the main \verb|build.lua| script, and can be
selected manually using a new \verb|--config| switch. This new approach allows
complex test setups to be run in a totally automated fashion, which is
important for kernel testing.

Some changes to the normalisation routines have been carried out, some to deal
with upcoming \hologo{LuaTeX} changes, others to address aspects which show up
only in some tests. This has required \verb|.tlg| updates in some cases: as far
as possible, we strive to avoid requiring changes to the reference files.

\begin{thebibliography}{10}
  \raggedright
  \bibitem{SubGit}
    \emph{SubGit}, TMate Software, \url{https://subgit.com}
  \bibitem{11:project-publications}
    Links to various publications by members of the \LaTeX{} Project Team.
    \newblock \url{https://www.latex-project.org/publications}
\end{thebibliography}

\end{document}
