【发布时间】:2010-02-01 01:09:20
【问题描述】:
据我了解,虽然 C# 是由 Microsoft 创建的,但它是一种编程语言,可用于或实现除 .NET 编程之外的其他事物。例如,我可以为 C# 创建一个编译器,以针对本机 x86 或其他处理器甚至 JVM。我的理解不正确吗?有谁知道 C# 是否用于 .NET 以外的任何东西?
【问题讨论】:
标签: c# compiler-construction programming-languages
据我了解,虽然 C# 是由 Microsoft 创建的,但它是一种编程语言,可用于或实现除 .NET 编程之外的其他事物。例如,我可以为 C# 创建一个编译器,以针对本机 x86 或其他处理器甚至 JVM。我的理解不正确吗?有谁知道 C# 是否用于 .NET 以外的任何东西?
【问题讨论】:
标签: c# compiler-construction programming-languages
C# 用于名为“Singularity”的实验性操作系统,该操作系统从头开始以托管级别编写。一个值得关注的有趣项目!
编辑:感谢 Jörg W Mittag 的评论 - Helios 实际上是 Singularity 的一种修改形式,以支持卫星内核,引用自我现在正在阅读的论文'Helios 是一个操作系统,旨在简化异构平台应用程序的编写、部署和调整任务。 Helios 引入了卫星内核,它在具有不同架构和性能特征的 CPU 之间导出一组统一的操作系统抽象。卫星内核允许开发人员针对熟悉的操作系统 API 和抽象编写应用程序。'...有趣...
希望这会有所帮助, 最好的祝福, 汤姆。
【讨论】:
你是对的,它可以用于其他事情。这是一个语言规范……如果你花时间,你可以把它编译成你喜欢的任何东西,但这将是一个巨大的努力。
我不知道除了 jrcs3 所说的 Mono 之外的任何其他用途,但希望 Eric Lippert 能够加入并为您提供关于 C# 的编译器观点
【讨论】:
C# itself is a specification specified by the ECMA 表示“指定形式并建立对用 C# 编程语言编写的程序的解释。”和the CLR 一样。目前最流行的这些实现由 Microsoft 提供,即您所知道的 C#.net。 C# 和 CLR 是开放标准,这意味着任何人都可以自己实现它们,因此形成了 mono,一个用于 mac/linux 的 C# 编译器。将此与 java 进行比较,后者的唯一实现是由 sun 提供的。它不是一个开放标准,因此您无法创建自己的实现。
来自wikipedia:
Mono "一个开源的、跨平台的 C# 和与 Microsoft.NET 二进制兼容的 CLR 的实现"
DotGNU“是 GNU 项目的一部分,旨在为 Microsoft 的 .NET Framework 提供免费软件替代品”
Dot Net Anywhere 是一个针对嵌入式系统的 .net CIL 解释器。
【讨论】:
据我所知,所有当前存在的 C# 实现都构建为 CIL 并在 .NET CLR 或兼容环境中运行,而我所知道的 .NET CLR 的唯一替代方案是 Mono。
换句话说,所有当前版本的 C# 构建都可以在 .NET 或 Mono 中运行。
.NET 和 Mono 使用相同的“二进制文件”,因此所有当前的 C# 编译器实际上只有一个目标。
【讨论】:
另一个使用领域是通过 MonoTouch 开发 iPhone 应用程序(我现在也相信 iPad)。
什么是 MonoTouch?
MonoTouch 允许开发人员创建在 Apple 的 iPhone 和 Apple 的 iPod Touch 设备上运行的基于 C# 和 .NET 的应用程序,同时利用 iPhone API 并重用为 .NET 构建的代码和库以及现有的技能。
大致上是这样的:
MonoTouch -> MonoDevelop/C# -> 编写 iPhone 应用程序 -> 编译为本机代码 -> iPhone 应用程序。
相关链接:
【讨论】:
请注意,Unity 3D 也允许“C# Scripts”,并编译为目标 Mac、Windows、Web、Wii 和 iPhone(以及 iPad)。
【讨论】:
确实有一些工具可以将 .NET 程序集转换为独立的可执行文件或库,因此您不需要您的客户拥有 .NET 框架。这还可以在一定程度上进一步保护您的代码免受逆向工程的影响——您不能使用 Reflector 在本机二进制文件上查看 .NET 源代码。
例如,参见Remotesoft Salamander .NET Protector。
但是,这并不是严格意义上的 C# -> 本机; Salamander 将 MSIL 转换为本机代码。
另一方面,at least one academic project 使用 LLVM 制作 C# -> 本机编译器,称为 LLVM#。
【讨论】:
您可以在Mono 上编译 C# 程序。但这可能不算数。
Mono 是在 Linux 和各种其他操作系统上运行的通用语言基础架构 (CLI) 的替代实现。如其他地方所述,C# 和 CLI 都是 ECMA 标准,任何愿意这样做的人都可以实施。
Rotor 是另一个非 .NET 实现。
【讨论】:
如果您使用 MonoTouch,您可以在 iPod 应用程序上使用它。
【讨论】: