Smalltalk如何处理程序错误?

如何解决Smalltalk如何处理程序错误?

| 我是Smalltalk的新手。我已经阅读了一些有关它的文章和文档,并且对其概念的完整性感到惊讶。它提供了一些实时调试。 无论如何,对于程序错误,该错误表示该程序逻辑是错误的,并且该程序累积的所有突变均无效。为了保证完整性,应该从某个角度重新启动整个程序,并且应该回滚整个程序的状态。 Smalltalk如何处理此问题? (也许这个问题可以应用于所有动态REPL语言...)     

解决方法

        Smalltalk使用Exception对象。我建议您阅读有关该内容的章节https://gforge.inria.fr/frs/download.php/26600/PBE2-Exceptions-2010-03-02.pdf 它是《 Pharo示例》一书的一部分:http://pharobyexample.org/ 关于变异,调试等,请注意,Smalltalk会用该语言重新定义很多内容。例如,MethodContext类。这些对象代表VM正在执行的方法上下文。因此,您可以检查它们,并像常规对象一样玩它们。与CompiledMethod相同。只是为了好玩,检查\“ pseudo \”变量\'thisContext \':) 如果您想自己回答问题,请看Debugger类。因此,您是否想知道在调试器中间重新启动方法时会发生什么?然后在Debugger中浏览方法#restart并遵循:)     ,        实际上,您是在问“整个计算机如何回滚到已知状态?”,因为Smalltalk映像是与VMWare和VirtualBox相同的虚拟机。 正如他在其博士论文《使用编程语言进行实验》中所描述的,我们最能消除任意副作用(不包括回滚I / O等明显的可能性)的能力可能是亚历山德罗·沃思的世界。至少从一般意义上讲:当然可以使用Memento和Command模式之类的东西来实现不可撤消的操作。     ,        我猜您指的是映像中的许多对象,这些对象在开发和调试时可能会进入不一致状态。通常的过程是将代码存储在类似(Monticello的squeak / pharo)包中。当您想重置东西时,您会从分发中获得干净的映像,并从软件包中重新加载代码。对于已部署的应用程序,除了软件包中的代码外,通常还需要一些信息来重新创建以某种外部形式存储的数据对象,例如存储在文件或dql或noSql数据库中的序列化形式。因此,您的重置过程将是获取新图像,从包中加载代码,从外部存储加载数据模型对象。     ,        没有! 从小谈话中,我知道他们都不支持这种交易。设置执行期间累积的所有副作用。没有支持的自动回滚。目前正在研究如何支持此方法,但没有尝试使用AFAIK的方法。必须知道的是,如果要调试,则返回堆栈跟踪,以了解对象不在执行时的状态。您只会看到处于最新状态的对象。 虽然以通用方式支持它并不容易,但仍有一些可能性可以通过程序设计来解决。最突出的方法是: 您可以复制/克隆要修改的对象,并将更改应用于副本。如果出现问题,您只需要丢弃副本即可。如果一切正常,则将副本的内容应用于原件。您可以使用memento模式解决此问题。 您将更改应用于对象,但是如果出现问题,请重新应用原始内容。可以使用命令模式通过执行/撤消操作来实现     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?