Что потребуется, чтобы добавить поддержку Objective-C в среду выполнения Common Language.NET?

Возможно ли, что .NET CLR поддерживает Objective-C? Существуют ли какие-либо причины (с правовой или реалистичной), почему это невозможно?

В духе кросс-платформенной разработки приложений было бы неплохо иметь возможность писать и запускать приложения Objective-c на машинах Windows. По крайней мере, я думаю, что это будет.

Ответы

Ответ 1

Objective-C является строгим надмножеством C. Как таковой, он получил множество функций, таких как указатели, которые плохо переводятся на .NET. Конечно, может быть, что на практике большинство программ Objective-C написаны таким образом, что они также будут компилироваться против более строго определенной версии спецификации языка, которая была бы более ограничительной, но могла бы быть переведена в безопасную код.

Предполагая, что это так, часть отправки метода Objective-C является естественным подходом для динамических возможностей DLR. Я действительно думал о создании такого порта.

Ответ 2

Не должно быть проблем с хостингом Objective C ontop CLR. Вы, вероятно, можете реализовать runtime ontop DLR, или в худшем случае реализовать свои собственные. Это по-прежнему существенно отличается от компиляции любых существенных базовых баз данных Objective C для CLR, поскольку подавляющее большинство кода Objective C, которое, вероятно, вас интересует, зависит от каркасов Apple.

В конце вам потребуется либо выполнить их переопределение, либо переместить объект Objective C в рамки .NET, что позволит вам написать Objective C-код, но он не будет использовать фреймворк, совместимый с любым существующим кодом Objective C, Вы можете взглянуть на Cocotron, который является средой кросс-компиляции, которая позволяет разработчикам Mac перемещать некоторые приложения Objective C в Windows. Это должно обеспечить достаточно хороший пример среды выполнения Objective C для Windows, а также потенциально предоставить несколько фреймворков, необходимых для создания разумного количества кода Objective C, который можно использовать, когда вы создадите компилятор, который может ориентироваться на .NET.

Ответ 3

Если вы имеете в виду возможность писать .NET-приложения с использованием синтаксиса Objective-C и возможность использовать структуры данных из фреймворков Foundation (например, NSArray), это тривиально (хотя и длительное). Это ничем не отличается от добавления поддержки для любого языка.

Однако то, что делает разработку Objective-C отличной на Mac, не является синтаксисом, это другой API, который Apple предоставляет, например:

В дополнение к этим API, которые было бы намного сложнее реализовать, вам также нужно подумать о таких вещах, как Bindings поддержка и Key Value Observing, который будет намного сложнее реализовать в среде CLR.

Ответ 4

Нет, на самом деле нет..NET компилируется в IL (или CIL или MSIL), который является главным образом машинным кодом для виртуальной машины. Вы можете программировать в IL, как в сборке (не то, что я видел, как кто-то это делает). Если бы у вас был опыт, знания и соображения, не было бы проблем писать компилятор Objective-C для IL. Черт, есть даже языки функционального программирования (F #) для .NET. Помимо возможностей обмена сообщениями и библиотек, он не слишком отличается от С#, VB.NET и т.д.

Какая удивительная идея! Objective-C # или некоторые такие.

Здесь вы можете начать: Wikiepedia на Microsoft IL.

Ответ 5

Как говорили другие, да, возможно. Является ли это хорошей идеей (особенно в духе кросс-платформенного развития), является другим вопросом. Опять же, как уже отмечалось, язык не сильно отличается от его библиотек. Поскольку Objective C теперь используется почти исключительно в контексте Mac/iPhone, возможность писать код в нем на Windows не собирается покупать вас много, если они являются вашими целями.

Кроме того, вы можете писать Objective C на Windows уже - я считаю, что gcc, который обычно используется с XCode, будет компилировать Obj C на Windows тоже, а также GnuStep.

Что просто выходит, есть ли преимущество для запуска Objective C поверх .Net? Есть некоторые интересные функции Objective C, которые не найдены на ваших типичных языках .Net. Лично мне очень нравится обозначение параметров имени метода. Однако я не думаю, что это достаточно, чтобы сделать все возможное, чтобы это осуществить. Большинство вещей, на которые нацелен Objective C, у С# есть собственные решения. Теперь, если бы они отказались от реализации именованных аргументов...

Ответ 6

Используя NObjective bridge, вы можете работать с существующими классами Objective-C на С# или создавать новые. Также после финальной версии "Visual Studio 2010" и ".NET 4" я добавлю поддержку DLR для NObjective.

Ответ 7

Как насчет Objective-J и Cappuccino для .Net, а не Objective-C и Cocoa? Objective-J столь же привлекателен, как ObjC, однако ObjJ ближе к С#, чем ObjC (без указателей, gc и т.д.)

Недавно я спросил об этом на форуме разработчиков Cappuccino, и они указали мне на Jurassic (компилятор Javascript для .Net). Они также сказали, что Cappuccino отлично работает на IronJS. Итак, похоже, что компоненты есть (ObjJ → Javascript → .Net), но мост, соединяющий их вместе, должен быть построен.

Кто-нибудь еще видит в этом значение?