python - 是否有可能在 Python 中使用与 Smalltalk(例如 Pharo)或 Common Lisp 中类似的工作流程?

标签 python debugging smalltalk pharo

我非常喜欢在 Smalltalk 中可以进行的增量编程。你有一个正在运行的程序,当你充实你的程序时,你可以添加它。您可以更改方法并在应用更改后重新启动堆栈以查看新版本的功能。当您的程序正在运行时,您可以检查本地状态并更改它们。

在 Python 中有类似的东西吗?我已经看到了这种能力的暗示,例如 reload(),但我对 Python 的了解还不够,无法准确理解它的使用方式。我浏览了一些初学者 Python 书籍,但没有看到任何提及。

最佳答案

有些事情无论在 Python 上付出怎样的努力都是不可能的。例如,在开发 Web 应用程序时,Flask/Django/Gunicorn 或诸如此类的 Web 服务器必须在更改源后重新启动其进程。但是在 Lisp 中,你在 REPL 中启动了一个 Web 服务器,你只需编译一个函数,例如添加一个新路由,你就可以立即尝试。没有重新启动进程,它更具交互性。

另一个例子是更新类和实例。在 Common Lisp 中,假设您编写了一个类并创建了一些对象。现在您更改了类定义,并且现有实例得到(延迟)更新。例如,添加一个新插槽,删除一个插槽等。我们甚至可以控制更新的完成方式(通过子类化一些通用函数)。

在 Python 中附加到一个正在运行的远程进程是可行的,但交互性要差得多,编辑体验也不太理想(默认情况下终端中的一个愚蠢的 python shell VS 一个完整的 Emacs,你可以在其中导航一次击键(C-c C-c 在 Slime 中)(或在任何其他可以连接到 Swank 服务器的编辑器中)获取和重新编译函数。

运行一个给定的单元测试也很直接和快速,没有重新启动的过程。

引用资料:

关于python - 是否有可能在 Python 中使用与 Smalltalk(例如 Pharo)或 Common Lisp 中类似的工作流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53839202/

相关文章:

python - 从 bash 执行 python 脚本时如何附加到 PyCharm 调试器?

objective-c - 在 gdb 中调试 Objective-C 时向对象发送消息,不带符号

virtual-machine - Linux 上的 VM 版本

python - 与 urllib2 或其他 http 库的多个(异步)连接?

python - 使用 mypy 时正确输入 python 中的异常/错误元组

python - 在 Python 3.5.1 文档中找不到方法 regex.scanner(),但解释器运行良好

c++ - cmake生成VS项目不能断点

python - 如何使用 pd.cut 以自然的方式对数据进行分箱?

smalltalk - Smalltalk 中的简单类定义错误

reflection - Pharo:如何比较不同检查员的对象?