2009-08-09 24 views
9

Estoy trabajando en una aplicación Cocoa con la intención de usarla en Windows y Linux usando GNUstep. He estado evitando las características de Objective-C 2.0 hasta el momento, pero realmente me encantaría comenzar a utilizar al menos las propiedades. Lo que Google parece decirme (aunque estoy teniendo problemas para encontrar mucho sobre el tema) es que actualmente, ninguna característica de Objective-C 2.0 funciona con GNUstep. ¿Alguien sabe si hay planes para que GNUstep admita @property y @synthesize?¿Admitirá GNUstep @property y @synthesize?

También me pregunto si existe una buena estrategia para "expandirlos". Definitivamente podría imaginarme un programa que podría expandir el código usando @property y @synthesize en un código que no utiliza ninguna característica de Objective-C 2.0, pero me preocupa que no exista mucha demanda para tal cosa, así que probablemente haya ganado ". ser capaz de encontrar uno.

¿Crees que hay una buena posibilidad de que GNUstep soporte @property y @synthesize en el próximo año más o menos?

+0

Sobre el tema de "No lo hagas!": Es una situación interesante - No necesito mucho fuera de la Fundación, y la mayoría del código es toneladas de mis propias clases, junto con bastante lectura y escritura de XML. Por lo tanto, pensé que no sería un gran problema seguir siendo compatible con GNUstep. En cuanto a hacer que mis usuarios instalen un tiempo de ejecución, esperaba combatir eso con un instalador bien escrito que maneje todo para ellos si así lo desean. (Sin embargo, me interesa escuchar las objeciones que tengas con esos dos puntos). – andyvn22

+1

Si alguien intenta hacer esto: nunca pude hacer funcionar Obj-C 2.0 con GNUstep, pero parece funcionar muy bien con Cocotron (aunque necesitarás acceso a una Mac para compilación). – andyvn22

Respuesta

12

Esto es unos meses tarde, pero la respuesta es sí; GNUstep soportará las características de Objective-C 2.0 (y también bloques). Actualmente, todo está más o menos implementado, pero necesita pruebas y depuración. Estas características requieren Clang en lugar de gcc, y actualmente necesita usar la versión troncal.

la explicación de David Ver Chisnall en este hilo para más detalles: http://groups.google.com/group/gnu.gnustep.discuss/browse_thread/thread/b0a5fa4e3be71bb1#

+0

Ese enlace está muerto ahora, pero aquí hay una fuente diferente con la misma información: http://wiki.gnustep.org/index.php/ObjC2_FAQ – andyvn22

2

No estoy seguro si la implementación de Objective-C de GNUstep seguirá el liderazgo de Apple en la síntesis de acceso/mutador, pero si intenta hacer una aplicación para Mac, Windows y Linux, GNUstep probablemente no sea el mejor elección. Debería ser bastante fácil portar el código de Cocoa a GNUstep (e incluso podría escribir una macro para convertir sus declaraciones de propiedad), pero muy pocas personas usan GNUstep en Linux y aún menos en Windows. Me encanta la idea de una implementación OpenStep multiplataforma, pero por el momento, no es realmente práctica, es una adopción.

3

No, no sé si hay planes para admitir propiedades, pero si GNUstep planea seguir siendo viable (incluso si solo en el grado limitado al que está ahora) esto debería ser una prioridad. A menos que GNUstep decida adoptar las características de Objective-C 2.0, la brecha entre esta y la implementación de Apple hará que sea cada vez más difícil escribir un buen código multiplataforma. (Ya casi no tiene sentido para la mayoría de los desarrolladores.)

Aunque normalmente odio las respuestas que básicamente dicen "no hagas eso, es una mala idea", tengo que estar de acuerdo con @Jonathan en este caso, especialmente desde el punto de vista de practicidad. Aunque el código puede compilarse multiplataforma, si los usuarios tienen que instalar un tiempo de ejecución solo para usar su aplicación, la probabilidad de que alguien la use disminuirá enormemente.

This SO answer lo resume muy bien. Sugiero leerlo y sacar tu propia conclusión.

También vale la pena considerar que la etiqueta "objective-c" tiene más de 3280 preguntas, mientras que "gnustep" tiene 9. No estoy diciendo que el volumen de preguntas sea una medida de calidad, pero es un paralelo con la actividad y el interés, y muy posiblemente un bajo número de personas con experiencia en GNUstep en este sitio. Por lo tanto, es menos probable que obtenga una buena ayuda si elige seguir el camino que está considerando.

Por cierto, la mentalidad de evitar nuevos características en nombre de la compatibilidad es un comportamiento de "mínimo común denominador" que, a la larga, hará que su código sea menos elegante y menos "funcional". Es similar a la codificación con API disponibles en 10.2 o 10.3 - cualquier OS X reciente o el desarrollador de iPhone te dirá que prefieren tomar La ventaja de las nuevas funciones geniales y no verse obstaculizada por las limitaciones del pasado. Hoy en día, las nuevas aplicaciones casi siempre requieren 10.5. La compatibilidad con versiones anteriores es más característica del software establecido que es compatible con versiones anteriores, y muchas aplicaciones incluso eliminan el viejo sistema operativo a lo largo del tiempo.

Si está considerando vender una aplicación, el uso exclusivo de API compatibles con GNUstep limitará severamente su mercado e incluso limitará su aplicación de manera fundamental, incluido el nivel de brillo y funcionalidad que puede esperar alcanzar. Incluso si la aplicación no será comercial, generalmente tiene mérito utilizar el lenguaje y los marcos que mejor se adaptan a una plataforma determinada.Si realmente estás buscando soporte multiplataforma, es probable que Java te acerque con menos acidez estomacal. (Java definitivamente no es mi idioma favorito, y no es Cocoa, pero lo hace bien). Aunque todavía existe el mismo problema de versión de idioma entre clientes y plataformas, al menos es diseñado como multiplataforma, y todas las plataformas de consumo tienen soporte sólido de Java.

+0

Aaa y el obligatorio bajado al azar ataca de nuevo ... –

Cuestiones relacionadas