Я думаю, вы должны немного дифференцировать случаи здесь.
На уровне CLR проблем просто нет. CLR позволяет включать гораздо больший набор символов в имена типов и элементов, чем обычно доступно для большинства языков (таких как C # и VB.Net). Например, на уровне CLR разрешено включать апострофы.
Фактически, если вы посмотрите на раздел 8.5.1 спецификации CLI ECMA, он явно не ограничивает набор символов. Это просто обозначает, как их следует сравнивать.
Другой вопрос, который необходимо рассмотреть, заключается в том, как имена на самом деле пишутся в IL. Ничто не мешает IronRuby просто исключать восклицательные знаки при записи сборки и добавлять их обратно при чтении с диска. Этот тип отображения выполняется другими языками, чтобы превратить уродливые имена в действительные. Например, если вы посмотрите на List<T>
на уровне IL, на самом деле он записан как List`1.
Я не говорю, что IronRuby выполняет эти сопоставления, просто возможно, что они это делают. Я на самом деле совершенно незнаком с Ruby как языком.
Что касается того, как они потребляются из VB.Net и C #. К счастью, оба языка имеют опцию DLR для взаимодействия с необработанными IronPython и IronRuby. Это позволяет авторам языков гибко представлять свои элементы другим языкам и предоставляет другой уровень, где они могут отображать имена членов в свое внутреннее представление.