问题标签 [robustness]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
429 浏览

haskell - 没有错误的健壮的haskell

我目前正在学习 Haskell。我选择这种语言的动机之一是编写具有高度鲁棒性的软件,即完全定义的、数学上确定的、永远不会崩溃或产生错误的函数。我并不是指由系统谓词(“系统内存不足”、“计算机着火”等)引起的故障,这些并不有趣,并且可以简单地使整个过程崩溃。我也不是指由无效声明(pi = 4)引起的错误行为。

相反,我指的是由错误状态引起的错误,我想通过严格的静态类型使这些状态不可表示和不可编译(在某些函数中)来消除这些错误。在我看来,我称这些函数为“纯粹的”,并认为强类型系统可以让我完成这个任务。然而,Haskell 并没有以这种方式定义“纯”,并允许程序error在任何上下文中崩溃。

为什么捕获异常是非纯的,但抛出异常是纯的?

这是完全可以接受的,一点也不奇怪。然而令人失望的是,Haskell 似乎没有提供一些功能来禁止可能导致分支使用error.

这是一个人为的例子,为什么我觉得这令人失望:

假设我偏执于纯函数readFruit并且printFruit真的不会由于非手动状态而失败。你可以想象代码是用于发射一个装满宇航员的火箭,在一个绝对关键的例程中需要序列化和反序列化水果值。

第一个危险自然是我们在模式匹配中犯了一个错误,因为这给了我们无法处理的可怕错误状态。值得庆幸的是,Haskell 提供了内置的方法来防止这些,我们只需编译 -Wall包含-fwarn-incomplete-patterns和 AHA 的程序:

我们忘记序列化 Peach fruits 并且showFruit会抛出一个错误。这很容易解决,我们只需添加:

该程序现在可以在没有警告的情况下编译,避免了危险!我们发射了火箭,但突然程序崩溃了:

由于以下故障线路,火箭注定要坠入大海:

本质fromJust上它有一个分支,Error所以如果我们尝试使用它,我们甚至不希望程序编译,因为printFruit绝对必须是“超级”纯的。我们可以解决这个问题,例如将行替换为:

我觉得很奇怪 Haskell 决定实现严格的类型化和不完整的模式检测,这一切都是为了防止无效状态被表示,但却因为没有给程序员一种方法来检测分支error何时出现而落到了终点线的前面不允许。从某种意义上说,这使得 Haskell 不如 Java 健壮,后者迫使您声明允许您的函数引发的异常。

实现这一点的最简单的方法error是以某种方式简单地 undefined,通过某种形式的关联声明,在本地为函数及其方程使用的任何函数。然而,这似乎是不可能的。

关于错误与异常的 wiki 页面为此通过合同提到了一个名为“扩展静态检查”的扩展,但它只会导致链接断开。

它基本上归结为:我如何让上面的程序因为它使用而无法编译fromJust?欢迎所有想法、建议和解决方案。

0 投票
0 回答
172 浏览

multithreading - 是否可以在没有 mmap 的情况下将 SQLite 保持在正常锁定模式和 wal 日志模式?

我在 iOS 开发中使用 SQLite。

现在我需要更好的多线程读写性能和没有mmap的WAL日志模式的健壮性。

据我所知,没有 mmap 的 WAL 日志模式需要 EXCLUSIVE 锁定模式,这可能会阻止多线程读写

所以,我想知道是否有可能在没有 mmap 的情况下保持 SQLite 处于正常锁定模式和 wal 日志模式?如果是的话,你能告诉我实现这个的一般想法吗?不管是需要修改源代码还是难度。

0 投票
3 回答
219 浏览

vba - VBA 优化健壮代码

所以我对VBA完全陌生。我有一个 java 迷,所以我对编程并不陌生,但是使用 VBA 操作办公室文档似乎更容易。无论如何,关于主题:

我目前正在公司中实现自动化(此示例正在创建合同)。然而,使用 Java,我总是学会了编写健壮的代码,尽管 VBA 代码现在可以工作,但我对它并不满意,因为它需要用户非常“友好”。所以我的问题是(我希望你不介意),你能给我一个正确的方向,让我的代码更健壮吗?

这是代码:



如您所见,代码非常基础。尽管它有效,但交付并不好。

定义的两个Functions只是格式化用户的字符串,因为显然某些东西的名称并不总是相同的长度。

我想删掉这些Range属性,因为在我看来,这就是程序对变化如此敏感的原因。

欢迎任何和所有建议。

注意:目前,合同可以有三个不同的“目标方”,这就是Select Case声明存在的原因。如果它应该增长,它将完全没用,但现在它可以工作。

0 投票
0 回答
918 浏览

r - R中强大的优化包

我目前正在研究混合整数线性规划问题,我想知道是否有任何可用的关于 R 中的鲁棒优化的软件包。

提前致谢。

0 投票
1 回答
367 浏览

robustness - 早期失败与稳健方法

我一直(多年来)想知道实现以下最有意义的方式(这对我来说有点自相矛盾):

想象一个函数:

它被称为:

但是,要捕获 ArgumentNullException,我应该这样做:

要不就:

?

0 投票
1 回答
93 浏览

java - 在 Spring JPA webapp 中构建可靠性

我正在尝试找到一种解决方案来为我们的 web 应用程序建立可靠性。如果网络连接/数据库连接丢失,计划是转储 sql 和数据。在当前的实现中,我们有 Rest 控制器、Service、DAO。DAO 抛出PersistenceExcetpion,并传播到控制器层。

示例代码:

DBException是一个运行时异常。

现在是真正的问题。其中一位队友建议有自定义例外,例如。InsertException, UpdateException等等,如果我们遇到这些异常中的任何一个,我们就会知道对该实体执行了哪些操作,以便可以将其作为适当的 sql.xml 保存到文件中。

例如。假设代码无法保存Employee实体。这将抛出InsertException,并将在文件中创建一个条目作为该实体的插入 sql 语句。insert into employeee values ('firstname','lastname');

对我来说,在连接丢失时实现创建 sql 文件的想法似乎并不像实现上述那样简单。

我提出的问题是 1) 在服务方法中执行多个操作(如插入、更新、删除的任意组合)时,您如何处理?2)不同的例外呢?我的意思是,原因PerisistenceException可能是约束失败、找不到实体等,而不仅仅是连接问题。

有没有办法实现上述场景,它也考虑了所有不同的条件。

谢谢。

更新: 基于 chrylis 的评论。我应该已经将此添加到问题中。这是一个在不同零售店本地运行的网络应用程序。并且应用程序不能停机,所以如果有任何连接问题,应用程序应该继续工作。该文件稍后将与中央数据库服务器同步。

0 投票
2 回答
365 浏览

c++ - C++ 最强大的文件复制方式

好的,所以我知道磁盘写入错误非常罕见,所以请看过去,因为我正在使用的数据非常重要(比如 SSID 很重要)。因此,我想使用绝对最小的内存量以绝对最强大的方式复制文件。到目前为止,这就是我所得到的。它占用了很多内存,但我找不到源。它的工作方式是反复检查无数次,直到得到确认的结果(它可能会大大增加错误的误报数量,但它可能会大大减少实际错误的机会)。此外,底部的睡眠让您有时间使用 Windows 任务管理器分析程序的整体性能。



所以,如果我的代码以最好的方式走在正确的轨道上,那么我的代码可以做些什么来改进它呢?但是,如果我的代码完全没有最好的解决方案,那么最好的解决方案是什么?请注意,这个问题本质上是关于检测罕见的磁盘写入错误,用于复制非常非常非常(等)重要数据的应用程序。

0 投票
2 回答
518 浏览

python - 用 Python 编写的强大的服务器无限循环

我编写了一个服务器来处理事件,并且在处理事件期间未捕获的异常不能终止服务器。

服务器是单个非线程 python 进程。

我想终止这些错误类型:

  • 键盘中断
  • 内存错误
  • ...

内置异常列表很长:https ://docs.python.org/2/library/exceptions.html

我不想重新发明这种异常处理,因为我猜它之前已经做过好几次了。

如何进行?

  1. 有一个白名单:一个正常的异常列表,处理下一个事件是正确的选择
  2. 有一个黑名单:一个异常列表,表明终止服务器是正确的选择。

提示:这个问题与在后台运行 unix 守护进程无关。这与双叉无关,也与重定向 stdin/stdout 无关 :-)

0 投票
2 回答
135 浏览

exception - 如何在出现异常的情况下稳健地调用第三方代码?

在使用异常来表示错误的语言中,我想调用一些第三方代码,如果失败,则运行回退代码。例如:

以我的经验,了解第三方代码可能引发的所有异常是非常罕见的。因此我不能在catch条款中列出这些例外。另一方面,我经常被建议不要出现catch所有可能的例外情况。

在这种情况下我应该如何写catch子句?

0 投票
2 回答
595 浏览

algorithm - 分段线拟合

我想拟合一条线到线的片段,即大约属于该线的少量(通常少于 10 个)线段。这条线有一个小坡度。但也有异常值:线外的段(通常更小)。下图是一个典型案例。碎片之间没有水平重叠。

在此处输入图像描述

我宁愿避免尝试拟合所有细分子集并保持最佳状态。我也不会依赖 RANSAC,因为样本太小。

有什么建议吗?


更新

我现在计划将问题改写为在点上拟合一条线的问题,即在各个线段上的无穷大点,假设线性密度恒定。通过以积分形式重写最小二乘方程,我们可以看到我们可以认为这些线段集中在它们的中间,权重等于它们的长度;还有一个额外的术语考虑了它们的斜率。这为分段上的配件提供了良好的接地。

现在我仍然需要结合异常值检测。受 RANSAC 的启发,我可以选择最长的线段并单独或成对使用它们来获得候选线。对于每一行,评估总误差,并保留给出最小值的行。从那里开始,一些标准(尚未找到)应该允许拒绝离群值并在离群点上执行最终的最小二乘拟合。