Spiga

作为.NET程序员,您需要IronPython么?

2010-04-23 02:00 by FantasySoft, 5221 visits, 收藏, 编辑

.NET作为一个成熟的开发平台,为很多语言的发展提供了肥沃的土壤:历史相对久远的有Managed C++、C#、VB.NET、J#,正值壮年的则有IronPython、IronRuby,而老赵极力推崇的F#则是后起之秀了。面对那么多的语言,选择自然也是一个难题。在大部分开发人员眼中,C#是最为正统的.NET语言,它几乎是为.NET而生的,语言版本更替的速度与.NET Framework相比,一点都不含糊,这不,C# 4.0都出来了。因此,C#通常都是.NET开发人员的首选语言。但是,掌握了C#之后,如果您希望学习多一种语言以增强解决问题的能力;如果您希望了解更多有关编程范式的内容;如果您希望了解DLR甚至编译器的设计;如果您希望……那么,IronPython将会是您的最佳选择,它就像是叮当的万能口袋,只要您伸手,您就会淘到想要的宝贝。

 

有关IronPython的历史,我在这里就不赘述了。简单的说,它是Python语言在.NET上的实现,既保持了Python所崇尚的编程哲学(想了解它?打开IronPython的控制台,在提示符之后输入import this,出现在屏幕上的就是著名的The Zen of Python),又为.NET开发人员带来了新鲜的开发模式。IronPython与传统的.NET开发语言不同,它是一门解释型的动态语言,也是一门多范式编程语言。尽管解释型、动态与多范式都是非常简单的词汇,但是它能够为开发人员带来更为直接了当的解决方案。譬如,在C# 3.0才引入的Lambda表达式以及闭包(Closure),而IronPython早已极好地支持这些体现了函数式编程的特性。即便是现在,使用IronPython实现闭包、duck typing以及运行期绑定都要比C#和VB.NET来得更为直观。也许您对会“直观”这一点不以为然,而事实上,我们在编写程序的时候,除了要让计算机为我们工作之外,还要让他人能够轻松地阅读我们的代码。作为程序员,我们都知道代码的可读性以及可维护性是多么重要,如果从一个软件的生命周期来看,升级与维护是软件最大的开销。您还记得KISS原则么?是的,就是Keep It Simple & Stupid。IronPython可以帮助我们实现这美妙的“亲吻”,真正去拥抱编程。

 

除了为开发人员带来更高的生产力之外,IronPython的出现也让“.NET平台糅合各种编程语言”真正实至名归。想必大家都会记得,早在.NET平台诞生之初,它所推崇的多语言协作理念是其最大的噱头。然而,.NET所述的多语言协作性仅仅体现在IL的层面上,那么在实际的项目开发当中,又会有谁愿意同时使用C#和VB.NET进行开发呢?由于IronPython是一门解释型语言,利用它来实现某些不稳定的业务逻辑就再适合不过了,省却了编译的过程,即改即运行。更重要的,我们可以在C#代码当中直接调用IronPython的代码!这些特性都让IronPython完全能够胜任C#左膀右臂的角色。

 

听Michael罗嗦了那么多,您是否觉得IronPython正是自己的新欢呢?觉得上述文字空洞无物?好吧,最后给大家送上两段代码,Code will tell.

 

代码一,实现了“把一个字符串数组中的元素转化为整数,再将其中的偶数放入一个List<int>容器中”的功能,C#版的代码可以参考老赵的文章《拯救C# 2.0,但是我们真做的到吗?》

 

>>> strArray = ["1""2""3""4"]
>>> intArray = [int(i) for i in strArray if int(i) % 2 == 0]

 

代码二,实现了“找出长度较短的字符串”的功能,C#版的代码可以参考Klesh.Cn精心翻译的好文:C#和Java的闭包-Jon谈《The Beauty of Closures》 中的Example2b.cs 和Example2c.cs:

>>> SampleData = ["the""quick""brown""fox""jumped","over""the""lazy""dog"]
>>> maxLength = raw_input("Maximum length of string to include?"
>>> maxLength = int(maxLength)
>>> shortWords = [i for i in SampleData if len(i) <= maxLength]

 

 

Add your comment

24 条回复

  1. #1楼 陈梓瀚(vczh)      2010-04-23 02:59
    var strArray=new string[]{"1","2","3","4"};
    var intArray=strArray.Select(s=>int.Parse(i)).Where(i=>i%2==0).ToArray();

    var sampleData=new string[]{...};
    int maxLength=int.Parse(Console.ReadLine());
    var shortWords=sampleData.Where(s=>s.Length<=maxLength);

    其实是强类型和弱类型的区别。
     回复 引用 查看   
  2. #2楼 toEverybody      2010-04-23 03:21
    .Net是平台,上面有许多的小丑,C#,VB.net,F#..
    而拾建这个平台的是C++/C
    所以大家不管在上面作什么,都离不开.NET...
     回复 引用 查看   
  3. #3楼 补丁      2010-04-23 03:31
    很多功能,在compile as a service出来之前,只好用ironpython
     回复 引用 查看   
  4. #4楼 DiggingDeeply      2010-04-23 07:21
    .NET现在要与WIN32平起平坐了
     回复 引用 查看   
  5. #5楼 landylee      2010-04-23 08:15
    学习python不知道从何做起呢?
     回复 引用 查看   
  6. #6楼 烙馅饼喽      2010-04-23 08:22
    这您可说错了,我没事就VB.NET 和C#混用,咔咔
     回复 引用 查看   
  7. #7楼 张荣华      2010-04-23 08:50
    @landylee
    python简明教程 http://www.woodpecker.org.cn:9081/doc/abyteofpython_cn/chinese/index.html
     回复 引用 查看   
  8. #8楼 allentranks      2010-04-23 09:13
    支持Python,程序员修炼之道说了,程序员每年学一门新的语言
     回复 引用 查看   
  9. #9楼 DarthVader      2010-04-23 09:35
    这些只是Python的例子,作为.Net程序员,我更关心的是怎么和C#集成。在最近的项目中已经集成了IrongPython,不过使用非常繁琐,还是C# 4.0中的dynamic好用
     回复 引用 查看   
  10. #10楼[楼主] FantasySoft      2010-04-23 09:47
    @DarthVader
    繁琐在哪里呢?请问可否详细说明呢?
     回复 引用 查看   
  11. #11楼 ToBin      2010-04-23 09:47
    .net 平台的费用越来越不平民化!
    公司要转linux平台了。
    学php,java才是王道!
     回复 引用 查看   
  12. #12楼[楼主] FantasySoft      2010-04-23 09:49
    @陈梓瀚(vczh)
    纠正一点,这不是强弱类型的区别。IronPython与C#一样,也是一门强类型语言。
     回复 引用 查看   
  13. #13楼 LawSong      2010-04-23 09:58
    @toEverybody
    我又看到了一个小丑.
     回复 引用 查看   
  14. #14楼 szwe      2010-04-23 10:24
    iron python启动慢的夸张。
    另外在小写风格的python文本里出现pascal风格的.net命名空间真是不伦不类。
     回复 引用 查看   
  15. #15楼 riccc      2010-04-23 10:30
    @DarthVader
    也想听听对实际运用的总结
     回复 引用 查看   
  16. #16楼 木野狐(Neil Chen)      2010-04-23 10:45
    list comprehension 的确是很优美的哦 ;p
     回复 引用 查看   
  17. #17楼[楼主] FantasySoft      2010-04-23 11:03
    @szwe
    您指哪方面的启动?IronPython Console还是IronPython程序呢?
     回复 引用 查看   
  18. #18楼[楼主] FantasySoft      2010-04-23 11:04
    @木野狐(Neil Chen)
    老朋友,好久不见了。List Comprehension可是IronPython吸引我的最重要因素之一啊。
     回复 引用 查看   
  19. #19楼 木野狐(Neil Chen)      2010-04-23 11:08
    @FantasySoft
    :)
    如果能讲解一下 IronPython 里怎么操作 xml 就更好了,这是我比较关心的。比如能否模拟或者接近 vb.net 的 xml literal 那样的语法。
     回复 引用 查看   
  20. #20楼 阿水      2010-04-23 17:24
    为什么不能有一个类似c++,JAVA,c#的动态语言呢?
    这样几乎不需要语法学习就可以上手,降低学习门槛,
    毕竟大家都是为了工作才学技术的,当然了喜欢研究的另说。
    实话说 对 Python,Ruby的语法不适应,
    感觉JAVA下的Groovy,Scala好像更顺眼,纯粹个人观点。
     回复 引用 查看   
  21. #21楼 民工精髓      2010-04-26 15:41
    操作xml要是有flex里面那么方便就好了,它那个做法很值得参考
     回复 引用 查看   
  22. #22楼[楼主] FantasySoft      2010-04-27 23:01
    @民工精髓
    Flex是怎样操作XML的呢?
     回复 引用 查看   
  23. #23楼 崔鹏飞      2010-05-03 19:22
    利用它来实现某些不稳定的业务逻辑就再适合不过了,省却了编译的过程,即改即运行的模式
    ------
    for instance?
     回复 引用 查看   
  24. #24楼 白途思      2010-12-14 20:01
    @崔鹏飞
    我也很关注!
    很多人都那么说,但是python和Ironpython的调试能力比拥有强大IDE的语言差多了,最好的要算集成VS的那个IDE了。既然用VS,我干嘛不用C#之类的语言?!
    从来没见项目中用到过Ironpython。
     回复 引用 查看