Очевидно, транслятор языка программирования довольно либерально относится к тому, «что такое идентификатор». И все эти смайлики и говняшки (ыгы, эмодзи-говняшка не так давно тоже появилась) также считаются буквами. Однако тут есть маленькая ловушка: если один и тот же символ составить разными способами — например, «и+кратка» против монолитного «й» — это будут разные идентификаторы.
UPD. Посмотрел, как это делается в Java. Годятся любые символы, являющиеся буквами в Юникоде. Как минимум по спецификации Гослинга.