Mono for .NET Developers
-
Upload
jeffz -
Category
Technology
-
view
8.858 -
download
0
Transcript of Mono for .NET Developers
Mono之于.NET程序员赵劼 - 2011.8
关于我• 赵劼 / 老赵 / Jeffrey Zhao / 赵姐夫
• 日写代码三百行,不辞长作程序员• 博客:http://blog.zhaojie.me/
• 微博:@老赵
• F#, JavaScript, Scala, C#, Python, .NET, Mono...
• 痛恨Java语言
什么是Mono?
Mono
• Mono是一个开源的,跨平台的CLI(ECMA 335)实现• C# + 运行时 + 基础类库• .NET是微软提供的另一个CLI实现
• 现由Xamarin公司维护并提供商业支持
• Mono与微软.NET在二进制层面兼容
• 许多人认为Mono是跨平台的.NET
Mono与.NET的跨平台• Microsoft .NET• PC平台:Windows 7,Windows Server等等• 移动设备:Win CE,Windows Phone等等• 其他:XBox等等
• Mono• 传统平台:Windows,Linux,OS X,Solaris等等• 移动设备:iOS,Android等等• 其他:PS3,Wii等等
多语言,多平台C#
VB.NETF#
JavaScriptJava (IKVM)
ScalaIronPythonIronRuby
Boo…
Mono
.NET
WindowsLinuxOS X
Windows PhoneiPhone / iPad
XBox 360Play Station
Wii…
Mono与游戏平台
http://tirania.org/blog/archive/2011/Mar-07.html
Mono十分适合作为内嵌的执行引擎
Game
Unity C++ EngineMono
Runtime
Graphics AudiosPhysics
Mono作为内嵌引擎• 大型游戏• SIMS 3
• Fusion Fall (为儿童设计的卡通MMO游戏)• 还有2个未公开的游戏
• 3个独立游戏公司
• 100多个iOS游戏 *
• 支持三大主机
* http://tirania.org/blog/archive/2009/Jan-07.html
Mono作为独立引擎 *
• 游戏开发观念逐渐产生变化• 安全环境 vs. 绝对性能• 优化热点 vs. 过早优化
• DeltaEngine:使用Mono + .NET实现的全平台游戏引擎
* http://tirania.org/blog/archive/2011/Mar-07.html
套件(Profile)• 套件:所支持功能的集合• Microsoft .NET• 客户端套件(Client Profile)及完整套件• Windows Phone等各种Silverlight套件• 其他
• Mono• 完整套件• iOS及Android等移动平台套件• 其他
Mono完整套件
• Mono 2.10
• 兼容C# 4,.NET 4运行时及部分类库
• 不提供WPF,WF,部分WCF
.NET程序员使用Mono
• 在.NET平台上编译Mono组件代码• 许多情况下也可以直接使用编译后的dll
• Mono也吸取了.NET平台大量项目• ASP.NET MVC 2 & 3:直接吸收• F#:直接吸收。微软同时招聘开发人员改进
Mono,使其更好地支持F#
演示
• Mono.CSharp
• Mono.Cecil
Mono于iOS及Android
谁在使用MonoTouch
Apple Featured
iCircuit is the premier iPad and iPhone app for designing
and experimenting with circuits. Its advanced
simulation engine can handle both analog and digital circuits and features realtime always-on analysis. It is the perfect
companion to students, hobbyists, and engineers.
London Bike Diggify *
* Why we chose MonoTouch to write the Diggify iPhone app
iCoolHunt Little GamerChild Timer
MonoTouch是什么
• 使用Mono开发iOS原生应用程序
• MonoDevelop + Interface Builder• IB生成xib文件,被转换成C#代码
• 完整调试支持
Mono与Java的策略• Java的跨平台策略• 二进制跨平台• 优点:一次编写,四处运行• 缺点:产品体验较差,难以利用平台特性
• Mono的跨平台策路• 源代码跨平台,并提供各平台原生绑定• 优点:充分利用平台特性,原生应用体验• 缺点:只能共享业务代码,如UI代码需要重写
Mono的JIT引擎
IL
Mono JIT
Native Code
Machine with Mono Runtime
但是……
• Apple协议要求• 禁止代码解释执行• 禁止共享类库
• 内核限制• 无法JIT编译
App with Mono Runtime
MonoTouch的AOT引擎IL
Mono AOT
Native Code
MonoTouch支持• MonoDevelop开发插件
• CocoaTouch.NET
• 完整的静态编译器• 支持现有代码特性• 反射• 泛型• LINQ
• …
CocoaTouch绑定
• MonoTouch命名空间
• MonoTouch.Xyz于CocoaTouch的Xyz框架对应
• 一对一类库对应• MonoTouch.UIKit.UILabel
• CocoaTouch的UIKit框架的UILabel类
强类型• Objective-C• 弱类性数组• NSArray返回值
• MonoTouch使用强类型• UIView[] Subviews { get; }
• NSArray *subviews;
• 使用智能提示探索代码
垃圾回收
• 自动回收:如传统.NET开发那样
• 手动回收:主动调用Dispose方法// MonoTouch每个类都实现了IDisposable接口using (var image = UIImage.FromFile("...")) { surface.DrawImage(image, 20, 20);}
应用程序尺寸
• Mono运行时和完整类库有几十M大,全部嵌入应用程序不可行
• MonoTouch Linker可以把不需要的类库剔出
• 最小程序尺寸4~5M
演示
• 使用Mono开发iOS原生应用程序
• 使用Mono开发Mac OS X原生应用程序
总结
• Mono是CLI的实现
• 在.NET程序中使用Mono代码
• 关注基于Mono移动开发
• 关注.NET / Mono项目
作为.NET程序员,忽视或排斥Mono是您自
己的损失
Q & A
谢谢