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