2010-06-09 11 views
16

cuando vi por primera vez C#, pensé que esto debía ser una broma. Estaba empezando con la programación en C. Pero en C# solo podías arrastrar y soltar objetos, y solo escribirles código de evento. Fue tan simple.2 preguntas básicas pero interesantes sobre .NET

Ahora, todavía me gusta C más, porque estoy muy atraído por las operaciones básicas de bajo nivel, y C está justo al nivel de ensamblador, con pocas rutinas básicas, así que me gusta mucho. Aún más porque escribo pequeñas aplicaciones para microcontroladores.

Pero ayer escribí un programa de control muy simple para mi cubo de LED basado en microcontroladores en asm, y necesitaba alguna manera de simplemente crear secuencias de animación para el Cube. Entonces, recordé C#. Prácticamente NO tengo habilidades de C#, pero aun así creé un programa simple para hacer secuencias de animación en aproximadamente una hora con GUI, solo con la ayuda de google y la ayuda de las descripciones de funciones incorporadas en C#.

Entonces, para ir al grano, ¿hay alguna otra razón que la velocidad máxima, para usar cualquier otro idioma que no sea C#? Quiero decir, es tan efectivo. Sé que Java es un poco similar, pero espero que C# sea más efectivo en Windows ya que es directamente de Microsoft.

La segunda pregunta es, ¿cuál es la ventaja de compilar en CIL, y que ejecutar por CLR, que compilarlo directamente en código de máquina? Sé que la portabilidad es una, pero como C# es principalmente para Windows, ¿no sería más poderoso compilarlo directamente? Gracias.

+10

Arrastrar y soltar tiene más que ver con el IDE de Visual Studio que con el propio lenguaje C#. En ese caso, cualquier IDE podría ayudarlo a arrastrar y soltar y a la aplicación GUI. El código en los eventos todavía tiene que escribirse. – Steven

+0

.Net no es solo computadoras de escritorio con Windows, también son teléfonos/PDA, y si no me equivoco algunos dispositivos integrados. – slugster

+3

Una vez tuve esta misma ideología que C/C++/Assembly era el único camino a seguir, pensando que todo lo demás era lento y monolítico. La verdad es que te codificas en una esquina cuando tratas de usar la misma herramienta para cada trabajo. Durante un tiempo, me perdí los avances personales pensando de esta manera. Moraleja: Siempre es bueno ampliar tus horizontes y probar algo nuevo. – spoulson

Respuesta

10

1 - los idiomas de diff tienen sus pros y sus contras. Hay familias de idiomas (funcionales, dinámicos, estáticos, etc.) que son mejores para dominios problemáticos específicos. Tendrás que aprender uno en cada familia para saber cuándo elegir cuál. p.ej. para escribir un guión simple, escogería Ruby sobre C#

2 - Compilándolo con CIL: la portabilidad puede no ser un gran problema ... pero para ser precisos, Mono tiene una implementación del CLR en Linux. Por lo tanto, allí. Además, CIL le ayuda a mezclar y combinar entre los idiomas que se ejecutan en el CLR. p.ej. IronRuby puede acceder a bibliotecas de marcos estándar escritas en C#. También permite que CLR aproveche el hardware real (por ejemplo, activar optimizaciones, usar instrucciones específicas) en el que se ejecuta el programa. El CLR en 2 máquinas produciría el mejor código nativo de la misma IL para la máquina respectiva.

0

Primera respuesta: C# debe usarse por defecto para nuevos proyectos. Hay algunos casos en los que aún no se ha alcanzado C++ (en términos de compatibilidad con varios paradigos), pero se dirige en esa dirección.

Segunda respuesta: la "portabilidad" también incluye la portabilidad x86/x64, que se puede lograr estableciendo la plataforma en AnyCPU. Otra ventaja (más teórica en este punto) es que el compilador JIT puede aprovechar el conjunto de instrucciones específicas de la CPU y así optimizar de forma más efectiva.

+4

No estoy de acuerdo con su primera oración, está diciendo que está muy generalizada. Hay razones * no * para usar C#, y es completamente dependiente del proyecto. – Bobby

+0

Derecha, pero la opción predeterminada debe ser C#. A menos que haya una razón específica del proyecto para no hacerlo. A eso me refería. –

+0

No, no si crea software de producto o aplicaciones web, o tiene un objetivo diferente al de una PC de Windows, o necesita escalar, ... –

2

No estoy seguro de que C# sea más eficaz solo porque es un producto de Microsoft. Si usa Visual Studio u otro RAD, parte del código se genera automáticamente y, a veces, es menos eficiente. Hace algunos años yo era un dogmático, pensando que solo C podía responder a todas nuestras oraciones :-P, pero ahora creo que las máquinas virtuales pueden ayudar mucho en la forma de optimizar el código antes de ejecutarlo (como un RDBMS), almacenarlo en caché de código para ejecutar más tarde, etc. Incluyendo la posibilidad de crear "clusters" de máquinas virtuales como lo hace Terracotta. Al menos los beneficios de tener una capa de abstracción adicional son más grandes que no lo tienen.

+0

¿Qué es la RDA? Desarrollo rápido ? ¿o? – kenny

+0

@kenny LoL ... discúlpeme! RAD (Desarrollo rápido de aplicaciones) – ocell

5

La elección del idioma y la plataforma son una función del objetivo del proyecto. Parece que disfruta de la programación a nivel de sistema, que es uno de los puntos fuertes del uso de C/C++. Por lo tanto, sigue escribiendo código de nivel de sistema si eso es lo que disfrutas.

Escribir en C# es sólido en el desarrollo rápido de aplicaciones comerciales donde los objetivos son inherentemente diferentes. Escribir un código de trabajo bueno más rápido vale la pena tanto en horas-hombre como en tiempo de comercialización. Microsoft nos hace un gran favor al proporcionar un lenguaje expresivo y un sólido marco de funcionalidad que nos impide tener que escribir código de bajo nivel o herramientas para el 95% de las necesidades comerciales.

5

Una ventaja importante de IL es la independencia del idioma. Puede definir módulos en el proyecto que se deben hacer en C++, algunos en C# y algunos en VB.net. Todos estos proyectos, una vez compilados, proporcionan los ensamblados respectivos (.dll/.exe). Esto puede usar el ensamblado para el proyecto C++ en el C# one y viceversa. Esto es posible porque ... no importa qué idioma (compatible con .net) elija ... todos se compilan con el mismo código IL.

1

Estoy de acuerdo con spoulson. C# es realmente bueno para resolver problemas de negocios. Puede crear muy eficazmente un marco que modele los procesos de su negocio y resuelva muchos de esos problemas con la orientación del objeto y los patrones de diseño. En ese sentido, proporciona gran parte de la agradable capacidad orientada a objetos que tiene C++.

Si le preocupa la velocidad, C es la ruta a seguir por las razones que indicó.

1

Más sobre la segunda pregunta: puede ejecutar NGEN para generar una imagen nativa del ensamblaje, lo que puede mejorar el rendimiento. No es exactamente un código de máquina, pero dado que elude la fase JIT (compilación justo a tiempo), la aplicación tenderá a funcionar mucho más rápido.

http://msdn.microsoft.com/en-us/library/6t9t5wcf(VS.80).aspx

El Generador de imágenes nativas (Ngen.exe) es una herramienta que mejora el rendimiento de las aplicaciones administradas . Ngen.exe crea imágenes nativas, que son archivos que contienen código de máquina compilada de , y las instala en la memoria caché de la imagen nativa en la computadora local. El tiempo de ejecución puede usar imágenes nativas de la caché en lugar de utilizar el compilador just-in-time (JIT) para compilar el ensamblaje original.

+0

+1 No sabía que esto existiera. ¿Has usado esto en producción y qué mejoras viste? –

1

"¿Hay alguna otra razón luego de arriba velocidad, para utilizar cualquier otro idioma que no sea C#?"

puedo pensar en por lo menos cuatro, toda cosa relacionada:

  • tengo aa gran inversión actual en 'lenguaje X', y no tienen el tiempo o dinero para cambiar a algo más. (Portar una base de código existente, comprar/adquirir/bibliotecas portuarias, volver a desarrollar habilidades de equipo en C#, aprender diferentes herramientas.)
  • Se anticipó la necesidad de portar el código a una plataforma donde C# no es compatible.
  • Necesito usar herramientas que no están disponibles en C#, o que no son tan compatibles. (IDE, compiladores alternativos, generadores de códigos, bibliotecas, la lista sigue y sigue ...)
  • He encontrado un lenguaje que es aún más productivo.;-)

"¿cuál es la ventaja de compilar en CIL, y de correr por CLR, que compilar directamente en código máquina ?"

Se trata de dar al entorno de ejecución más control sobre la forma en que se ejecuta el código. Si compila el código de machien, mucho se vuelve 'inamovible' en ese momento. Aplazar la compilación al código de la máquina hasta que sepa más sobre el entorno de tiempo de ejecución le permite optimizar de maneras que de otro modo no podría. Sólo unos pocos de la parte superior de mi cabeza:

  • aplazamiento compilación le permite seleccionar las instrucciones que responden más a la CPU host. (Para usar instrucciones nativas de 64 bits cuando las tenga, o las últimas extensiones de SSE).
  • El código de aplazamiento le permite optimizar de formas que de otro modo no podría. (Si solo tiene una clase en tiempo de ejecución derivada de una interfaz específica, puede comenzar a alinear incluso métodos virtuales, etc.)
  • Los recolectores de basura a veces necesitan insertar puntos de verificación en el código de usuario. La postergación de la recopilación permite que el GC tenga más control y flexibilidad sobre cómo se hace eso.