2010-12-09 19 views
9

Al haber leído recientemente un Objective-C, me parece un lenguaje bastante pulcro con muchas características geniales.Desarrollo de Windows usando Objective-C

No tengo intención de hacer ningún desarrollo de iPhone, sin embargo entiendo que GCC puede compilar código Objective-C y quería saber - ¿Objective-C es un lenguaje alternativo viable para C99 para el desarrollo de Windows?

En particular:

  • Hay alguien haciendo actualmente el desarrollo de Windows usando Objective-C?
  • ¿Hay algún componente de tiempo de ejecución que deba distribuirse con mis aplicaciones?
  • entiendo que Objective-C es un superconjunto de C, ¿significa esto que es posible utilizar cualquier biblioteca compatibles C-? (por ejemplo, la API de Windows)
  • ¿Recibiría recolección de basura en mis aplicaciones?
  • He encontrado Cocotron y GNUstep que a menudo se mencionan cuando hablo de usar Objective-C en otras plataformas, sin embargo, como GCC ya se puede usar para compilar Objective-C, realmente no entiendo por qué los necesitaría.
  • ¿Hay algún otro inconveniente o trampas que pueda ejecutar al intentar el desarrollo de Windows utilizando Objective-C?
+0

he encontrado la pregunta [Objective C para Windows] (http://stackoverflow.com/questions/56708/objective-c-for-windows) lo cual es interesante, sin embargo, no responde mis preguntas sobre la viabilidad, los componentes de tiempo de ejecución o realmente ninguno de los puntos con viñetas en la pregunta. – Justin

+0

Para obtener el máximo beneficio del Objetivo C como lo ve en entornos Mac, entonces necesita usar las bibliotecas Cocoa. De lo contrario, parece un lenguaje que admite la orientación a objetos sobre C. Simplemente obtiene las características integradas del lenguaje. – boring

Respuesta

8

Con respecto a la primera pregunta, no sé si alguien es serio hacer el desarrollo en las ventanas con Objective-C, pero puede haber, aunque esos números serían probablemente menos de los que realizan un trabajo serio con un lenguaje como whitespace.

En segundo lugar, se necesitaría, como mínimo el objetivo-c tiempo de ejecución. Hay dos tiempos de ejecución, el tiempo de ejecución de NeXT (ahora Apple) y el tiempo de ejecución GNU Objective-C. No son compatibles. Si se encuentra en una plataforma que no es de NeXT ni de Apple, como Windows, no tiene otra opción, el tiempo de ejecución de GNU solamente.

Objective-C es un superconjunto de C, y sí se puede utilizar la API de Win32 si así lo desea directamente en el código Objective-C. Además, solo obtendría recolección de basura si utiliza un recopilador conservador, y se relaciona con las bibliotecas que está utilizando. En resumen: Nº

Qué tiene GCC es el soporte para el lenguaje Objective-C, y el tiempo de ejecución, sin biblioteca estándar. Lo que el tiempo de ejecución objc de GNU le proporciona en términos de una biblioteca estándar, son dos objetos: Object y clase NXConstantString, que es necesaria para admitir la sintaxis @"". Object es simplemente una clase base. No es muy útil, ¿eh? Es por eso que existen marcos como Cocotron y GNUstep, para darle acceso a una implementación de OPENSTEP/Cocoa.

En cuanto a trampas o trampas, sí: su aplicación, incluso con Cocotron o GNUstep, puede que nunca sea portátil para la Mac, o puede obtener bits como selectores tipeados en el tiempo de ejecución objc de GNU o una plétora de otros problemas. Permítanme terminar de responder a esto planteando otra pregunta: ¿Qué trampas o trampas podría encontrar al apuntar a .NET? Estoy seguro de que algunos, si no la mayoría, también se aplican en este caso. Se aplican trampas y trampas estándar.

Espero que esto ayude.

+0

Iba a publicar esto, pero me ganaste. +1 para capturar la idea principal: Objective-C es inútil sin las bibliotecas de tiempo de ejecución, que es lo que proporcionan Cocotron y GNUStep. Sin embargo, no son realmente factibles de usar en ningún programa serio, y están muy por detrás de las bibliotecas de tiempo de ejecución de Apple. En resumen, no hay un uso real para Objective-C más allá de Mac y iPhone con las bibliotecas de tiempo de ejecución de Apple. –

+2

@Kragen Sin las bibliotecas de tiempo de ejecución, Objective-C no puede hacer nada. Gran parte de Objective-C depende de hacer cosas en tiempo de ejecución (además de los marcos necesarios: Foundation, CoreFoundation, AppKit), y sin las bibliotecas necesarias, es ineficaz. Para usar tu ejemplo, es como C sin ninguna biblioteca. Si quieres hacer algo, vas a tener que implementarlo tú mismo (algo que realmente no puedes hacer con Objective-C). –

+0

El tiempo de ejecución de GNU ya no es la única alternativa; ahora hay libobjc2, que es compatible con casi todo lo que hace el tiempo de ejecución de Apple. Las bibliotecas de GNUStep aún están retrasadas, especialmente en lo que respecta a la interfaz de usuario, pero el núcleo del lenguaje está actualizado. – user57368

0

no hay una solución madura todavía. Si desarrolla la solución en sí, puede hacerlo de todos modos. Pero si no lo eres, no es el momento.

Para herramientas de compilación, hay LLVM/Clang que son de código abierto bajo licencia BSD. El compilador está patrocinado por Apple, por lo que compila Objective-C por completo y se está convirtiendo en el compilador principal de Apple. Entonces el compilador ya no es un problema.

Problema es la biblioteca del entorno de ejecución. El lenguaje Objective-C depende de su tiempo de ejecución para ejecutarse. El tiempo de ejecución define todo el comportamiento del sistema de objetos y algo más. La biblioteca de entorno de tiempo de ejecución es un sistema central y diferente con una biblioteca de marcos como Cocoa o Quartz. en .NET, es CRE, no la biblioteca de clases de .NET Framework. Sin tiempo de ejecución, el programa no se puede ejecutar como el programa .NET ejecutado en Windows sin tiempo de ejecución .NET.

Para más detalles, consultar esta conversación: http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-January/007593.html

Cuestiones relacionadas