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

2022-06-09 11:10:27 +08:00
 pheyer

我最早见识到提供编程语言翻译功能的工具是 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 学习翻译编程语言?未来是否有可能出现一种编程语言的通用翻译神器呢

3423 次点击
所在节点    奇思妙想
24 条回复
churchill
2022-06-09 11:35:27 +08:00
思而不学则殆
form language 的“翻译”不需要 AI 啦,只需要确定的场景和大量的 dirty work
cheng6563
2022-06-09 11:37:18 +08:00
jvm 上很多语言都能翻 java
qsnow6
2022-06-09 11:44:49 +08:00
A 语言有的特性、B 语言不支持咋翻译?
zglzy
2022-06-09 12:25:36 +08:00
Transpiler:
https://en.m.wikipedia.org/wiki/Source-to-source_compiler
都是确定性的东西没有什么需要用到 AI 的地方吧?除非有什么可读性要求或者设计模式的比较模糊的要求?
4ark
2022-06-09 13:08:30 +08:00
GitHub Copilot Labs 了解一下: https://githubnext.com/projects/copilot-labs/
654656413245
2022-06-09 13:31:49 +08:00
好像早期的 Kotlin 会翻译成 Java 再编译,早期的 Go 会翻译成 C 再编译
pheyer
2022-06-09 13:56:26 +08:00
@qsnow6 这种肯定是翻译不了的,本贴主要指通用翻译
pheyer
2022-06-09 14:44:54 +08:00
@4ark 它的翻译跟我这里说的翻译还是不一样啊,它的翻译是翻译成自然语言便于理解
pheyer
2022-06-09 14:52:04 +08:00
@zglzy 这里面确实收集得比较全
zagfai
2022-06-09 15:17:59 +08:00
还得你定义一个语言的基本写法,同一个小函数,一种语言下实现方法都能有十种八种。关键是编程思想,而不是单纯的译。译是没难度的
microxiaoxiao
2022-06-09 15:37:44 +08:00
兄弟你已经 out 了,我刚毕业那会就看过一本书,那些科学家在研究怎么完全自动编程,以后都失业了,翻译过来翻译过去干嘛。注意,我说的不是现在所谓的低码编程,是你把想法用类似人类的语言描述一下,自动给你产生解决方案的那种,以后可能学得是怎么正确描述一个想法
me221
2022-06-09 16:25:23 +08:00
lululau
2022-06-09 16:27:07 +08:00
C 翻译成汇编,汇编翻译成机器码。。。
zy445566
2022-06-09 17:54:28 +08:00
现在就有 Emscripten 可以把 C 转换成 javascript
xupefei
2022-06-09 18:12:53 +08:00
翻译没有难度,让翻出来的东西好看又简洁有难度😀
4ark
2022-06-10 01:38:26 +08:00
@pheyer 不是呀,它也可以从 a 语言翻译成 b 语言
zhangleshiye
2022-06-10 17:11:37 +08:00
感觉 oc->swift java->kotlin 相对于编译前端部分把? 类似 swift 或者 kotlin 都是 对应语言的超级? 感觉到词法分析到语法分析上面对应的符号都要打上标签去映射这样? oc->kotlin 就不一样了把。。 要 Kotlin 本身支持 oc 第三方库的调用?
pheyer
2022-06-10 17:36:14 +08:00
@zhangleshiye j2objc 已经支持 java 转 objective-c ,你可以参考
ecnelises
2022-06-11 00:17:37 +08:00
首先,拿 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
2022-06-13 10:36:14 +08:00
@ecnelises 专业

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/858362

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX