C#除了.NET编程外还有其他用途吗?

15

据我了解,虽然C#是由微软创建的,但它是一种可用于除.NET编程之外的其他事物的编程语言。例如,我可以创建一个C#编译器,以针对本地x86或其他处理器甚至JVM。我的理解是否错误?有人知道C#除了.NET还用于什么吗?

9个回答

6

C#被用于一个名为'Singularity'的实验性操作系统中,该操作系统从头开始使用托管级别编写。这是一个有趣的项目值得关注!

编辑:感谢Jörg W Mittag的评论 - Helios实际上是Singularity的修改形式,支持卫星内核。引用我现在正在阅读的论文 'Helios是一个旨在简化为异构平台编写、部署和调整应用程序任务的操作系统。Helios引入了卫星内核,它们跨不同架构和性能特征的CPU导出单一统一的OS抽象集合。卫星内核允许开发人员针对熟悉的操作系统API和抽象编写应用程序。'...有趣...

希望这可以帮助到您, 最好的问候, 汤姆。


1
嗯,没什么可以关注的了。该项目已经结束多年了,大部分研究人员现在都在为 Helios 工作(它基于 Singularity 并将其思想扩展到异构系统)。 - Jörg W Mittag

2
你说得对,C#确实可以用于其他方面。它是一种语言规范......如果你愿意花时间,你可以将其编译成任何你想要的东西,但这需要巨大的努力。

除了像jrcs3所说的Mono之外,我不知道还有什么其他用途,但希望Eric Lippert会加入讨论并从编译器的角度给出关于C#的看法。


2
C#本身是由ECMA规定的规范,它“指定了用C#编写的程序的形式并确定了其解释方式”,就像CLR一样。目前最流行的实现是由微软提供的C#.net。C#和CLR都是开放标准,这意味着任何人都可以自己实现它们,因此出现了Mono,这是一个适用于Mac/Linux的C#编译器。与之相比,Java只有Sun提供的实现,它不是开放标准,因此无法创建自己的实现。
来自维基百科:
Mono是“一个开源、跨平台的C#和CLR实现,与Microsoft.NET二进制兼容”。
"DotGNU是GNU项目的一部分,旨在为Microsoft的.NET Framework提供免费的软件替代品。"
"Dot Net Anywhere是一个针对嵌入式系统的.net CIL解释器。"

吹毛求疵:CLR 是微软的专有实现。规范称为 VES(虚拟执行系统)。 - Jörg W Mittag
7
此外,Java 并不只有一种实现。Sun 公司就有四种实现,Oracle 有一种,IBM 至少有两种,Microsoft 有/曾经有一种,Apache 有一种,RedHat 有一种,Apple 有一种,Azul 有一种,几乎每个手机制造商都有一种,Google 有一种,还有数十种开源和研究实现。 - Jörg W Mittag
你所说的 Google 实现是指 Android 上的那个吗?那不就是编译为非标准 JVM 的普通 Java 吗? - Benny Jobigan

1
据我所知,所有当前存在的 C# 实现都会生成 CIL 并在 .NET CLR 或兼容环境中运行,而我所知道的唯一替代 .NET CLR 的是 Mono。
换句话说,所有当前版本的 C# 都构建为在 .NET 或 Mono 中运行。
.NET 和 Mono 使用相同的“二进制文件”,因此实际上所有当前的 C# 编译器只有一个目标。

1

另一个使用领域是通过MonoTouch进行iPhone应用程序开发(我相信现在也包括iPad)。

MonoTouch是什么?

MonoTouch允许开发人员创建基于C#和.NET的应用程序,这些应用程序可以在苹果的iPhone和iPod Touch设备上运行,并利用iPhone API并重用已为.NET构建的代码和库以及现有技能。

粗略地说,它是这样的:

MonoTouch -> MonoDevelop/C# -> 编写iPhone应用程序 -> 编译为本机代码 -> iPhone应用程序。

相关链接:


它本质上并不是C#代码,因为它会被转换成Objective-C来编译... - t0mm13b
@tommieb75 是的,但它仍然符合OP的问题,并且不需要开发人员编写Objective-C。他们正在编写C#(甚至支持到一定程度的LINQ)。 - Ahmad Mageed
@tommieb75 - 请查看https://dev59.com/s3M_5IYBdhLWcg3wQQzw#1454068 - Marc Gravell

1
请注意Unity 3D也支持“C#脚本”,并且可以编译为Mac、Windows、Web、Wii和iPhone(因此也适用于iPad)。

1
值得一提的是:随着iPhone OS 4.0 SDK的最新发布,苹果公司已经禁止在iPhone OS设备系列上使用所有形式的交叉编译语言。 - whybird
1
记录一下:苹果曾试图这样做,但不得不撤回。从来没有因为这个原因拒绝过任何Mono应用程序进入App Store,现在这已经是古代历史了。 - Justin

0

你可以在Mono上编译C#程序。但那可能不算数。

Mono是Common Language Infrastructure (CLI)的另一种替代实现,可在Linux和其他各种操作系统上运行。正如其他地方所提到的,C#和CLI都是ECMA标准,任何有兴趣的人都可以实现它们。

Rotor是另一个非.NET实现。


我不太同意...Mono不是.NET。它是用C#编写的平台。 ;) - IAbstract

0

确实有工具可以将.NET程序集转换为独立的可执行文件或库,这样您就不需要让客户安装.NET框架。这也在一定程度上进一步保护了您的代码免受反向工程的侵害--您无法使用Reflector查看本地二进制文件中的.NET源代码。

例如,Remotesoft Salamander .NET Protector

但是,这并不是严格意义上的C#->本地;Salamander将MSIL转换为本地代码。

另一方面,至少有一个学术项目LLVM#正在使用LLVM制作C#->本地编译器。


一个开发者要价$1249...如果你是一位独立的程序员为了将项目上市而工作,这有点过于昂贵了。 - t0mm13b

0

如果你使用MonoTouch,你可以在iPod应用程序上使用它。


不仅仅是iPod,所有的iOS平台包括iPhone和iPad。 - Justin

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