10
$\begingroup$

In fresh kernel Mathematica 11.3 (Linux) asking for args (similarly for dims) I obtain

    ??args 
Global`args

As far as I remember similar problem we had in 10.x with the symbol z

See

Seems like Global context is again polluted with args and dims as is confirmed by Names["Global`*"]

$\endgroup$
  • $\begingroup$ This does not happen in V11.3 on my Mac (nor in V12). $\endgroup$ – Michael E2 Jul 27 '19 at 20:20
  • $\begingroup$ @MichaelE2 This happens on 11.3.0 for Linux x86 (64-bit) (March 7, 2018) according to $Version information $\endgroup$ – user18792 Jul 29 '19 at 14:14
  • $\begingroup$ I see args and dims in 12.0 on macOS. Since it's common to multiple versions, I suspect these may be defined by a paclet update. Such things tend to be completely harmless, so I would not worry about it. $\endgroup$ – Szabolcs Jan 2 at 12:58
12
$\begingroup$

It's a type of otherwise harmless bug that tends to come and go with versions. I would suggest to report it to Wolfram, but also not to worry about it. Notice that the symbols have no associated definitions, which means that they will not interfere with your code.


A potential way in which such a situation can arise is the following. Imagine you put

Sqr[x_] := x^2

in your $UserBaseDirectory/Kernel/init.m file. It will cause not only Sqr to be created in the Global` context, but also x, which is easy to overlook. This is completely harmless though, and will not interfere with any x symbol you might use in your session.


A case that is a bit more realistic, and better shows why these bugs tend to occur regularly, is illustrated e.g. by my MaTeX package. Take a look at the Kernel/init.m file of MaTeX, which does follow the standard package structure. In the simplest case, this file would only contain Get["MaTeX`MaTeX`"]. In this case, I chose to include a few extra checks, as well as unprotect/protect symbols. Notice, however, that only System` context symbols appear in this file. If I as much as mentioned any other symbol, it would be created in Global` because at the time when the context init.m is evaluated, BeginPackage may not have yet been reached or EndPackage[] may have been passed already.

Consider e.g. how we can set Protected and ReadProtected on all symbols of a package called MyPack after EndPackage[]. A simple way is

With[{symbols = Names["MyPack`*"]},
  SetAttributes[symbols, {Protected, ReadProtected}]
]

However, this would create Global`symbols. Therefore in MaTeX I opted for the following, perhaps slightly less clear construct:

SetAttributes[
  Evaluate@Names["MyPack`*"],
  {Protected, ReadProtected}
]

Notice that this second version avoid mentioning any non-System symbols, therefore it will not pollute the Global context.

Subtle points like this are very easy to overlook.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.