未来是否有可能出现一种编程语言的翻译神器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
pheyer
V2EX    奇思妙想

未来是否有可能出现一种编程语言的翻译神器

  pheyer 2022-06-09 11:10:27 +08:00 3934 次点击
这是一个创建于 1220 天前的主题,其中的信息可能已经有所发展或是发生改变。

我最早见识到提供编程语言翻译功能的工具是 JSPatch ,这是一个若干年前可以给线上 iOS app 修复 bug 的神器,因为补丁代码是 js 语言的,需要把 OC 代码翻译成 JS 成代码,故作者也提供了一个 JSPatch Convertor ,把这个翻译过程做到了自动化。

最近再次见识到类似的翻译工具是 Swiftify ,它的功能是把 OC 代码翻译成 Swift 代码,对于有 OC 基础的 Swift 初学者来说这个工具可太实用了,把之前写的 OC 代码用这个工具翻译一遍,然后对照阅读学习,就大概知道基本的 Swift 代码该怎么写的,不用看 Swift 入门文档感觉可以迅速上手的样子。当然两种语言的编程思维还是有略微不同的,高级玩法靠翻译是做不到的,还是需要看文档进行进阶学习。不过,这个工具可不是免费的,还挺贵,它的设计用途我想其实并不是像上面所说的方便有 OC 基础的开发者快速入门 Swift ,而是方便企业的开发人员快速把现在的 OC 项目快速批量转换为 Swift 项目,这应该才是它的商业用途所在。只是完美转换肯定是不存在的,小修小改应该还是有的,这点修改的时间相比自动化翻译大幅提高的效率微不足道了。

以上两个例子都是针对特定编程语言的,我想翻译其它编程语言应该也是有需求的,特别是对新语言入门初学者来说,比如把 java 代码翻译翻译为 swift 代码,java 代码翻译为 python 代码

现如今自然语言的翻译神器有很多了,编程语言的规则比自然语言的规则更明确更规范,感觉上好像翻译编程语言更简单一些?是否有可能让 AI 学习翻译编程语言?未来是否有可能出现一种编程语言的通用翻译神器呢

第 1 条附言    2022-06-09 15:19:58 +08:00
看起来 GitHub Copilot Labs 有希望成为这个神器,解释代码和翻译代码的功能都有的
24 条回复    2022-06-25 19:49:40 +08:00
churchill
    1
churchill  
   2022-06-09 11:35:27 +08:00   2
思而不学则殆
form language 的“翻译”不需要 AI 啦,只需要确定的场景和大量的 dirty work
cheng6563
    2
cheng6563  
   2022-06-09 11:37:18 +08:00   1
jvm 上很多语言都能翻 java
qsnow6
    3
qsnow6  
   2022-06-09 11:44:49 +08:00
A 语言有的特性、B 语言不支持咋翻译?
zglzy
    4
zglzy  
   2022-06-09 12:25:36 +08:00 via Android
Transpiler:
https://en.m.wikipedia.org/wiki/Source-to-source_compiler
都是确定性的东西没有什么需要用到 AI 的地方吧?除非有什么可读性要求或者设计模式的比较模糊的要求?
4ark
    5
4ark  
   2022-06-09 13:08:30 +08:00
GitHub Copilot Labs 了解一下: https://githubnext.com/projects/copilot-labs/
654656413245
    6
654656413245  
   2022-06-09 13:31:49 +08:00
好像早期的 Kotlin 会翻译成 Java 再编译,早期的 Go 会翻译成 C 再编译
pheyer
    7
pheyer  
OP
   2022-06-09 13:56:26 +08:00
@qsnow6 这种肯定是翻译不了的,本贴主要指通用翻译
pheyer
    8
pheyer  
OP
   2022-06-09 14:44:54 +08:00
@4ark 它的翻译跟我这里说的翻译还是不一样啊,它的翻译是翻译成自然语言便于理解
pheyer
    9
pheyer  
OP
   2022-06-09 14:52:04 +08:00
@zglzy 这里面确实收集得比较全
zagfai
    10
zagfai  
   2022-06-09 15:17:59 +08:00
还得你定义一个语言的基本写法,同一个小函数,一种语言下实现方法都能有十种八种。关键是编程思想,而不是单纯的译。译是没难度的
microxiaoxiao
    11
microxiaoxiao  
   2022-06-09 15:37:44 +08:00 via Android
兄弟你已经 out 了,我刚毕业那会就看过一本书,那些科学家在研究怎么完全自动编程,以后都失业了,翻译过来翻译过去干嘛。注意,我说的不是现在所谓的低码编程,是你把想法用类似人类的语言描述一下,自动给你产生解决方案的那种,以后可能学得是怎么正确描述一个想法
lululau
    13
lululau  
   2022-06-09 16:27:07 +08:00
C 翻译成汇编,汇编翻译成机器码。。。
zy445566
    14
zy445566  
   2022-06-09 17:54:28 +08:00
现在就有 Emscripten 可以把 C 转换成 Javascript
xupefei
    15
xupefei  
   2022-06-09 18:12:53 +08:00 via iPhone
翻译没有难度,让翻出来的东西好看又简洁有难度
4ark
    16
4ark  
   2022-06-10 01:38:26 +08:00 via iPhone
@pheyer 不是呀,它也可以从 a 语言翻译成 b 语言
zhangleshiye
    17
zhangleshiye  
   2022-06-10 17:11:37 +08:00
感觉 oc->swift java->kotlin 相对于编译前端部分把? 类似 swift 或者 kotlin 都是 对应语言的超级? 感觉到词法分析到语法分析上面对应的符号都要打上标签去映射这样? oc->kotlin 就不一样了把。。 要 Kotlin 本身支持 oc 第三方库的调用?
pheyer
    18
pheyer  
OP
   2022-06-10 17:36:14 +08:00
@zhangleshiye j2objc 已经支持 java 转 objective-c ,你可以参考
ecnelises
    19
ecnelises  
   2022-06-11 00:17:37 +08:00   2
首先,拿 Java/Kotlin 或者 Objective-C/Swift 这类语言互转来说明复杂程度不合理,因为它们在设计阶段的要点就是和前代语言充分兼容。这里是 Swift 社区关于实现和 C++互操作的设计理念文档: https://github.com/apple/swift/blob/main/docs/CppInteroperability/CppInteroperabilityManifesto.md ,感受一下这个长度。并且 (1) 这个文档还没完成;(2) Swift 和 C++的互操作因为 ABI 原因,仅限于和 Clang ,而 Swift 团队很多人也是 Clang 团队的成员;(3) 语言要素上 Swift 和 C++并没有差特别多。其他语言恐怕很难有这些条件吧?

其次,因为编程语言抽象层次各不相同,高抽象层次容易转换成低抽象层次,反过来就很难。比如一段合法的 C++代码,可能就没办法转成( safe 的) Rust ,因为违反了生命期和所有权约定;操作内存的 C 代码也不太可能翻译到 JS.

如果想在尽量保留高级语言信息的前提下在语言之间做翻译(否则可以说都编译到汇编也算相互翻译),那可能需要每个语言都限制用到的特性,保留一个抽象相似的公共子集,类似 asm.js ,在这个层面做相互翻译比较现实。这么做依然需要相当大的投入,但收益却一般。想到的一个例子是 Eclipse 曾经将 C++写的 Clang 翻译成 Java ,以集成到项目里做 C/C++语法分析。
pheyer
    20
pheyer  
OP
   2022-06-13 10:36:14 +08:00
@ecnelises 专业
qrobot
    21
qrobot  
   2022-06-17 16:29:30 +08:00
啊, 翻译这种工作不是一直在做吗? 这个叫做编译语言

例如 C 语言会最后会编译连接转换成字节吗 0101


例如 Java 的 GWT(Google Web Toolkit) 将 Java 代码转换成 js 代码。

还有 React Vue Angular typescript 最后把这种特殊的语法转成 JS HTML CSS

这种工具一直都有。 也一直能做,但是没有必要。 就比如 Kotlin 转 Java 为什么不直接转成 Class ?
qrobot
    22
qrobot  
   2022-06-17 16:31:38 +08:00
@pheyer 甚至还有 WineQH 这种神奇的存在
cszchen
    23
cszchen  
   2022-06-24 17:32:32 +08:00 via iPhone
已经有小范围的实现了,你 gayhub 搜一下 ccxt
pheyer
    24
pheyer  
OP
   2022-06-25 19:49:40 +08:00
@cszchen 搜了一下,好像完全不符合帖子里的描述
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3570 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 28ms UTC 04:33 PVG 12:33 LAX 21:33 JFK 00:33
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86