我刚刚查看了NACA的页面和文档。根据他们的文档:
“生成的Java使用类似于Cobol的语法。它尽可能接近原始Cobol语法,当然在Java语言的限制内。
生成的代码不像传统的本地Java,并且从应用程序的角度来看并不是面向对象的。
这是一种设计上的强烈选择,以实现Cobol开发人员平稳过渡到Java环境。目标是将业务知识留在编写原始Cobol程序的人手中。”
我没有看到示例,但是引用给出了强烈的结果味道。它是用Java编写的COBOL。
您始终可以通过在目标语言中编写解释器来构建“翻译器”。在我看来,这是一种绝对可怕的翻译语言的方式,因为您无法获得新语言的价值,而且仍然必须具有旧语言的知识才能保持结果活动。(难怪这个东西被称为“转码器”;我以前从未听说过这个术语)。
这个噱头的论据是要摆脱大型机的成本。有证据表明,转换后的程序的工作成本并没有超过节省的成本吗?我怀疑真相是运营人员通过摆脱大型机降低了成本,而他们对维护任务变得更加昂贵毫不在意。虽然这对于运营人员来说可能是合理的选择,但对于整个组织来说,这是一个愚蠢的选择。
上帝保佑那些成为这个工具受害者的人。
编辑于2010年5月:我找到了NACA输出的示例之一;其中一个他们的测试用例。这是绝对华丽的JOBOL。很幸运他们“保留”了COBOL程序员并且不想雇用任何Java程序员。当您阅读此内容时,请务必记住这是Java代码。
import idea.onlinePrgEnv.OnlineProgram;
import nacaLib.varEx.*;
public class TestLong extends OnlineProgram
{
DataSection WorkingStorage = declare.workingStorageSection();
Var W3 = declare.level(1).occurs(10).var();
Var V9Comp010 = declare.level(5).pic9(10).var();
Var V9Comp014V4 = declare.level(5).pic9(14, 4).var();
Var VX10 = declare.level(5).picX(10).var();
public void procedureDivision()
{
setAssertActive(true);
move("9876543210", VX10);
assertIfDifferent("9876543210", VX10);
move(VX10, V9Comp010);
long l = V9Comp010.getLong();
assertIfFalse(l == 9876543210L);
multiply(1000, V9Comp010).to(V9Comp014V4);
assertIfFalse(9876543210000L == V9Comp014V4.getLong());
String cs = V9Comp010.toString();
cs = V9Comp014V4.toString();
assertIfDifferent("9876543210000.0000", V9Comp014V4);
inc(V9Comp010);
assertIfFalse(9876543211L == V9Comp010.getLong());
CESM.returnTrans();
}
孩子们:这只有专业人员才能做。请勿在家中尝试。