V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

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

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

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

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

    我最早见识到提供编程语言翻译功能的工具是 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   ·   实用小工具   ·   1573 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:52 · PVG 00:52 · LAX 08:52 · JFK 11:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.