This question is two-fold. Unfortunately, one side is opinionated, i.e. something to close-vote, so I put that part at the end and hope no one notices... The other side (coming first) are serious interface3 questions, which I would like to see answered.
The interface3.pdf documentation promises that it will write in a TeXhacker note for each command which latex2 command or TeX primitive they come close to. But it does not contain
As I understand it, latex3 is also about turning the “TeX programming language” into a saner environment, i.e. an environment which makes it harder to produce bugs by accident. One way to do this is to favor explicit over implicit, especially on treacherous grounds. With that in mind:
\cs_new:Npn[which exists] more likely a
\cs_gnew:Npn[my invention], i.e. global?
\cs_set:Npn[which exists] something like
\cs_lset:Npn[my invention], i.e. local?
\cs_lnew:Npn[my invention] was deemed of no use, so it was dropped, right?
Does it make sense that unqualified functions (no l, no g) sometimes mean local and sometimes global (set vs. new)? → confusing → bugs
\longis implicit now as this is what most programmers would expect, especially with the latex3 syntax. Right?
- Non-long is called
..._nopar:...now. It is the unexpected, so it got an explicit label, contrary to what TeX originally had. Correct?
- Why is
\protectednot implicit on the same grounds? I.e.
\cs_new_protected:Npn[which exists] should be called
\cs_gnew:Npn[my invention] and
\cs_gnew_unprotected:Npn[my invention] could be what is currently