It seems Greek ano teleia (U+0387) is one of the “Punctuation, other” characters (along with primes) permitted as part of identifiers. What is the rationale, here? Semantically, it doesn’t seem to make sense, and it looks a bit confusing – as it’s (at least in many fonts) very similar to the dot operator (U+22c5), i.e.,
\cdot. Also, it’s essentially the same as – i.e., normalizes to – the middle dot (U+00b7), which is not permitted. Actually, it is even normalized to the middle dot when parsed as a symbol, even though the symbol cannot be written directly using this character!
julia> x·y = 42 # Using U+0387 42 julia> x⋅y = 42 # Using U+22c5 ⋅ (generic function with 1 method) julia> x·y = 42 # Using U+00b7 ERROR: syntax: invalid character "·" julia> name = "x·y" julia> name '·': Unicode U+0387 (category Po: Punctuation, other) julia> String(Meta.parse(name)) '·': Unicode U+00b7 (category Po: Punctuation, other)
… and just to underscore the point:
julia> Meta.parse(String(Meta.parse(name))) ERROR: Base.Meta.ParseError("invalid character \"·\"")
Given that it seems to have been singled out for inclusion (at least in the pure-Julia rewrite of the parser,
JuliaParser.jl, it’s listed along, alongside the three primes), I guess there may be a reason for including it, but … it seems it might be just as sensible to disallow it, just like, say, the (canonical) middle dot character is?