注销 M3 模型

Unregistering M3 models

当前从注册表中注销 M3 模型的首选方法是什么?

在我的项目中,我使用 Rascal 分析了约 100 个大型 java 程序,我的 JVM 慢慢地 运行 内存不足。我在旧版本的注册表中找到了 unregisterProject 方法并尝试使用此代码,但我认为它无法正常工作。

public void unregisterProject(loc project, M3 model) {
    rel[str scheme, loc name, loc src] perScheme 
      = {<name.scheme, name, src> | <name, src> <- model.declarations};

    for (str scheme <- perScheme<scheme>) {
           unregisterLocations(scheme, project.authority);
    }
}

我目前的解决方法是在这个问题上投入大量内存。

这段代码可能效果更好。它首先收集所有已注册的方案和权限对(并删除重复项),然后为剩余的唯一对调用 unregisterLocations 函数。

public void unregisterProject(loc project, M3 model) {
    schemesAndAuthorities 
      = {<name.scheme, name.authority> | <name, src> <- model.declarations};

    for (<scheme, authority> <- schemesAndAuthorities) {
           unregisterLocations(scheme, authority);
    }
}

你会试一试吗?如果它有效,我们可以通过一些测试将它添加回标准库。之前的代码基于不同的位置注册方式,因此注销不起作用。