12

.NET CLR 是否可以支持 Objective-C?是否有任何理由(从法律或实施)的角度来看这是不可能的?

本着跨平台应用程序开发的精神,如果能够在 Windows 机器上编写和运行 Objective-C 应用程序,那就太好了。至少我认为会。

4

7 回答 7

6

Objective-C 是 C 的严格超集。因此,它有很多特性,比如指针,在 .NET 上的转换效果很差。当然,在实践中,大多数 Objective-C 程序的编写方式可能是它们也可以针对更严格定义的语言规范版本进行编译,该版本限制性更强,但可以翻译成安全的代码。

假设是这种情况,Objective-C 的方法调度部分自然适合DLR的动态功能。我实际上已经考虑过创建这样一个端口。

于 2008-10-29T04:10:31.847 回答
3

在 CLR 之上托管 Objective-C 应该没有问题。您可能可以在 DLR 之上实现运行时,或者在最坏的情况下实现您自己的。这仍然与为 CLR 编译任何实质性的 Objective-C 代码库有很大不同,因为您可能感兴趣的绝大多数 Objective-C 代码都依赖于 Apple 的框架。

最后,您将需要重新实现它们,或者将 Objective-C 桥接到 .NET 框架,这将允许您编写 Objective-C 代码,但它不会使用与任何现有 Objective-C 兼容的框架代码。您可能想看看Cocotron,它是一个交叉编译环境,允许 Mac 开发人员将一些 Objective-C 应用程序迁移到 Windows。这应该为 Windows 提供了一个相当好的 Objective-C 运行时示例,并且可能提供一些必要的框架,以便在您启动一个可以针对 .NET 的编译器后使合理数量的 Objective-C 代码可用。

于 2008-10-29T04:36:56.957 回答
3

如果您的意思是能够使用 Objective-C 语法编写 .NET 应用程序并且能够使用来自 Foundation 框架(例如 NSArray)的数据结构,那么这很容易完成(尽管很长)。这与添加对任何语言的支持没有什么不同。

然而,在 Mac 上使 Objective-C 开发变得出色的不是语法,而是 Apple 提供的其他 API,例如:

除了这些更难实现的 API 之外,您还必须考虑诸如Bindings支持和Key Value Observing之类的事情,这在 CLR 中实现起来要困难得多。

于 2008-10-29T11:33:00.317 回答
1

不,真的没有。.NET 编译为IL(或 CIL 或 MSIL),它基本上是虚拟机的机器代码。你可以像在汇编中那样在 IL 中编程(不是我见过有人这样做)。如果你有经验、知识和进取心,那么编写一个 Objective-C 到 IL 编译器是没有问题的。见鬼,.NET 甚至还有函数式编程语言 (F#)。除了消息传递功能和库之外,它与 C#、VB.NET 等没有太大区别。

多么棒的主意!Objective-C# 之类的。

您可以从这里开始:Microsoft IL 上的维基百科

于 2008-10-29T03:46:12.690 回答
1

正如其他人所说,是的,这是可能的。这是否是一个好主意(尤其是“本着跨平台开发的精神”)是另一回事。

同样,正如已经指出的那样,没有它的库,该语言并不多。由于 Objective-C 现在几乎只在 Mac 和 iPhone 环境中使用,并且如果它们是您的目标,能够在 Windows 上编写代码并不会为您带来太多好处。

此外,您已经可以在 Windows 上编写 Objective-C - 我相信通常与Xcode一起使用的GCC也将在 Windows 上编译 Objective-C 以及GNUstep

仅剩下在 .NET 上运行 Objective-C 是否有优势?

Objective-C的一些不错的特性在典型的 .NET 语言中是没有的。就个人而言,我非常喜欢参数的方法名称标签。

但是,我认为这不足以让它值得带过来。大多数 Objective-C 擅长的事情,C# 都有自己的解决方案。现在,如果他们愿意拒绝实现命名参数...

于 2008-10-29T12:44:59.420 回答
1

使用NObjective桥,您可以在 C# 中使用现有的 Objective-C 类或创建新的类。

此外,在Visual Studio 2010和 .NET 4最终发布之后,我将为 NObjective 添加 DLR 支持。

于 2010-01-02T13:37:50.843 回答
0

.Net的Objective-JCappuccino,而不是 Objective-C 和Cocoa呢?Objective-J 与 Objective-C 一样吸引人,然而,Objective-J 比 Objective-C 更接近 C#(没有指针、垃圾回收等)

我最近在 Cappuccino 开发者论坛上询问了这个问题,他们向我介绍了 Jurassic(一个用于 .NET 的 JavaScript 编译器)。他们还说卡布奇诺在 IronJS 上运行良好。因此,看起来组件已经存在(Objective-J → JavaScript → .NET),但必须构建将它们连接在一起的桥梁。

于 2011-01-22T21:36:40.263 回答