在.NET平台下使用C#交互式控制台(上):简介

标签: .Net框架 实践优化 技术尝鲜 | 发表时间:2011-09-01 09:25 | 作者:[email protected] (老赵) forcey
出处:http://blog.zhaojie.me/

上周日在广州的珠三角技术沙龙上,我的演讲题目是“Mono之于.NET程序员”。Mono一直是我十分喜爱的产品,我也一直关注它的发展,总有很多人用各种方式对它进行FUD,甚至是.NET程序员自己。这其实跟程序员使用盗版一样,自掘坟墓,是种无比愚蠢的行为。在演讲中,我提到.NET程序员可以如何从Mono项目中得到帮助,现在便以C#交互式控制台为例,演示下在.NET平台下使用Mono项目的常见方式。

Mono和.NET都是CLI(ECMA 335)的实现,包括C#语言编译器,运行时和类库等等。与微软实现的.NET不同,Mono是个开源项目,我们可以在授权允许的范围内任意折腾。例如,微软在Silverlight里提供了一个JSON类库,但我们无法将其用于普通的.NET项目,于是我们就可以从Mono里剥离相关代码出来。再比如,Windows Phone的SDK中没有提供像.NET 4.0里面一样的任务并行库,于是也有开发人员将Mono里面的实现移植了过来。社区成员也十分喜欢开源,因此无论是Mono团队还是其他开发人员都会很乐意捣鼓各种东西,并且也搞出许多有意思的东西来。C#交互式控制台(有时也将其称为REPL,即Read-Eval-Print-Loop)就是其中一个。

之前Anders Hejlsberg在PDC 2010中提到“C#与Visual Basic的未来”,其中一项功能就是“编译器即服务(Compiler as a Service)”。这个功能是指,把编译器的功能向普通用户开放出来,这样便可以实现更多的东西,例如代码解释执行,或是把代码变成语法树,让程序理解其语义等等(这便是Jscex的根本所在)。其实几年前就已经在Mono有类似的实现了。Mono的C#编译器mcs本身是由C#实现的,因此它直接就包含了编译器的完整功能,API好用与否暂且不论,但的确提供了这方面的能力,需要的同学完全可以自行获取。

Mono编译器功能暴露在Mono.CSharp类库中,而C#的交互式控制台便是“编译器即服务”顺理成章的衍生品。我想你一定遇到过这样的情况,例如,知道DateTime类型的ToString在接受某些参数会输出什么样的效果,却有些记不清,查文档自然会有答案但是太麻烦,其实一试便知。还有比如字符串解析,正则表达式匹配,临时计算等等。我见过很多同学在遇到这种情况的时候,都会直接把代码写在程序里,然后设置断点,然后运行程序观察执行效果。经验丰富一点的朋友则会时刻准备着一个控制台项目或是用Snippit Compiler,写点试验代码运行一下。不过,最理想的方式其实是使用F#,Scala,Ruby,Python等语言中都有的交互式控制台。例如以下便是在VS 2010中自带的F#交互式控制台:

F# REPL

我几乎天天都会用到F#交互式控制台,用来验证一些做法和猜想是否正确,确定之后再写成C#代码。我会F#,使用F#交互控制台自然不在话下。如果您懂得Python或Ruby,则使用IronPython或IronRuby的交互式控制台也是个不错的办法。但如果您只会用C#,那似乎就没辙了。幸运的是,Mono为C#程序员打开了这扇窗,我们也完全可以使用C#的交互式控制台来辅助工作,如下图:

C# REPL

在下一篇文章里,我们便来一起看一下,如何让Mono提供的C#交互式控制台运行在Windows和.NET下。这是个不错的例子,略有障碍,也没有过于复杂或取巧的地方,可以作为.NET程序员利用Mono组件的一个典型示例。

最后再附上上周日的演讲幻灯片,大伙后睹为快:

总之一句话:作为.NET程序员,如果您忽视或排斥Mono的话,损失的将会是你自己。

相关 [net 平台 控制台] 推荐:

在.NET平台下使用C#交互式控制台(上):简介

- forcey - 老赵点滴 - 追求编程之美
上周日在广州的珠三角技术沙龙上,我的演讲题目是“Mono之于.NET程序员”. Mono一直是我十分喜爱的产品,我也一直关注它的发展,总有很多人用各种方式对它进行FUD,甚至是.NET程序员自己. 这其实跟程序员使用盗版一样,自掘坟墓,是种无比愚蠢的行为. 在演讲中,我提到.NET程序员可以如何从Mono项目中得到帮助,现在便以C#交互式控制台为例,演示下在.NET平台下使用Mono项目的常见方式.

微软推出开源平台.NET Gadgeteer

- dydso - Solidot
微软推出了一个开源软件和开源硬件平台.NET Gadgeteer,但兼容.NET Gadgeteer的硬件价格不菲. .NET Gadgeteer是一套用于创造不同用途的小型电子设备的开源工具集,使用.NET Micro Framework和Visual Studio/Visual C# Express,结合硬件模块和.NET软件,让用户能在不十分了解硬件知识的情况下,在数小时内创造出智能电子设备,制造出快速原型设备,帮助教师设计新颖的交互教育仪器,帮助业余爱好者创造出想象中的事物.

分清“语言/规范”以及“平台/实现”,以及跨平台.NET开发

- 王雪松 - 博客园-老赵点滴 - 追求编程之美
在许多年前,“语言”就等同于“平台”,例如C,C++以及最早的Ruby和Python等等. 但是随着技术发展,出现了一些通用的平台,例如.NET和Java,逐渐这些平台上的语言也越来越多. 再后来,某些语言在不同平台上的实现也越来越多,事情也变得有些复杂. 技术在发展,但是从目前社区的讨论中,我发现许多朋友的观念还没有跟上.

Debugging .NET Core on Linux with LLDB | RayDBG

- -
The LLDB debugger is conceptually similar to the native Windows debugging tools in that it is a low level and command live driven debugger. Part of the reason the .NET Core team chose the LLDB debugger was for its extensibility points that allowed them to create the SOS plugin which can be used to debug .NET core applications.

Microsoft .NET Gadgeteer 简介及其它

- 王雪松 - 博客园-首页原创精华区
     Microsoft .NET Gadgeteer 为开发小型电子模块或嵌入式设备的用户,提供一个快速构建原型机的平台. 它结合了面向对象编程的优点,提供一系列电子模块,可以快速地用这些模块进行计算机辅助设计.      通过.NET Gadgeteer模块可以很容易的构建简单或复杂的设备.

Windows 8将Silverlight和.Net打入冷宫?

- Will - ITeye资讯频道
微软近期在D9和Computex 2011大会上演示了Windows 8,普通用户对于Windows 8的全新界面和触摸功能相比是欣喜不已,但是有那么一群人,却倍感沮丧和担忧. 他们就是Silverlight和.Net开发人员,Windows 8会采用什么样的开发平台呢. 是不是会将Silverlight和.Net打入冷宫.

Visual Studio 2012和.NET Framework 4.5发布

- - 博客 - 伯乐在线
摘要:好消息,微软负责Visual Studio部门的公司副总裁Jason Zander发表博客,宣布Visual Studio 2012和.NET Framework 4.5现在已经可以下载,同时提供MSDN订户、付费版本、试用版和免费Express版. 此外,他还列举了升级到Visual Studio 2012的十二大理由.

微软宣布将开源.NET

- - Solidot
微软宣布它计划在MIT许可证下开源.NET软件架构,源代码(项目页面目前只有文档)将托管在GitHub上. .NET架构目前只支持在Windows上运行,微软表示它计划让.NET跨平台支持OS X和Linux. 微软计划在下一个版本中开源整个.NET服务器堆栈,从 ASP.NET 5到通用语言运行库到基础类库.

说说.NET反编译工具

- - 标点符
自己都不会.NET,但是目前团队里都是使用的.NET开发,整理一些.NET相关的知识,以便和团队一起成长. .NET和先前我接触的PHP、Python不一样的是代码需要经过编译,很多提供到网站的组件都是编译过的,很难看到源代码. 所以造成了一部分反编译工具的流行. Reflector应该是最为熟知的.NET反编译工具,最早由微软员工Lutz Roeder编写并免费提供,它除了能将IL转换为C#或Visual Basic以外,Reflector还能够提供程序集中类及其成员的概要信息、提供查看程序集中IL的能力以及提供对第三方插件的支持.

Profiling a .NET Core Application on Linux | All Your Base Are Belong To Us

- -
In the same vein of  my previous post on analyzing core dumps of .NET Core applications on Linux, let’s take a look at what it takes to do some basic performance profiling.