代码之家  ›  专栏  ›  技术社区  ›  NiallJG

如何检测移植的代码?

  •  1
  • NiallJG  · 技术社区  · 15 年前

    如果您将代码从一种语言移植到另一种语言,如何检测到这一点?

    假设你把代码从C++移植到Java,你怎么知道?

    在Java中设计和实现的程序和一个几乎相同的程序移植到Java之间有什么不同?

    2 回复  |  直到 12 年前
        1
  •  6
  •   Alex Martelli    15 年前

    如果移植操作正确(由两种语言的专家完成,并准备将源语言的习语翻译成目标语言中最相似的习语),则无法判断是否发生了任何移植操作。

    如果移植工作做得不好,您有时可以识别出愚蠢的音译成语…但这很难与那些用他们所知甚少的语言编写新程序的人区分开来,他们只是把习语和他们所知的语言进行了愚蠢的音译;-)。

        2
  •  0
  •   Valentin H    12 年前

    根据隐藏端口的意图付出了多大的努力,可能很容易检测不到。

    我将为此任务使用模式识别。想想“特性”,它将表明代码的相似性。从每个代码中提取这些特性并进行比较。

    例如: 一个特征可以是相似的符号名。使用ctags或正则表达式提取所有符号,使所有符号都小写,使uniq对这两个列表排序并进行比较。 另一个可能的功能: 类别列表+成员数量,例如:

    MyClass1 10
    ...
    

    方法列表+控制块序列。例如:

    doSth() if, while, if, ix, case
    ...
    

    另一个简单的方法是将代码表示为图片-例如,将代码加载为Word中的文本,并将字体大小设置为1。人类很擅长比较图片。对于代码可视化的另一个想法,您可以检查 http://www.se-radio.net/2009/03/episode-130-code-visualization-with-michele-lanza/