Общее время выполнения? - PullRequest
1 голос
/ 06 января 2009

Что-то, что мне не совсем понятно, я понимаю, что есть различия между C # и VB.NET (в основном в использовании указателей), но почему, если оба имеют общий CLR, XNA (например) работает только с C # а не VB.NET, или же надстройки для Visual Studio были нацелены на C #, а не на VB.Net, и влияют на работу языковых расширений в обоих

Извините, если это очевидный вопрос, подумал, что я задам

Ответы [ 3 ]

4 голосов
/ 06 января 2009

Это набор инструментов, который определяет языковую поддержку. Например, XNA просто выполнила всю свою работу с C # и только предоставила поддержку для него. Вы все еще можете написать приложение в VB.NET и вручную скомпилировать его из командной строки. Пока ваше приложение не скомпилировано в какой-либо нелегальный IL (коды операций, которые не поддерживает XNA), оно все равно будет работать. Основной проблемой являются ресурсы - у них нет рабочей силы для полной разработки и тестирования всех языков, поэтому они выбрали один.

3 голосов
/ 06 января 2009

CLR был портирован на различные платформы, не все из которых равны. XBox 360 CLR, например, не имеет Reflection.Emit или даже всех операций IL, которые полный CLR делает . Следовательно, другой компилятор может выдавать коды IL, которые допустимы для полной версии CLR, но недопустимы для Compact CLR.

Другая проблема - доступность библиотек классов. Полный BCL включает в себя пространство имен Microsoft.VisualBasic , на которое автоматически ссылается компилятор VB.NET. Он содержит функции VB6 совместимости , функции My namespace , а также некоторые вспомогательные функции компилятора и обычно называется средой выполнения VB.NET.

Всякий раз, когда CLR переносится, некоторые сборки переносятся, а другие - нет. Для XBox Microsoft.VisualBasic не был портирован. Это означает, что вы не можете ссылаться на что-либо из этого пространства имен. Хотя довольно просто не ссылаться на совместимость или пространства имен My, службы компилятора могут быть вставлены в скомпилированный IL без явного вызова их.

В VB.NET 8 вы можете передать недокументированный и неподдерживаемый ключ -novbruntimeref в vbc.exe, чтобы он не ссылался на Microsoft.VisualBasic.dll. К сожалению, это иногда вызывает странные ошибки компилятора. В VB.NET 9 это стало документированным и поддерживаемым и переименованным в /vbruntime.

Третий случай - это надстройки и поддержка Visual Studio. Это зависит от отдельных пакетов, от того, поддерживают ли они шаблоны, генерацию кода и т. Д. Для каждого языка. Я полагаю, что некоторые сторонние производители выпустили шаблоны VB.NET для XNA, хотя официально не поддерживается .

Суть, я думаю, в том, что это сочетание технических проблем (порты CLR, доступность BCL, вывод IL компилятора) и поддержки (тестирование, финансирование и надстройки для других языков).

1 голос
/ 06 января 2009

Из всех учетных записей VB.NET и C # эквивалентны 99,9999, когда речь идет о CLR. Но есть небольшие отличия, которые могут вас укусить. Кроме того, я помню, как читал в блоге Microsoft, что CLR может делать некоторые вещи, которые (пока) не программируются ни VB.NET, ни C # и должны выполняться IL. Действительно интересно.

...