20

Is there a REPL for Objective-C?

I am learning Objective-C and am sorely missing a REPL, coming from a Python background.

4

6 回答 6

9

F-Script为 Cocoa 开发提供了一个受 Smalltalk 启发的 REPL,而Nu提供了一个基于 Lisp 的 REPL。F-Script 看起来更精致一些,并提供了一个对象浏览器。

他们似乎都针对 OS X,而不是 iOS 开发。有零散的论坛和博客文章描述了使用 Nu 开发 iOS 应用程序的人,但它们似乎都来自大约两年前。还有一个 YouTube 视频,“使用 Scheme REPL 实时调试 iPhone 应用程序”,其中有一个同事使用 Scheme 调试 iPhone 应用程序的截屏视频。

我还没有尝试过任何这些技术,但我很想听听任何人的意见。


我刚刚意识到这一切都有一个更简单的答案。如果你来自 Python,并且想在 REPL 中试验 Cocoa,你应该只使用 Python REPL。OS X 附带一个 Python 到 Objective-C 的桥接器。只需运行 Python,do import objc,就可以了。除其他外,还有用于 Ruby 和 Common Lisp 的桥梁。

当然,所有这些 REPL 只允许您编写动态代码以与 Cocoa 交互,但它们不允许您编写实际的 Objective-C 代码,并动态解释或编译它以与它动态交互。所以没有一个真正符合您的原始要求。

于 2011-02-05T10:56:54.167 回答
4

当触发断点时,调试器应弹出打开。在调试器中,您可以在gdb中输入任何您想要的内容。您可以使用p [someObj someMethod]打印断点范围内的内容。gdb 是一个强大的实用程序,在整个网络上都有很好的文档记录。

这将尽可能接近我认为你所追求的。这在编译语言中只是一件更笨重的事情,因为eval在 Objective-C 中没有。

于 2011-02-02T10:21:49.143 回答
3

据我所知,目前最接近 REPL 的方式确实是通过调试器(即 GDB 或 LLVM 调试器 LLDB)。

对于纯 C,有CCons

Apple 的 Objective-C API(尤其是 Foundation)中的大多数东西也有直接的 C 等价物(例如CFRelease(obj);,与 相同[obj release];),您可以在 CCons 中使用它们。

CCons 建立在 LLVM 和 Clang 之上,它们也支持 Objective-C。可能可以扩展 CCons 以支持 Objective-C。

于 2011-02-02T10:38:22.130 回答
1

CoderPad 的“试用”为包括 objc 在内的数以百万计的语言提供了面向公众的仅限自我的 REPL!!!我刚刚使用它,它对他们来说确实是一个很好的销售工具(我不隶属于他们;他们为面试编码人员的人制作工具)。https://coderpad.io/

于 2016-10-19T20:02:56.590 回答
0

Gambit Objective-C项目中,似乎有人尝试创建基于 Scheme 的 REPL。

Ruby Motion中的 REPL也应该适用于探索目的(不过我自己没有尝试过)。

于 2013-08-13T12:22:26.030 回答
0

是的,REPL 在输出窗口中。

“打印对象”

po object

还可以执行作为应用程序代码运行的命令

expression i = 5

阅读这篇有趣的完整调试文章以获取更多信息。

于 2018-05-02T11:24:01.203 回答