open-source descargar - ¿Se usa Objective-C solo para el desarrollo en Mac OS / iPhone?





xcode windows (7)


Creo que ObjC ha estado aislado del mundo de Apple a través de una peculiaridad de la historia y la naturaleza de los sistemas propietarios.

Primero, necesitas separar ObjC de Cocoa. ObjC es un lenguaje muy primitivo. Creo que es un lenguaje muy elegante, pero es extremadamente básico. Puede implementar ObjCv1 en un preprocesador C. C ++ y ObjC se desarrollaron casi al mismo tiempo. C ++ implementó una gran cantidad de infraestructura para llevar una sintaxis tipo C a lo que básicamente es un lenguaje completamente diferente. ObjC trajo una sintaxis similar a Smalltalk a C, con casi nada más. Incluso cosas como +alloc y +alloc no son elementos del lenguaje de ObjC. Son envoltorios bastante simples alrededor de malloc() y free() . * Por sí solo, ObjC no es realmente tan interesante (elegante como creo que lo es). Esto es muy similar a la naturaleza de Smalltalk. Sin sus bibliotecas de objetos, no hay mucho que puedas hacer con él. Con sus bibliotecas de objetos, es increíblemente poderoso.

NeXT proporcionó todo este marco sobre ObjC llamado NeXTSTEP. Dado que la computadora NeXT no fue un éxito comercial generalizado, y NeXTSTEP fue propietaria, no mucha gente aprendió el marco o el lenguaje subyacente. Cuando Apple lo compró y lo transformó en Cocoa, continuó siendo un sistema propietario.

GNUStep está disponible, pero nunca desarrollaron nada lo suficientemente interesante como para atraer a muchos desarrolladores (uno de los principales navegadores web o procesadores de texto o similares). Y Cocoa se ha adelantado mucho a GNUStep en los últimos años. Es posible que con el aumento del interés en Cocoa debido al iPhone, GNUStep pueda revitalizarse y traer un buen marco de desarrollo multiplataforma, pero lo dudo. Las personas que tienen experiencia en C ++ miran C # y ven una clara mejora. Cuando miran a ObjC, ven muchos corchetes donde no los esperan. Para las personas planteadas en el paradigma de los "métodos de llamada", el paradigma de Smalltalk de "pasar mensajes" es extraño e incluso un poco atemorizante. Muchos desarrolladores asumen que necesitan un lenguaje fuertemente tipado para evitar errores y se sienten incómodos con un sistema que se basa principalmente en la disciplina del programador y la consistencia cuidadosa. Es mucho más fácil hackear algo que "simplemente funciona" en C # que en ObjC. ObjC realmente espera mucho más del desarrollador para comprender lo que está sucediendo y no confiar en el compilador para protegerlo de sus ataques.

Básicamente, la gente sabía que C de Unix, y C ++ tiene sentido en términos de C, y Java tiene sentido en términos de C ++, y C # simplemente se ha limpiado Java. ObjC no es ninguno de estos. Es Smalltalk, y ya nadie aprende Smalltalk.

* Hace poco conversé con el chico que escribió +alloc sobre su historia, y podría objetar que lo llame un envoltorio simple dada la inclusión de zonas. Entonces, para usted que sabe la diferencia, reemplace +alloc aquí con +new .

No sé Objective-C, pero a mí me parece un buen lenguaje. Pero el único contexto del que lo sé es todo Apple. Pero Objective-C está incluso en la colección del compilador de GNU.

¿Hay algo que falta en los abiertos? ¿O ya existe una base más amplia para Objective-C? Me interesa si hay empresas que eligieron Objective-C para desarrollar sus productos.




El equipo de Mono está haciendo algo con el desarrollo de iPhone que permite que las aplicaciones de iPhone se escriban en .NET y se compilen de forma cruzada con el compilador (es) de Mono .NET. Compruébelo en http://www.mono-project.com/Mono:Iphone

El último podcast de .NET Rocks tiene a Rory Blythe hablando sobre cosas que ha estado haciendo en el desarrollo del objetivo C y el iPhone.




GNUstep es en realidad mucho más activo de lo que la mayoría de la gente cree, y vale la pena vigilarlo. No es difícil crear aplicaciones que funcionen en GNUstep y Cocoa (lo que significa potencialmente en OSX, Win, Linux, BSD ...)

Definitivamente vale la pena ver estos enlaces para cualquier persona interesada en el tema:

http://www.gnu.org/software/gnustep/information/aboutGNUstep.html

http://etoileos.com/news/

http://www.nongnu.org/gap/

Luego está Cocotron, un "proyecto de código abierto que apunta a implementar una API multiplataforma Objective-C similar a la descrita por la documentación de Apple Inc. en Cocoa":

http://www.cocotron.org/

EDITAR: Para ver un ejemplo de un producto comercial multiplataforma construido con GNUstep, consulte Eggplant .




GNUstep . También está Étoilé que es un sistema operativo construido con GNUstep.

Creo que a muchas personas les gusta más C o C ++, y si quisieran un lenguaje más moderno, usarían C # o Java.




Bueno, también está el marco GNUStep para el cual algunas personas aún se desarrollan. Sin embargo, no sé cuán activa es esa comunidad.

Pero en su mayor parte, Objective-C ahora es un lenguaje de Apple, como lo demuestra el hecho de que la versión "2.0" del lenguaje se lanzó como parte de OSX 10.5 y parece haber sido un esfuerzo de desarrollo puramente interno en Apple.

Edición: Apple, como probablemente sepa, tiene algo que se llama el marco de Cocoa, que básicamente se refiere a la pila completa de bibliotecas para Objective-C, incluida la clase base común NSObject. Cocoa es una continuación de la biblioteca NextStep, cuya versión de código abierto es GNUStep. Por lo tanto, encontrará muchas de las clases con el prefijo NS en ambos lugares, pero Apple no se ha demorado en agregar nuevas clases o cambiarlas en Cocoa, por lo que la interoperabilidad a nivel de GUI es solo una posibilidad teórica.




Creo que la implementación de Apple está mejor soportada y aún está en desarrollo activo. Hay algunos otros lugares, como GNUStep , pero todavía parecen estar muy en el nivel NextStep / OpenStep. ¡Lamentablemente han pasado muchas cosas desde entonces!




Pensé que podría agregar un método que uso en muchos proyectos.

- (NSInteger)randomValueBetween:(NSInteger)min and:(NSInteger)max {
    return (NSInteger)(min + arc4random_uniform(max - min + 1));
}

Si termino usándolo en muchos archivos normalmente declaro una macro como

#define RAND_FROM_TO(min, max) (min + arc4random_uniform(max - min + 1))

P.ej

NSInteger myInteger = RAND_FROM_TO(0, 74) // 0, 1, 2,..., 73, 74

Nota: solo para iOS 4.3 / OS X v10.7 (Lion) y versiones posteriores





objective-c open-source gnustep