百科问答小站 logo
百科问答小站 font logo



是否存在将一种编译语言翻译成另外一种编程语言的算法? 第1页

  

user avatar   s.invalid 网友的相关建议: 
      

遍地都是,没用所以几乎没人知道而已。


比如如果你玩游戏,PC、手机上都有pce任天堂或者街机、PS模拟器。这种东西其实就是把一种硬件上的机器语言实时翻译到另一种硬件上执行--两者结构可以截然不同。

类似的,Windows的hyper-v、著名的xen、Linux下的KVM还有独立的VMware以及各种Android模拟器,其实都是一样的东西。

更狠一些,Java把自己的代码编译成一种中间语言,也就是JVM字节码;然后各平台移植JVM,跑这种中间码。

然后,JVM成功之后,微软也搞了个类似的c#…

再后来,各种语言都可以先编译到JVM字节码,然后跑在JVM上…

然后,中间语言跑JVM还是慢,于是边跑边编译,这叫即地编译,JIT,just in time…

然后,为了抄袭…哦不,为了研究,老早就有机器码到c的反编译器,Java字节码的反编译更完善一些,我甚至见过国内市场上有把Google play上面的免费应用反编译然后添加个收费项目再发布的--我甚至不小心在上面花了6块钱。


总之,任何语言到任何语言的编译都能做,包括图灵机语言和函数式语言之间都能随便互译。只看有没有需求了。

另外,如果没有性能之类需求的话,这种翻译工作也非常简单。编译原理学个入门就足够了--这也是乱七八糟各种模拟器反编译器泛滥的原因。


事实上,设计一门新语言,其实很多也就是简单的翻译到另一种高级语言而已。比如早期的c++就是直接翻译到c的,它的翻译器叫cfront。

尤其Linux下,很多新语言都是翻译到c完事,接下来有强大的GCC帮忙优化,比你自己写好得多。


user avatar   haozhi-yang-41 网友的相关建议: 
      

首先,所有功能完备的编程语言,在实现功能的角度来说,都是等价的。也就是说,只要功能相同,基本上都是可以无阻碍的相互翻译的。


似乎通常这种翻译都是单向进行的,比如c到汇编,python到c,这种高级语言到低级语言的翻译,那么其他类型,比如同级别的语言之间的翻译,低级语言到高级语言的翻译,难点在哪里呢?

并没有任何难点。而且因为低级语言往往语言特性少,所以实际翻译起来甚至可能会更简单(只考虑功能实现,不考虑性能)。

你之所以看不到实际项目,仅仅是因为没有实际需求,所以没人做。

毕竟由高级语言翻译到低级语言,往往有性能优势(解释执行->本地执行),以及一些特殊场景下的可移植性优势(例如说到嵌入式平台,且不想完整移植整个vm)。

但是反过来,或者说相似类型的语言,为什么要翻译一道呢?


user avatar   wang-shan-81-17-10 网友的相关建议: 
      

如果你听说过cfront,就会明白把一种高级语言翻译成另一种高级语言是完全可行的,但是,即使(早期的)c++到c,两种这么相近的语言,翻译结果也不是适宜人类阅读的,并不是在保留c++源码大致结构的前提下只修改一些c语言不存在的特性,而是经过词法分析语法分析,把程序都拆散了,再输出功能等效而基本看不懂的c语言源码,跟直接输出汇编语言或者中间语言区别不大。




  

相关话题

  为什么「Putin」会被翻译成「普京」? 
  请问“对标”如何翻译成英文? 
  哪里有 brainfuck 编程语言的相关学习资料与下载? 
  专攻哪门编程语言好? 
  在做游戏翻译时,有什么技巧方面的运用? 
  现阶段的编程语言都有什么缺陷? 
  如何信达雅的翻译英语“We stand for wildlife,stand with us.”? 
  为什么汉语中欧美非澳等地的人名是音译的,日韩等东亚国家人名是翻译过来的? 
  高薪养廉 怎么翻译? 
  你是如何自学R语言的? 

前一个讨论
开车时遇到公交和出租强行变道超车时,你会怎么做?
下一个讨论
经常口腔溃疡有哪些愈合的偏方吗?





© 2024-11-25 - tinynew.org. All Rights Reserved.
© 2024-11-25 - tinynew.org. 保留所有权利