为什么Mono源代码大多是C#?

10

我第一次查看了Mono的源代码,本以为会看到一堆C或C++代码,结果发现有26,192个.cs文件和7个.cpp文件。

虽然我并不完全惊讶,但这让我想起了一个一直在我脑海中的问题:

一个项目是如何最终以这种“自身”的方式编写的?

是早期版本的Mono更多地使用C/C++吗?还是有初始努力创建某种机器编码编译器……

这里的“技巧”是什么?


可能是引导语言的重复问题。 - sarnold
1
如果你对Mono印象深刻,那么你应该看看Singularity。它是一个几乎完全用C#编写的操作系统,只有一小部分用汇编语言编写。 - Michael Brown
3个回答

10

Mono的编译器是用C#编写的。您可能希望阅读有关编译器引导的内容。


4
Mono最初使用Microsoft的C#编译器解决了鸡生蛋问题,现在它使用自身的二进制文件来编译自身。 - jpobst

2
你应该寻找.c文件,而不是.cpp文件:mono运行时是用C编写的,而不是C ++。

0

我认为重要的是要记住,Mono既是虚拟机运行时(JIT编译器、垃圾回收器等),也是在此框架上运行的类库集合(System.Linq命名空间、XML解析器等)。

你看到的大多数.cs文件都是类库的一部分。这些基本上是像你自己的C#代码一样运行的C#代码(有一些例外,但基本上对于每个人来说重新发明和重新分发轮子没有意义,因此这些是C#“基础”类库)。这就是为什么如果机器上已经安装了Mono,你可以下载复杂的Mono程序作为如此小的文件大小。

对于Mono,JIT、运行时和垃圾回收器大部分是用C/C++编写的,正如你所期望的那样。如果你遇到低级错误,通常会看到GNU调试工具转储,就像在C中一样,只是有更多有用的信息。Mono框架非常擅长将任何C#代码转换为可以在任何地方运行的CIL代码,并使用最适合确保代码在任何地方运行的工具集(在这种情况下是Linux上的C编译器运行时)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接