Below is a simple equation
y = mx + b
There are, at least, 4 names in this equation:
y, m, x, b.
These names are only meaningful to those who already understand the purpose of this equation.
A novice would want different names, e.g.
y, slope, x, y-intersect.
A compiler-writer might used numeric names instead (aka addresses), e.g.
0x7512, 0x5525, 0x7518, 0x1234.
Or, a compiler-writer, might wish to abstract the names, using Data Descriptors, e.g.
@sp.2, @r11.0, @sp.8, @0x1230.4
In some cases names are more like comments. The names are superfluous except as comments to the reader.
In some cases it is enough to know only the type of a datum, e.g. if a datum appears only once in code, there is not point in assigning two identifiers (name and type) to the datum, where only one identifier will do.
The Common Lisp language incorporates a construct called symbol macros which emphasizes the superfluous nature of names.
The above observations lead to the notion that names in PLs are not single entities, but might be treated more like lists of tags.
Names could be defined as lists.
Named entities could be named by a list of valid synonyms.
The above would be like projectional-editing-in-the-small.
 Software Architecture using assign-once languages.
 E.G. diagrams, etc.
 PL means Programming Language