E.2 Ranges of characters disallowed initially [charname.disallowed]
0300-036F, 1DC0-1DFF, 20D0-20FF, FE20-FE2F
These are four separate blocks of combining diacritical marks. This makes sense to disallow, since it might be nearly impossible to distinguish, say, e+0306 from 00EB.
But there's a load of WTF in what they allowed.
E.1 Ranges of characters allowed [charname.allowed]
00A8, 00AA, 00AD, 00AF, 00B2-00B5, 00B7-00BA, 00BC-00BE, 00C0-00D6, 00D8-00F6, 00F8-00FF
00AD is a "soft hyphen," i.e. a character that is completely invisible unless some software that performs word-wrap decides to break a line in the word that it appears in, in which case it appears completely indistiguishable from the regular ASCII hyphen. Because of course my source code editor wraps lines for me. And keep in mind, this isn't just characters allowed in the document (perhaps in string literals or comments), this is for identifier names! For those people whse idea of self-documenting code is to use identifiers that are 120 characters long.
00B4 is an acute accent. Lots of fun to be had there. ´WTF´ = "WTF"
For some reason 00B7 middle dot (·) is allowed, but 00D7 multiplication sign (×) and 00F7 division sign (÷) are excluded. Can I use the latter two as operators, or are they just disallowed?
The remainder of this group of allowed regions encompasses most every language in the world, which makes a sort of sense if you want to write variable names in Japanese or Korean or whatever. So perhaps it's more informative here to look at the characters they omitted.
1680 is omitted, Ogham space mark ( ). Because it's a space?
180E is a Mongolian vowel separator, a nonprinting character. But the nonprinting 180B-180D, Mongolian free variation selectors one, two, and three, are allowed.
2000-200A are spaces of various widths. But 200B, zero width space, is allowed, and 200C and 200D are also zero width characters. Then 200E and 200F, left-to-right and right-to-left marks, are omitted. What, I can't have a variable that reads partly left-to-right and partly right-to-left? But I can put zero-width characters into it?!
The 201x block is full of variations on the hyphen and quotation marks. And the omitted 202x characters are punctuation like the dagger and bullet. But 202A-202E are other variations on left-to-right and right-to-left indicators. So I CAN write variable names that are read partly left to right and partly right to left! (I admit to not knowing the difference between these different characters nor how they are meant to be used in mixed LTR/RTL text, but I find the exclusion of one set of these and inclusion of others interesting.
The next group of excluded characters 202F-203E includes another space, per-mille and per-ten-thousand signs (similar to percent), prime and double-prime and such (wait, I can't make a variable named a prime? I guess I've have to use 00B4 acute accent instead), and some other miscellaneous punctuation including the interrobang (‽ - I could have really used this two paragraphs ago!). They allowed 203F, 2040, and 2054 which are some sort of character ties (‿ ⁀ ⁔, fun if you want to parenthesize text written vertically, I guess) but omitted a bunch of other weird punctuation here.
The next group of allowed characters 2060-206F is entirely nonprinting, and includes 2062 invisible times and 2064 invisible plus. So I can't put a × in my variable name but I can put an invisible one? WTF?
Then 2190-245F includes a bunch of arrows, mathematical symbols, and miscellaneous symbols, including, starting at 2400, the printable substitutes for basic control characters like ␀. They allowed a bunch of circled and parenthesized letters and numbers like ⒄. [Yes, that's a 17 in parentheses, all as a single Unicode character. Unicode is TRWTF.] Then they skipped a bunch of box drawing characters and miscellaneous symbols, but allowed more circled numbers at 2776-2793 - the ones from dingbat fonts.
Basically it looks like they tried to include everything that was supposed to represent a letter or number, and excluded most punctuation and spaces, though there are some weird exceptions. And when they got up to 10000 they gave up and just allowed everything. Like this. And this.