2011-02-02 12 views
17

¿Hay un REPL para Objective-C?REPL para Objective-C

Estoy aprendiendo Objective-C y me falta mucho un REPL, proveniente de un fondo de Python.

Respuesta

9

F-Script proporciona una réplica inspirada en Smalltalk para el desarrollo de cacao, y Nu proporciona una basada en Lisp. F-Script parece un poco más pulido y ofrece un buscador de objetos.

Ambos parecen apuntar a OS X, en lugar de desarrollo de iOS. Hay foros dispersos y publicaciones en blogs con personas que describen el uso de Nu para desarrollar aplicaciones de iOS, pero todos parecen ser de hace unos dos años. También hay un video de YouTube, "Uso de un Scheme REPL para depurar aplicaciones de iPhone en tiempo real" con un screencast de un compañero que usa Scheme para depurar una aplicación de iPhone.

No he experimentado con ninguna de estas tecnologías, pero me gustaría saber de cualquiera que lo haya hecho.


Me acabo de dar cuenta de que hay una respuesta más simple a todo esto. Si vienes de Python y quieres experimentar con Cocoa en REPL, solo debes utilizar Python REPL. OS X se envía con un Python al Objective-C bridge. Simplemente ejecuta Python, haz y listo. También hay puentes para Ruby y Common Lisp, entre otros.

Por supuesto, todos estos REPL solo le permiten escribir código dinámico para interactuar con Cocoa, pero no le permiten escribir el código real de Objective-C, interpretarlo o compilarlo sobre la marcha para interactuar con él dinámicamente. Por lo tanto, ninguno cumple realmente con su requisito original.

+0

Python 2.7 usando jupyter notebook, 'import objc' falló . La URL de la manzana dice que la página no se encuentra. – AnneTheAgile

+0

Buen punto. En algún momento de los últimos cinco años, creo que Apple retiró su apoyo al puente Objective-C. En el punto, la mejor manera de interactuar con Cocoa desde un REPL es con Swift. Simplemente corre "rápido". No hay nada bueno para Objective-C que yo sepa. – algal

+0

Encontré CoderPad, veo mi nueva respuesta. – AnneTheAgile

4

Cuando se desencadena un punto de interrupción, el depurador debe abrirse. Cuando esté en el depurador, puede escribir lo que desee en gdb. Puede usar p [someObj someMethod] para imprimir cosas que estén dentro del alcance de su punto de interrupción. gdb es una poderosa utilidad bien documentada en toda la web.

Eso va a ser lo más cercano a lo que creo que está buscando. Esto es mucho más raro que hacer en los lenguajes compilados, ya que no hay ningún eval en Objective-C.

+2

No puede declarar y/o asignar nuevas variables dentro del depurador, ¿verdad? Solo puede inspeccionar/modificar las variables existentes. – d11wtq

+0

Sí, puedes. http://stackoverflow.com/questions/11192511/does-lldb-have-convenience-variablesvar –

+0

También puede usar el comando lldb 'expr', que también permite la asignación –

3

Hasta donde yo sé, lo más cerca que puede llegar a un REPL en este momento es a través de depuradores (es decir, GDB o el depurador LLVM LLDB).

Para C puro, hay CCons.

La mayoría de las cosas en Objective-C API de Apple (particularmente Foundation) también tienen equivalentes C directos (por ejemplo, CFRelease(obj); es lo mismo que [obj release];), que puede usar en CCons.

CCons está construido sobre LLVM y Clang, que también admiten Objective-C. Probablemente sea posible extender CCons para que también sea compatible con Objective-C.

0

En el proyecto Gambit Objective-C parece haber un intento de crear un esquema basado en REPL.

El REPL en Ruby Motion también se supone que es bueno para fines exploratorios (aunque yo no lo he probado).

0

¡La 'prueba' de CoderPad ofrece un REPL solo para uso público por millones de idiomas, incluido objc! Acabo de usarlo y es realmente una buena herramienta de ventas para ellos (no estoy afiliado, hacen herramientas para personas que entrevistan codificadores).https://coderpad.io/