bytebuster: (Farang-baa)
[personal profile] bytebuster
Ну скажіть, авжеж я умнічка? :-)

Q: What is the Mongolian vowel separator for?

I've heard of the Mongolian vowel separator from programmers, who regard it as an interesting quirk in Unicode. When I google for it, most of the hits are from those revelling in its geekiness.

But as someone dabbling a bit in Mongolian, I'd like to know: What is it used for?


A:

The formal description has been already given in the excellent @ColinFine's answer. Let me give a different description in "layman terms".

Mongolian characters usually have four distinct forms: isolate, initial, medial, and final.
Vowels A and E have exactly the same glyphs in their final form.
Here are the four forms for A and E, correspondingly.
Note, both have two versions of final glyphs:

Mongolian vowels A and E

Although choosing between A or E can be concluded from the the syntax (A for masculine grammatic gender while E is for feminine), there can be semantic difference depending on the final form (stroke up or stroke down).

For example:

qara [qara] (to look), stroke up;
qar+a [qar+a] (black), stroke down;

The Vowel Separator is used in the second word.
Phonetically, there's a little pause before the final vowel.
Note that A does not obtain the isolate form. Instead, it only changes to the second final form. Also, R gets the final form in the second word.


As per why the character makes programmers' hell (just in case if you wonder).

Most of the modern-day compilers allows Unicode identifiers (e.g., variable names). You may write your program with variables in your (non-English) language, and your program works just fine.

However, using U+180E may lead you into a trouble because it may or may not be considered a symbol. Here's what happens (assume that X is the Mongolian Vowel Separator):

integer variable aXa = 42;
print aa;

Note: since the X symbol is invisible, the first line on your screen looks like:

integer variable aa = 42;

Trouble one: Unicode versions prior to 4.0 treat X as a formatting (thus, valid) character, but trying to use the variable aa leads you to an error because there is no such variable! There's only aXa, but you can't see it.

Trouble two: Unicode 4.0 treats X as a zero-width space. This means that you're trying to declare a variable with space in its name (a a) which makes your code unable to compile. But again, due to invisibility you simply don't know what's wrong. The code visually looks perfectly valid.


References:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

Сторінку створено Середа, 15 Квітень 2026 19:48

Грудень 2025

П В С Ч П С Н
1234567
891011121314
15161718192021
22232425262728
2930 31    
Створено з Dreamwidth Studios

За стиль дякувати