Why are you using then two different words, "string" and "character"?
In the same logic, would you call an integer an array of bits?
Dimensionality creeps in when you have more than one element of the
same type. More than one integer (each composed of 32 bits). More than one string (each composed of characters).
One
could argue that strings are arrays of characters. In that logic,
Dim MyCharacters() would make sense.
But
Dim My$ is just confusing VB syntax; they probably introduced this monstrous syntax because ignorant coders had the tendency to use new variables all over the place without declaring them first; which almost certainly introduces difficult to chase bugs, especially if variables are case-sensitive. So the Microsh**t guys abused good ol'
Dim to force coders to declare their variables, so that further down the compiler could bark at them if it hit an undeclared one. Bad technology,
dumb compiler.
In GfaBasic, for example, you had no need to declare variables, but the editor would bark at you if you tried
my$="hi" instead of a previously used
My$="ho": It would show you a MsgBox asking "declare new variable my$?". An
intelligent feature, and you could even switch it off in the early stages of a proggie, when you were creating lots of new variables.
How do you handle that in FBSL? In MasmBasic,
SetGlobals and Enum (further down) can be used, and Masm itself asks for declarations of the type
MyInt DWORD 123 or
My$ db "hi", 0.