2010-11-29 18 views
12

¿Por qué Objective-C no tiene espacios de nombres? Parece una característica simple que haría que algunos nombres de clase sean más legibles (AVMutableVideoCompositionLayerInstruction ¿alguien?) Y ax los prefijos de letra tontos en nombres de clase. ¿Esto se debe principalmente a la compatibilidad con versiones anteriores? ¿Es más difícil implementar espacios de nombres de lo que parece?¿Por qué Objective-C no tiene espacios de nombres?

+0

Por lo que vale, no preferiría NeXTSTEP :: Array over NSArray. Por estúpido que sea el prefijo, creo que el hecho de que los nombres no contengan ningún símbolo se ajusta muy bien a la estructura oracional de la sintaxis de Objective-C. –

+0

@wm: Pero lo leería como "matriz Nextstep" no como "matriz de colon colon Nextstep" de la misma manera que lee 'objectAtIndex: i' como" objeto en el índice i "no" objeto en índice coli i " . El punto es discutible en lo que respecta a las clases NS de todos modos. No puede moverlos a un nuevo espacio de nombres sin romper todo el software Cocoa existente. – JeremyP

+2

Además, no lo haría referenciando como 'Nextstep :: Array' cada vez, tendría un' using Nextstep; 'y luego simplemente lo haría referencia como' Array', * a menos que * haya una ambigüedad y luego usted ' d resolverlo completamente Realmente haría el código más limpio y más legible. – devios1

Respuesta

11

No sé la respuesta, pero sospecho que "es más difícil de lo que parece", probablemente. Debería introducir soporte en el compilador y el enlazador de una manera que no rompa el software existente. Y aunque esto es obviamente posible (C++ ya lo ha hecho), presumiblemente el equipo de la cadena de herramientas ha tenido prioridades más altas en su plato. p.ej. en el pasado reciente hemos tenido recolección de basura, GCD, bloques y Objective-C 2.0 aparecen por lo que no podemos decir que no han estado haciendo nada.

El soporte del espacio de nombres es lo que me encantaría ver introducido en Objective-C.

+0

Pensé en ello también, creo que el obstáculo más grande puede ser todo lo de C ... –

4

No sé si quiere saber si hay alguna decisión oficial. Pero el espacio de nombres como muchas otras características son opciones, elección realizada por el colaborador del idioma. PHP recientemente introdujo Namespace, y por ejemplo el paquete de uso de Java que actúa como espacio de nombres o módulos de uso de Python.

Creo que hay una sobrecarga en la implementación del espacio de nombres, principalmente porque Objective-c está tipado dinámicamente, por lo que en tiempo de ejecución debe verificar el espacio de nombres, resolver el comportamiento predeterminado, etc. y supongo que porque Objective-c también se usa en entornos incrustados (AKA iPhone), la velocidad es muy importante.

Tienes que envolver todo lo que he dicho a lo grande en mi humilde opinión; D

Actualización:

Me pareció muy interesante la discusión http://clang-developers.42468.n3.nabble.com/Adding-namespaces-to-Objective-C-td1870848.html#a1872744 en el sitio web de desarrolladores sonido metálico que explica la razón por la cual es, sin duda no trivial para implementar el espacio de nombres en Obj-C.

+5

Sería suficiente, creo, para proporcionar soporte de espacio de nombres para nombres de clase. Estos serían mutilados de alguna manera para que, en tiempo de ejecución, hubiera poco o ningún gasto. – JeremyP

Cuestiones relacionadas