[入门] 有人关注mono吗?

oldrev 2009-08-26
RednaxelaFX 写道
tomqyp 写道
oldrev 写道
JIT 优化的空间还很大,甚至可能超过完全静态编译的 native 代码,抛开速度不说,其实 VM 语言的主要缺点是内存占用比 C/C++ 大太多了。


为什么VM 语言内存占用大呢?

oldrev老大想说的可能是“GC语言的主要缺点是内存占用比C/C++大太多了”。GC要有效的工作,会需要比较大的“剩余空间”,特别是像copying-collector那样的。现在常用的GC算法主要是基于跟踪(tracing)的,这些算法都是在分配的空间越多(剩余空间越小)的时候效率越低……


GC是一方面,像 C# 和 java 纯 OO+GC 的语言带来的后果就是程序员被鼓励随手就 new Object,而不是像 C/C++ 一样很谨慎地对待堆分配。

再加上为支持反射带来的 metadata 之类,应该吃了不少内存。
RednaxelaFX 2009-08-26
oldrev 写道
GC是一方面,像 C# 和 java 纯 OO+GC 的语言带来的后果就是程序员被鼓励随手就 new Object,而不是像 C/C++ 一样很谨慎地对待堆分配。

再加上为支持反射带来的 metadata 之类,应该吃了不少内存。

嗯,使用习惯是一点。C#和Java之类的语言确实鼓励创建很多短命的小对象。
但在没有GC的条件下要处理复杂的对象图,又或者要判断对象的ownership的时候,事情就很麻烦

RTTI和反射也不是“VM语言”特有的。C++为了支持RTTI照样需要一些空间来保存元数据(例如说dynamic_cast<T>()的时候就会利用RTTI信息来检查)。而“VM语言”完全可以是非多态的静态类型的,在运行时完全不需要使用跟类型相关的元数据。JVM和CLI的设计是代表了主流,但不是全部……
codekitten 2009-08-26
但是事实上用JAVA或者C#写界面的确是很慢。。。。。。没看到广泛的应用
RednaxelaFX 2009-08-26
codekitten 写道
但是事实上用JAVA或者C#写界面的确是很慢。。。。。。没看到广泛的应用

嗯你看桌面上的飞信客户端……
codekitten 2009-08-26
RednaxelaFX 写道
codekitten 写道
但是事实上用JAVA或者C#写界面的确是很慢。。。。。。没看到广泛的应用

嗯你看桌面上的飞信客户端……


慢啊,所以换成libFetion了。。
night_stalker 2009-08-26
GUI 速度深有体会:
凡是用 C/C++ 写的 IDE,启动都是瞬发,凡是 java / C# 的,都有明显的 lag 和慢 ……

QtDesigner、code::block、VC2008(c++) 启动时间不到 1 秒。
VC2010(c#) / netbeans / eclipse 都要看一会 logo。

当然慢不一定是因为 VM 语言,还有可能是 IDE 自作多情乱扫文件 ……
codekitten 2009-08-26
night_stalker 写道
GUI 速度深有体会:
凡是用 C/C++ 写的 IDE,启动都是瞬发,凡是 java / C# 的,都有明显的 lag 和慢 ……

QtDesigner、code::block、VC2008(c++) 启动时间不到 1 秒。
VC2010(c#) / netbeans / eclipse 都要看一会 logo。

当然慢不一定是因为 VM 语言,还有可能是 IDE 自作多情乱扫文件 ……



其实QT也慢。。。。
flyingxu 2009-08-31
RednaxelaFX 写道
http://www.mono-project.com/AOT
这个链接应该有足够说明了……包括Mono的full AOT当前的限制,例如只能在AMD64或者ARM上使用(orz
于是我还没试过用Mono的AOT模式……因为对我来说这个必要性不大,而且我也没合适的机器试。AMD64的机器老爸倒是有,不过老爸不让我动他的机器 T T

设置这两个环境变量应该能看到Mono是否加载了AOT后的DLL吧:
MONO_LOG_MASK=aot
MONO_LOG_LEVEL=debug

如果在某个平台上使用--aot=full得到AOT的DLL后再--full-aot出错的话,那就是当前Mono的full AOT实现在那个平台上不行了。

开源项目就是要“scratch your own itch”,如果没人有这样的需求外加精力去实现缺失的功能的话,功能是不会神奇的出现的……

对mono的理解还是有点深度啊,我看了2天文档,得出和你一样的结论 

其他的回复,让我觉得有点空对空高谈阔论啊 好像有点看不懂, 菜鸟就是受欺负
flyingxu 2009-08-31
另外还有一点,好像大家关注的是程序执行的效率,已经扣到讨论c++执行时与c的效率的区别的层次了,当然是理论上。

不过我觉得作为一个developer,还应该关心开发的效率。我想对于isv应用,企业应用,c#比c++快很多吧。这种成本大家有没有考虑呢?好的程序员将近1天1000块钱,半个小时就超过50块钱了,你让他多花几天时间,这个钱就不得了了。

最开始关注d,是因为觉得他在不牺牲太多运行效率的前提下,能大幅提高开发效率。我想大家也是一样。
但关注这么久,发现d不再是我报以幻想的对象了,或者已经慢慢说服自己对d的期望只是幻想了。
所以偶然看到mono,c#(包括winform 2.0,部分c# 3.0语法)的开发效率,aot的发布/启动/执行效率,不被反编译,还有什么怨言?

如果按统一标准,说mono(系统/环境)不成熟,那么d(系统/环境)简直就是没法用。

不过,就像RednaxelaFX 说的,就是aot tmd暂时不能在Windows上用! 就差那么一步啊
codekitten 2009-09-02
D的空间的确比较窄。。。特别是如果跟别人拼应用级的话。。。
Global site tag (gtag.js) - Google Analytics