【发布时间】:2008-10-29 03:38:56
【问题描述】:
.NET CLR 是否可以支持 Objective-C?是否有任何理由(从法律或实施的角度)为什么这不可能?
本着跨平台应用程序开发的精神,如果能够在 Windows 机器上编写和运行 Objective-C 应用程序,那就太好了。至少我认为会。
【问题讨论】:
标签: .net objective-c clr
.NET CLR 是否可以支持 Objective-C?是否有任何理由(从法律或实施的角度)为什么这不可能?
本着跨平台应用程序开发的精神,如果能够在 Windows 机器上编写和运行 Objective-C 应用程序,那就太好了。至少我认为会。
【问题讨论】:
标签: .net objective-c clr
Objective-C 是 C 的严格超集。因此,它有很多特性,比如指针,在 .NET 上的转换效果很差。当然,在实践中,大多数 Objective-C 程序的编写方式可能是,它们也可以针对更严格定义的语言规范版本进行编译,该版本限制性更强,但可以翻译成安全的代码。
假设是这种情况,Objective-C 的方法调度部分自然适合DLR 的动态功能。我实际上已经考虑过创建这样一个端口。
【讨论】:
如果您的意思是能够使用 Objective-C 语法编写 .NET 应用程序并且能够使用来自 Foundation 框架(例如 NSArray)的数据结构,那么这很容易完成(尽管很长)。这与添加对任何语言的支持没有什么不同。
然而,使 Objective-C 开发在 Mac 上出色的不是语法,而是 Apple 提供的其他 API,例如:
除了这些更难实现的 API 之外,您还必须考虑诸如 Bindings 支持和 Key Value Observing 之类的事情,这在 CLR 中实现起来要困难得多。
【讨论】:
在 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 代码可用。
【讨论】:
不,真的没有。 .NET 编译为IL(或 CIL 或 MSIL),这基本上是虚拟机的机器代码。你可以像在汇编中那样在 IL 中编程(不是我见过有人这样做)。如果你有经验、知识和进取心,那么编写一个 Objective-C 到 IL 编译器是没有问题的。见鬼,.NET 甚至还有 functional programming languages (F#)。除了消息传递功能和库之外,它与 C#、VB.NET 等没有太大区别。
真是个好主意! Objective-C# 之类的。
您可以从这里开始:Wikipedia on Microsoft's IL
【讨论】:
正如其他人所说,是的,这是可能的。这是否是一个好主意(尤其是“本着跨平台开发的精神”)是另一回事。
同样,如前所述,没有它的库,该语言并不多。由于现在 Objective-C 几乎只在 Mac 和 iPhone 环境中使用,如果它们是您的目标,那么能够在 Windows 上编写代码并不会给您带来太多收益。
此外,您已经可以在 Windows 上编写 Objective-C - 我相信通常与 Xcode 一起使用的 GCC 也可以在 Windows 上编译 Objective-C 以及 GNUstep。
仅剩下在 .NET 上运行 Objective-C 是否有优势?
Objective-C 的一些不错的特性在典型的 .NET 语言中是没有的。个人非常喜欢参数的方法名标注。
但是,我认为这还不够值得把它带过来。大多数 Objective-C 擅长的事情,C# 都有自己的解决方案。现在,如果他们愿意拒绝实现命名参数...
【讨论】:
使用NObjective 桥,您可以在 C# 中使用现有的 Objective-C 类或创建新的类。
另外,在 Visual Studio 2010 和 .NET 4 的最终发布之后,我将添加对 NObjective 的 DLR 支持。
【讨论】:
.Net 的 Objective-J 和 Cappuccino 而不是 Objective-C 和 Cocoa 呢? Objective-J 和 Objective-C 一样吸引人,然而,Objective-J 比 Objective-C 更接近 C#(没有指针、垃圾回收等)
我最近在 Cappuccino 开发者论坛上询问了这个问题,他们向我介绍了 Jurassic(一种用于 .NET 的 JavaScript 编译器)。他们还说卡布奇诺在 IronJS 上运行良好。因此,看起来组件已经存在(Objective-J → JavaScript → .NET),但必须构建将它们连接在一起的桥梁。
【讨论】: