How to dictate a caret, and what it actually means in your language
Say “caret” to produce a caret spaced on both sides, so “base caret exponent” assembles as base ^ exponent. Read that output carefully: in JavaScript, Java, C, Go and Rust the caret is bitwise XOR, not exponentiation, and VoiceGem emits the character without any opinion about what it means.
A seven-word bitwise expression runs about 8.1 seconds typed against about 2.6 seconds spoken. (sources: Dhakal, Feit, Kristensson & Oulasvirta, “Observations on Typing from 136 Million Keystrokes”, CHI 2018, 168,000 participants, 136 million keystrokes; Yuan, Liberman & Cieri, “Towards an Integrated Understanding of Speaking Rate in Conversation”, Interspeech 2006, 2,438 American English telephone conversations (Switchboard corpus). The speech figure is conversational rate, not a measured dictation rate — no such measurement exists.)
parityBit = left value ^ right valueThis tool runs entirely in your browser. Nothing you type is sent anywhere, stored, or logged.
Step by step
- 1
Say “caret” where the character belongs
Speak the single phrase. The caret attaches on neither side, so it keeps spaces in an arithmetic or bitwise expression.
- 2
Put it first for a regex anchor
Say “caret” at the start of a pattern to anchor at the beginning of a line. The surrounding space needs stripping before the pattern compiles.
- 3
Know what your language does with it
Check the operator before you rely on the output. VoiceGem writes the character you asked for and has no idea whether your language reads it as exclusive-or, exponentiation or an anchor.
- 4
By hand
Press Shift-6. It is an awkward reach on most layouts, which makes the caret one of the more genuinely useful characters to have a spoken phrase for.
VoiceGem writes the caret and takes no view on what it means
One character, at least four meanings. The caret is exclusive-or in C, Java, JavaScript, Go and Rust; exponentiation in Python's older cousins and in mathematical notation; a start-of-line anchor in every regex dialect; a negation marker inside a character class; and a compatible-version range in npm.
Refusing to interpret is the whole design. A formatter that tried to be helpful here would have to know your file type and your intent, and would occasionally be confidently wrong — the Deterministic Pass writes the glyph, and the meaning stays entirely yours.
Where the manual way breaks
Shift-6 is an awkward reach that many touch typists get wrong, which makes this one of the few individual characters where saying the word is competitive with typing it.
Regex anchors are the strongest case in this group. A pattern that anchors both ends, with a quantified character class in between, is punctuation from start to finish, and every character of it is a place to make an invisible mistake. Dictating it through VoiceGem gets the characters down in the order you said them, with the whitespace left to clean up afterwards.
Doing this somewhere else? speech-to-code converter, on your own input, what changes for the asterisk, how the forward slash works, or the minus sign and hyphen.
Common questions
Not in most languages. It is bitwise exclusive-or in C, Java, JavaScript, Go and Rust. VoiceGem emits the character and takes no view on the operator.
Say “open bracket caret”, the range, then “close bracket”. The caret keeps its spaces, so strip them before compiling the pattern.
No. The caret is one of twelve characters in VoiceGem's table with exactly one spoken phrase.
Dictate an anchored pattern and see the whitespace you will strip.
Open the tool