Pregunta

Algo que no debo aclarar, entiendo que hay diferencias entre C # y VB.NET (principalmente en el uso de punteros) pero por qué si ambos tienen un CLR común, XNA (por ejemplo) solo funciona con C # y no VB.NET, o es que los complementos de Visual Studio han sido dirigidos a C # en lugar de VB.Net, y de hecho las extensiones de lenguaje funcionan en ambos

Lo siento si es una pregunta obvia, pensé que lo haría

¿Fue útil?

Solución

El CLR se ha portado a varias plataformas, no todas iguales. El XBox 360 CLR, por ejemplo, no tiene Reflection.Emit o incluso todas las operaciones de IL que realiza el CLR completo . Por lo tanto, un compilador diferente puede emitir códigos IL que son legales en el CLR completo, pero ilegales en el CLR compacto.

El otro problema es la disponibilidad de las bibliotecas de clases. El BCL completo incluye el Microsoft.VisualBasic , que es Referenciado automáticamente por el compilador VB.NET. Contiene funciones VB6 compatibilidad , las funciones a href = "http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.myservices.aspx" rel = "nofollow noreferrer"> My namespace , así como algunas funciones auxiliares del compilador , y comúnmente se conoce como VB. Tiempo de ejecución NETO.

Cada vez que se transporta el CLR, se portan ciertos ensamblajes, y otros no. Para la XBox, Microsoft.VisualBasic no fue portado. Esto significa que no puede hacer referencia a nada desde ese espacio de nombres. Si bien es bastante fácil no hacer referencia a la compatibilidad o Mis espacios de nombres, los servicios del compilador se pueden insertar en el IL compilado sin que los llame explícitamente.

En VB.NET 8, puede pasar un indocumentado y sin soporte -novbruntimeref cambie a vbc.exe para evitar que haga referencia a Microsoft.VisualBasic.dll. Desafortunadamente, esto a veces causaría errores de compilación impares. En VB.NET 9, se ha convertido en documentado y admitido y renombrado a / vbruntime .

El tercer caso es complementos y soporte de Visual Studio. Esto depende de los paquetes individuales, en cuanto a si admiten plantillas, código gen, etc. para cada idioma. Creo que algunos terceros han lanzado plantillas VB.NET para XNA, aunque es no soportado oficialmente .

La conclusión es que se trata de una combinación de preocupaciones técnicas (puertos CLR, disponibilidad de BCL, salida de IL del compilador) y soporte (pruebas, financiamiento y complementos para otros idiomas).

Otros consejos

Es el conjunto de herramientas que define el soporte de idioma. XNA, por ejemplo, simplemente hizo todo su trabajo con C # y solo envió soporte para él. Aún puede escribir una aplicación en VB.NET y compilarla manualmente desde la línea de comandos. Siempre y cuando su aplicación no se compile a un IL ilegal (códigos de operación que XNA no admite) aún se ejecutará. El problema principal son los recursos: no tienen la mano de obra para realizar el desarrollo y la prueba completos de todos los idiomas, por lo que eligieron uno.

De todas las cuentas, VB.NET y C # son 99.9999 equivalentes cuando se trata del CLR. Pero hay algunas pequeñas diferencias que pueden morderte. Además, recuerdo haber leído en algún blog de microsoft que hay algunas cosas que el CLR puede hacer que no son (todavía) programables por VB.NET o C # y tienen que ser hechas por IL. De hecho interesante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top