Особенно считая что для названий подпрограмм, классов и т.п. можно использовать буквы любого языка - программы прочитанные с помощью ASCII могут быть неюзабельны и без BOM.
Так делать нельзя. То, что такая возможность теоретически где-то существует, не значит, что её допустимо использовать.
но в какой серьёзной ситуации вам понадобится читать текстовый файл кодировкой, которая может неправильно прочитать некоторые символы файла?
Компилятору языка программирования в общем случае вообще нет дела, в какой кодировке файл с программой. Он знает, например, что файл может содержать такие-то ключевые слова и прочие токены (в ASCII естественно), разделенные пробельными символами (только ASCII, естественно. В UTF-8 их слишком много, чтобы все распознавать).
Теперь представьте себе что он видит вместо директивы var a: integer
что-то вроде \xEF\xBB\xBFvar a: integer
:
Слово \xEF\xBB\xBFvar
он не знает и возвращает синтаксическую ошибку. Делает он это абсолютно правильно и справедливо, поскольку он не какой-то текстовый редактор, а компилятор, то есть его задача — это распознавать синтаксис конкретного языка программирования, в который всякий не-ASCII бинарный мусор не входит.
При этом, это никак не мешает ему пропускать комментарии, содержащие UTF-8 или принимать строки, внутри которых UTF-8, поскольку для этого что-то знать об этой кодировке не нужно, достаточно просто найти открывающий символ комментария, то есть (* или { и пропустить всё до закрывающего *) } символа, при необходимости учитывая вложенные конструкции.
С учётом этого, текстовые редакторы, работающие с кодом ни в коем случае не должны пихать BOM в UTF-8 файлы, поскольку они этим создают синтаксические ошибки на ровном месте. Может MS VS так делает, поскольку она прибита гвоздями к компилятору той же фирмы, где мелкомягкие могли специально прописать исключение, чтобы \xEF\xBB\xBF пропускался, но это никак не делает это допустимым для других текстовых редакторов, поскольку другие компиляторы не обязаны пропускать эти байты и далеко не всегда это делают.
Например, если вы работаете не с одним компилятором паскаля, а с несколькими, что мешает открыть в редакторе PascalABC.net файл, изначально предназначенный для Borland Pascal, подредактировать там что-то, а затем попытаться скомпилировать в Borland Pascal?
Из-за существующего на данный момент бага в итоге файл не скомпилируется ни в PascalABC.net — потому что он не поддерживает некоторые возможности нормального паскаля, ни в Borland Pascal — потому что добавлены мусорные байты в начало файла.
Да и вообще, что мешает пользователю открыть в редакторе код на любом языке программирования, хоть на C, хоть на Python? Может у него уже открыт PascalABC.net и ему не хочется загружать какой-то ещё редактор для того чтобы быстренько добавить точку с запятой или ещё что-то подобное?
Это нормально, когда текстовый редактор портит код? По-моему, нет. А по-вашему?