2009-01-30 10 views
8

Actualmente uso Python para la mayoría de mis proyectos de programación (principalmente desarrollo rápido de pequeños programas y prototipos). Me gustaría invertir tiempo en aprender un idioma que me brinde la flexibilidad de utilizar varias herramientas y API de Microsoft cada vez que surja la oportunidad. Estoy tratando de decidir entre IronPython y C#. Como Python es mi lenguaje de programación favorito (principalmente por su concisión y sintaxis limpia), IronPython suena como la opción ideal. Sin embargo, después de leer sobre esto un poco, tengo varias preguntas.IronPython vs. C# para proyectos de pequeña escala

Para aquellos de ustedes que han usado IronPython, ¿alguna vez queda claro dónde termina el Python clásico y comienza .NET? Por ejemplo, parece haber una superposición significativa en la funcionalidad entre las bibliotecas .NET y la biblioteca estándar de Python, así que cuando necesito hacer operaciones de cadena o analizar XML, no estoy seguro de qué biblioteca debo usar. Además, no tengo claro cuándo se supone que debo usar tipos de datos Python versus .NET en mi código. Por ejemplo, ¿cuál de las siguientes estaría usando en mi código?

d = {} 

o

d = System.Collections.Hashtable() 

(Por cierto, parece que si hago un montón de cosas como esta última podría perder algo de la concisión, por lo que estoy a favor de Python en el primer lugar.)

Otro problema es que varias herramientas de desarrollo de Microsoft, como .NET CF y Xbox XNA, no están disponibles en IronPython. ¿Hay más situaciones en las que IronPython no me daría el alcance total de C#?

Respuesta

11

He creado una aplicación a gran escala en IronPython con C#.

Es casi completamente inconsútil. Las únicas cosas que faltan en IronPython desde la verdadera sensación "python" son las bibliotecas basadas en C (tengo que usar .NET para ellas) y IDLE.

El idioma interactúa con otros lenguajes .NET como un sueño ... Específicamente si incorpora el intérprete y vincula las variables por referencia.

Por cierto, un hash en IronPython se declara:

d = {} 

Sólo ten en cuenta que en realidad es un objeto IronPython.Dict, y no un diccionario de C#. Dicho esto, las conversiones a menudo funcionan de manera invisible si lo pasa a una clase .NET, y si necesita convertir de forma explícita, hay integradas que lo hacen bien.

Con todo, un lenguaje increíble para usar con .NET, si tiene motivos para hacerlo.

Solo un consejo: Evite el IDE de Visual Studio IronPython como la peste. Encontré las terminaciones de línea automáticas atornilladas en la indentación, entre espacios y pestañas. Ahora, ese es un error difícil de rastrear insertado en el código.

3

Sugiero echar un vistazo a Boo [http://boo.codehaus.org/], un lenguaje basado en .NET con una sintaxis inspirada en Python, pero que proporciona la gama completa de funcionalidad de .NET 3.5.

IronPython es ideal para usar bibliotecas centradas en .NET, pero no es adecuado para creando debido a las diferencias subyacentes en cómo los idiomas escriben. Como Boo hace mecanografía basada en la inferencia en tiempo de compilación, excepto cuando se solicita explícitamente la tipificación de pato (o el usuario da un tipo específico), le permite compilar.Las bibliotecas centradas en red se pueden usar fácilmente a partir del código C# (y de otros lenguajes), para lo que IronPython no es adecuado; Además, como tiene que hacer menos introspección durante el tiempo de ejecución, Boo compila un código más rápido.

Cuestiones relacionadas