+ All Categories
Home > Technology > Mono for .NET Developers

Mono for .NET Developers

Date post: 10-May-2015
Category:
Upload: jeffz
View: 8,856 times
Download: 0 times
Share this document with a friend
Popular Tags:
33
Mono之于.NET程序员 赵劼 - 2011.8
Transcript
Page 1: Mono for .NET Developers

Mono之于.NET程序员赵劼 - 2011.8

Page 2: Mono for .NET Developers

关于我• 赵劼 / 老赵 / Jeffrey Zhao / 赵姐夫

• 日写代码三百行,不辞长作程序员• 博客:http://blog.zhaojie.me/

• 微博:@老赵

• F#, JavaScript, Scala, C#, Python, .NET, Mono...

• 痛恨Java语言

Page 3: Mono for .NET Developers

什么是Mono?

Page 4: Mono for .NET Developers

Mono

• Mono是一个开源的,跨平台的CLI(ECMA 335)实现• C# + 运行时 + 基础类库• .NET是微软提供的另一个CLI实现

• 现由Xamarin公司维护并提供商业支持

• Mono与微软.NET在二进制层面兼容

• 许多人认为Mono是跨平台的.NET

Page 5: Mono for .NET Developers

Mono与.NET的跨平台• Microsoft .NET• PC平台:Windows 7,Windows Server等等• 移动设备:Win CE,Windows Phone等等• 其他:XBox等等

• Mono• 传统平台:Windows,Linux,OS X,Solaris等等• 移动设备:iOS,Android等等• 其他:PS3,Wii等等

Page 6: Mono for .NET Developers

多语言,多平台C#

VB.NETF#

JavaScriptJava (IKVM)

ScalaIronPythonIronRuby

Boo…

Mono

.NET

WindowsLinuxOS X

Windows PhoneiPhone / iPad

XBox 360Play Station

Wii…

Page 7: Mono for .NET Developers

Mono与游戏平台

http://tirania.org/blog/archive/2011/Mar-07.html

Mono十分适合作为内嵌的执行引擎

Game

Unity C++ EngineMono

Runtime

Graphics AudiosPhysics

Page 8: Mono for .NET Developers

Mono作为内嵌引擎• 大型游戏• SIMS 3

• Fusion Fall (为儿童设计的卡通MMO游戏)• 还有2个未公开的游戏

• 3个独立游戏公司

• 100多个iOS游戏 *

• 支持三大主机

* http://tirania.org/blog/archive/2009/Jan-07.html

Page 9: Mono for .NET Developers

Mono作为独立引擎 *

• 游戏开发观念逐渐产生变化• 安全环境 vs. 绝对性能• 优化热点 vs. 过早优化

• DeltaEngine:使用Mono + .NET实现的全平台游戏引擎

* http://tirania.org/blog/archive/2011/Mar-07.html

Page 10: Mono for .NET Developers

套件(Profile)• 套件:所支持功能的集合• Microsoft .NET• 客户端套件(Client Profile)及完整套件• Windows Phone等各种Silverlight套件• 其他

• Mono• 完整套件• iOS及Android等移动平台套件• 其他

Page 11: Mono for .NET Developers

Mono完整套件

• Mono 2.10

• 兼容C# 4,.NET 4运行时及部分类库

• 不提供WPF,WF,部分WCF

Page 12: Mono for .NET Developers

.NET程序员使用Mono

• 在.NET平台上编译Mono组件代码• 许多情况下也可以直接使用编译后的dll

• Mono也吸取了.NET平台大量项目• ASP.NET MVC 2 & 3:直接吸收• F#:直接吸收。微软同时招聘开发人员改进

Mono,使其更好地支持F#

Page 13: Mono for .NET Developers

演示

• Mono.CSharp

• Mono.Cecil

Page 14: Mono for .NET Developers

Mono于iOS及Android

Page 15: Mono for .NET Developers

谁在使用MonoTouch

Page 16: Mono for .NET Developers

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.

Page 17: Mono for .NET Developers

London Bike Diggify *

* Why we chose MonoTouch to write the Diggify iPhone app

Page 18: Mono for .NET Developers

iCoolHunt Little GamerChild Timer

Page 19: Mono for .NET Developers

MonoTouch是什么

• 使用Mono开发iOS原生应用程序

• MonoDevelop + Interface Builder• IB生成xib文件,被转换成C#代码

• 完整调试支持

Page 20: Mono for .NET Developers

Mono与Java的策略• Java的跨平台策略• 二进制跨平台• 优点:一次编写,四处运行• 缺点:产品体验较差,难以利用平台特性

• Mono的跨平台策路• 源代码跨平台,并提供各平台原生绑定• 优点:充分利用平台特性,原生应用体验• 缺点:只能共享业务代码,如UI代码需要重写

Page 21: Mono for .NET Developers

Mono的JIT引擎

IL

Mono JIT

Native Code

Machine with Mono Runtime

Page 22: Mono for .NET Developers

但是……

• Apple协议要求• 禁止代码解释执行• 禁止共享类库

• 内核限制• 无法JIT编译

Page 23: Mono for .NET Developers

App with Mono Runtime

MonoTouch的AOT引擎IL

Mono AOT

Native Code

Page 24: Mono for .NET Developers

MonoTouch支持• MonoDevelop开发插件

• CocoaTouch.NET

• 完整的静态编译器• 支持现有代码特性• 反射• 泛型• LINQ

• …

Page 25: Mono for .NET Developers

CocoaTouch绑定

• MonoTouch命名空间

• MonoTouch.Xyz于CocoaTouch的Xyz框架对应

• 一对一类库对应• MonoTouch.UIKit.UILabel

• CocoaTouch的UIKit框架的UILabel类

Page 26: Mono for .NET Developers

强类型• Objective-C• 弱类性数组• NSArray返回值

• MonoTouch使用强类型• UIView[] Subviews { get; }

• NSArray *subviews;

• 使用智能提示探索代码

Page 27: Mono for .NET Developers

垃圾回收

• 自动回收:如传统.NET开发那样

• 手动回收:主动调用Dispose方法// MonoTouch每个类都实现了IDisposable接口using (var image = UIImage.FromFile("...")) { surface.DrawImage(image, 20, 20);}

Page 28: Mono for .NET Developers

应用程序尺寸

• Mono运行时和完整类库有几十M大,全部嵌入应用程序不可行

• MonoTouch Linker可以把不需要的类库剔出

• 最小程序尺寸4~5M

Page 29: Mono for .NET Developers

演示

• 使用Mono开发iOS原生应用程序

• 使用Mono开发Mac OS X原生应用程序

Page 30: Mono for .NET Developers

总结

• Mono是CLI的实现

• 在.NET程序中使用Mono代码

• 关注基于Mono移动开发

• 关注.NET / Mono项目

Page 31: Mono for .NET Developers

作为.NET程序员,忽视或排斥Mono是您自

己的损失

Page 32: Mono for .NET Developers

Q & A

Page 33: Mono for .NET Developers

谢谢


Recommended