IronRuby - .NET 4.0 - вопросительные знаки и восклицательные знаки в конце имен методов - PullRequest
3 голосов
/ 11 сентября 2009

Просто любопытно, как мир .NET 4.0 CLR будет вызывать методы, заканчивающиеся вопросительными знаками и восклицаниями? Как будет выглядеть синтаксис вызова из C # или VB.NET?

Ответы [ 2 ]

3 голосов
/ 11 сентября 2009

Я думаю, вы должны немного дифференцировать случаи здесь.

На уровне 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. Это позволяет авторам языков гибко представлять свои элементы другим языкам и предоставляет другой уровень, где они могут отображать имена членов в свое внутреннее представление.

1 голос
/ 11 сентября 2009

В C # или VB.NET вам придется использовать интерфейсы хостинга DLR для доступа к этим методам, используя имя метода в качестве строки. Новый «динамический» синтаксис из этих языков не переопределяет их обычные лексические правила для допустимых идентификаторов методов.

...