The story
Half is Old English healf, and in Middle English half or halfe. It meant "side" or "part" as well as one of two equal pieces, and the L was pronounced, as it still is in its German cousin halb.
Later, English speakers dropped the L in words spelled -alf and -alve: half, calf, halve, salve (in some accents). Unlike the L in walk, which turned into a vowel glide first, here the L was simply lost, and in many accents the vowel grew longer to fill the gap. British English ended up with a long "ah" (hahf); American English kept the short vowel of cat.
The spelling had long been fixed and kept the L. Learners whose first language spells phonetically often pronounce it, and that is one of the quickest giveaways of a non-native accent in a very common word.
