2008-10-29 4 views
13

Est-il possible que .NET CLR supporte Objective-C? Y a-t-il des raisons (d'un point de vue juridique ou d'implémentation) pour lesquelles cela ne serait pas possible?Que faudra-t-il pour ajouter le support d'Objective-C au Common Language Runtime .NET?

Dans l'esprit du développement d'applications multiplateformes, il serait intéressant de pouvoir écrire et exécuter des applications Objective-c sur des machines Windows. Au moins, je pense que ce serait le cas.

Répondre

1

Non, il n'y en a pas vraiment. .NET compile en IL (ou CIL ou MSIL) qui est essentiellement un code machine pour une machine virtuelle. Vous pouvez programmer en IL comme vous le faites en assemblée (pas que j'ai vu quelqu'un le faire). Si vous aviez l'expérience, la connaissance et la connaissance, il n'y aurait aucun problème à écrire un compilateur Objective-C vers IL. Enfer, il y a même functional programming languages (F#) pour .NET. Outre les capacités de messagerie et les bibliothèques, il n'est pas très différent de C#, VB.NET, etc.

Quelle idée géniale! Objective-C# ou une telle.

est ici où vous pouvez commencer: Wikiepedia on Microsoft's IL.

6

Objective-C est un surensemble stricte de C. En tant que tel, il a beaucoup de fonctionnalités comme des pointeurs qui se traduisent mal sur .NET. Bien sûr, il se peut que, dans la pratique, la plupart des programmes Objective-C soient écrits de telle façon qu'ils compileraient aussi une version plus stricte de la spécification de la langue qui était plus restrictive mais pourrait être traduite en code. En supposant que ce soit le cas, la méthode d'envoi d'une partie de Objective-C est un ajustement naturel pour les capacités dynamiques de DLR. J'ai effectivement envisagé de créer un tel port.

+0

Est-ce que C++ peut être compilé en .NET bytecode? Si c'est le cas, il devrait être possible d'écrire un compilateur Objective-C pour .NET. (Je ne suis pas trop familier avec .NET, cependant, je pense que vous pouvez compiler C++ pour .NET, mais compile-t-il réellement au bytecode .NET ou fait-il autre chose?) – mipadi

+0

Non, le C++ arbitraire ne peut pas être compilé à IL, même si un sous-ensemble étrange peut être. C'est la source de mon commentaire. :) –

+0

Droite - l'une des principales caractéristiques du code .Net "sûr" est le manque de support pour les pointeurs (nous obtenons des références à la place) et, en particulier, l'arithmétique du pointeur. Objective-C étant un surensemble de C signifie qu'il prend en charge l'arithmétique du pointeur, et en tant que tel, toutes les applications qui utilisent cette fonctionnalité de langage seront presque impossibles à convertir en code CLR géré. – Dathan

4

Il ne devrait pas y avoir de problèmes d'hébergement de l'Objective C du CLR. Vous pouvez probablement implémenter l'ontop du runtime du DLR ou, dans le pire des cas, implémenter le vôtre. Cela est encore très différent de la compilation de bases substantielles de code Objective C pour le CLR, car la grande majorité du code Objective C qui vous intéresse probablement dépend des frameworks d'Apple. En fin de compte, vous devrez soit les réimplémenter, soit relier l'Objective C aux frameworks .NET, ce qui vous permettrait d'écrire du code Objective C, mais il n'utiliserait pas un framework compatible avec un Objective C existant code. Vous pouvez jeter un oeil à Cocotron qui est un environnement de compilation croisée qui permet aux développeurs Mac de déplacer certaines applications Objective C vers Windows. Cela devrait fournir un exemple raisonnablement bon d'un runtime Objective C pour Windows, ainsi que fournir potentiellement quelques frameworks nécessaires pour rendre une quantité raisonnable de code Objective C utilisable une fois que vous avez affiché un compilateur qui peut cibler .NET

3

Si vous voulez pouvoir écrire des applications .NET en utilisant la syntaxe Objective-C et être capable d'utiliser les structures de données à partir des frameworks Foundation (comme NSArray), c'est trivial (quoique long) à accomplir. Ce ne serait pas différent d'ajouter un support pour n'importe quelle langue.

Cependant, ce qui rend le développement Objective-C grand sur le Mac n'est pas la syntaxe, ce sont les autres d'API fourni par Apple comme:

En plus de ces API ce qui serait beaucoup plus difficile à mettre en œuvre, vous devez également penser à des choses comme Bindings et Key Value Observing qui serait beaucoup plus difficile à implémenter dans le CLR.

+0

concernant le dernier paragraphe, j'espère que ce serait un wrapper Cocoa-like sur le système de liaison de données de WPF et INotifyPropertyChanged. – Jimmy

1

Comme d'autres l'ont dit, oui c'est possible. Que ce soit une bonne idée (en particulier "dans l'esprit du développement multiplateforme") est une autre affaire. Encore une fois, comme cela a été noté, la langue n'est pas beaucoup sans ses bibliothèques. Puisque Objective C est maintenant utilisé presque exclusivement dans un contexte Mac/iPhone, être capable d'y écrire du code sur Windows ne vous achètera pas beaucoup si ce sont vos cibles.

En outre, vous pouvez déjà écrire Objective C sous Windows - je crois que gcc, qui est généralement utilisé avec XCode, compilera également Obj C sur Windows, ainsi que GnuStep.

Qui se contente de savoir s'il est avantageux d'utiliser Objective C sur .Net? Il sont quelques fonctionnalités intéressantes d'Objective C qui ne se trouvent pas dans vos langages .Net typiques. Personnellement, j'aime beaucoup le nom de la méthode d'étiquetage des paramètres. Cependant, je ne pense pas que ce soit suffisant pour que ça vaille la peine de le ramener. La plupart des choses que l'objectif C est bon, C# a ses propres solutions. Maintenant, si seulement ils refusaient de mettre en œuvre des arguments nommés ...

1

En utilisant NObjective bridge, vous pouvez travailler avec des classes Objective-C existantes en C# ou en créer de nouvelles. Aussi après la version finale de 'Visual Studio 2010' et '.NET 4', je vais ajouter le support DLR pour NObjective.

+0

Est-ce que c'est déjà fait? :) – bzlm

0

Qu'en est-il d'Objective-J et de Cappuccino pour .Net, plutôt que d'Objective-C et de Cocoa? Objective-J est aussi attrayant que ObjC, cependant, ObjJ est plus proche de C# que ObjC (pas de pointeurs, gc, etc.)

J'ai récemment posé la question sur le forum des développeurs Cappuccino, et ils m'ont orienté vers Jurassic (un compilateur Javascript pour .Net). Ils ont également dit que Cappuccino fonctionne bien sur IronJS. Donc, on dirait que les composants sont là (ObjJ -> Javascript -> .Net), mais le pont les reliant entre eux doit être construit.

Est-ce que quelqu'un d'autre voit une valeur à cela?

Questions connexes