百科问答小站 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语言源码,跟直接输出汇编语言或者中间语言区别不大。




  

相关话题

  如何备考翻译硕士? 
  有哪些可以媲美「可口可乐」的翻译? 
  Parser Combinator 在语法解析的当中处于怎样的位置? 
  在翻译类似《星球大战》的外文电影或者小说时,如何保留且让人理解其中原本外文语境的梗? 
  在中文文章中用《》括起英文作品是错误的吗? 
  巴赫的the well-tempered是否应该被翻译成平均律? 
  掌握很多门计算机编程语言会不会记串啊?记串了咋办? 
  有哪些c++的书推荐? 
  《五等分的花嫁》和《五等分的新娘》哪个翻译好? 
  如何向外国人解释中国文化中的「面子」? 

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





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