Skip to content

先简单记录一下后期整理报错时, 需要注意的事项 #1

@lxx2013

Description

@lxx2013

先简单记录一下后期整理报错时, 需要注意的事项

错误类型

可以跳过并继续执行的错误: 暂时不支持;

要处理的错误分为 系统错误用户代码错误 两种
处理方式:

  • 系统错误: 在控制台输出错误调用栈 && 在前端投放一个 iview 的 notify 来表示"系统出错".
  • 用户代码错误: 输出提示 string 和错误最可能出现的行号 line, 交给前端处理
    错误触发时机:
  • 用户代码错误:
    • 语法分析的 parser 报错
    • semCheck 阶段类型错误
    • 构建符号表时的作用域错误
    • 下文提到的调度算法错误
  • 系统错误:
    • 最常见的是 undefined.get 这种访问错误, 需要用 try catch 来捕获

调度算法

y = splitjoin (data) {
		int i, j; 
		split roundrobin(1,2,1);
			for (i = 0; i < 3; i++) {
				add rTest(); // sliding(1,1); tumbling(1)
			}
		join roundrobin(1,1,1);
	};

这种情况下,
第一次调度 join 会使得 join 的执行次数为1, rTest 执行1次产生1个数据, join 执行1次也处理1个
但第二次的 rTest 来调度 join 时, rTest 执行2次产生2个数据, 而 join 只能接受处理1个, 此时调度算法会希望让 join 的调度次数*2
因此, 关于 join 的调度次数上出现歧义, 这个异常不是系统异常, 而是用户代码错误.
处理: 需要向用户抛出错误, 提示 "请检查 join roundrobin(1,1,1) 的参数是否正确"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions