V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
asuraa
V2EX  ›  Go 编程语言

golang 为何不出来个 Typescript

  •  
  •   asuraa · 69 天前 · 5121 次点击
    这是一个创建于 69 天前的主题,其中的信息可能已经有所发展或是发生改变。

    golang 为何不出来个 Typescript , 很多恶心的语法,可以先使用语法糖,然后编译生成为 golang 代码,然后在编译为 golang 的可执行文件,岂不美哉?

    56 条回复    2025-04-30 15:33:54 +08:00
    vczyh
        1
    vczyh  
       69 天前
    你可以自己搞一个,将 TS 翻译成 Go
    asuraa
        2
    asuraa  
    OP
       69 天前
    @vczyh 想弄,没这个能力啊。
    vczyh
        3
    vczyh  
       69 天前
    @asuraa 我倒是觉得 Go 没这个动力和需求,你说他图啥
    asuraa
        4
    asuraa  
    OP
       69 天前
    @vczyh 好像也是,go 本身就有生成的 比如 ent 这种
    zhanying
        5
    zhanying  
       69 天前 via Android
    ts.go (
    gongym
        6
    gongym  
       69 天前
    给你个参考
    https://github.com/ccxt/ccxt
    我没仔细研究过,看 readme 其中的 go 库是用 ts 生成的
    go/ in Go (generated from TS)
    bruce0
        7
    bruce0  
       69 天前   ❤️ 1
    这不就是 GO Plus Plus 吗
    NessajCN
        8
    NessajCN  
       69 天前
    嫌 go 恶心直接去写 C 不就完了
    go 又不像 jvav 那样必须要运行时
    编译两遍意义何在?

    或者说你是不是不知道 go 编译完是二进制机器码?
    InkStone
        9
    InkStone  
       69 天前
    甭管怎么理解 Go 的语法好坏,用 Go 就是图它编译快、上手简单,糙又猛。你给整 ts 那一套,那对 Go 的用户来说就是无事生非啊。
    ninjashixuan
        10
    ninjashixuan  
       69 天前
    这么不想写 go 换个语音写嘛,没必要这么纠结。
    TuringGunner
        11
    TuringGunner  
       69 天前
    后端能选择的语言太多了,又不像前端选择有限。觉得不爽换一门语言就完事了
    lewinzheng
        12
    lewinzheng  
       69 天前
    fffq
        13
    fffq  
       69 天前
    try catch 才难受呢
    Vegetable
        14
    Vegetable  
       69 天前   ❤️ 1
    go 又不是解释型语言,我为什么要编译为 go, 而不是一步到位编译为最终产物呢?
    bronyakaka
        15
    bronyakaka  
       69 天前
    @NessajCN 虽然但是,go 的确必须依赖运行时。java 那是虚拟机
    vfs
        16
    vfs  
       69 天前
    这么说吧, 如果让我在 typescript 的语法和 go 的语法中选, 我还是选 go. 所谓"恶心的语法"可能正是权衡之后的选择
    datou
        17
    datou  
       69 天前
    go++?
    asuraa
        18
    asuraa  
    OP
       69 天前
    @NessajCN c 需要自己管理内存比较麻烦,编译慢,go 内存自动管理也是有 gc 的,也是有一个 runtime 的

    @Vegetable 那就得做个新语言了,难道高多了
    liaohongxing
        19
    liaohongxing  
       69 天前
    为什么都说 go 简单呢,go 看似语法简单,但是组合到一起可不简单 。

    比如:
    https://github.com/SagerNet/sing-box

    https://github.com/pion/webrtc
    liaohongxing
        20
    liaohongxing  
       69 天前
    songray
        21
    songray  
       69 天前
    国内有个开发者搞了基于 Go 的凹语言。
    但是说实话,定位很奇怪,品味也很奇怪,也许你可以参考它 fork 一个自己的。
    flyqie
        22
    flyqie  
       69 天前 via Android
    @liaohongxing #19

    没看懂你说的组合到一起不简单。。

    本身探讨的就是语法,跟项目没什么关系。

    在语法上 go 确实简单甚至简陋。
    wogogoing
        23
    wogogoing  
    PRO
       69 天前
    这不就是许式伟大佬搞的那个 go++ ?
    crysislinux
        24
    crysislinux  
       69 天前 via Android
    应该是 babel ,想要什么搞什么。
    Alias4ck
        25
    Alias4ck  
       69 天前
    楼主这个问题 突然想到了之前的 typescript 用 go 重写 哈哈哈

    https://github.com/microsoft/typescript-go
    VVVYGD
        26
    VVVYGD  
       69 天前
    应该给 ts 搞个 符合 PLAN9 的编译器
    treblex
        27
    treblex  
       69 天前
    你是否在寻找 https://haxe.org/ ,虽然暂时没有 go 了
    Haxe 可以构建跨平台应用程序,支持 JavaScript 、C++、C#、Java 、JVM 、Python 、Lua 、PHP 和 Flash ,并允许访问各平台的原生功能。Haxe 拥有自己的虚拟机( HashLink 和 NekoVM ),但也可以在解释模式下运行。
    asuraa
        28
    asuraa  
    OP
       69 天前
    @Alias4ck 哈哈 要是给 ts 弄个编译器就行了
    codersdp1
        29
    codersdp1  
       69 天前
    @liaohongxing #19 咋不把 k8s 搬出来
    yazinnnn0
        30
    yazinnnn0  
       69 天前
    为什么要做 go 的前端? 做 llvm 的前端不好吗
    Belmode
        31
    Belmode  
       69 天前
    @yazinnnn0 #30 ......照这样说,我干嘛还去写 GO ,我直接写 Java 不行吗,反正最后编译成 GO 。
    woniu7
        32
    woniu7  
       69 天前
    ts 是因为 js 是浏览器唯一语言,整个特性多表达能力强的编译 go ??直接编译二进制不好吗
    pkoukk
        33
    pkoukk  
       69 天前
    @bronyakaka 啥运行时?说出来听听
    cenbiq
        34
    cenbiq  
       69 天前   ❤️ 1
    因为这是一个伪命题,如果某语言语法性能各方面吊打或者持平 GO ,且能编译成 GO ,那么它就不会编译成 GO ,而是直接编译成二进制文件,从而成为一门与 GO 无关的语言。
    bronyakaka
        35
    bronyakaka  
       69 天前
    @pkoukk go 的 runtime 不是运行时???
    pkoukk
        36
    pkoukk  
       68 天前
    @bronyakaka #35 你是不是分不清什么叫 SDK 什么叫 RUNTIME ?
    gloeaerris
        37
    gloeaerris  
       68 天前
    我觉得是楼主理解错了,楼上的一众大佬也没理解你说的,ts 代码转换成 js 代码这一步严格来说不应该叫编译,应该叫转换或者转译,只不过前端的开发现在已经习惯叫编译了,前端的编译跟后端的编译完全不是一个东西,这个就是定义产生的歧义,纯属个人见解哈。
    xixi1412
        38
    xixi1412  
       68 天前
    这个项目可能符合你的要求。
    https://github.com/borgo-lang/borgo
    kneo
        39
    kneo  
       68 天前 via Android
    @gloeaerris 转译也是编译的一种,严格来说,用编译没有问题。
    bronyakaka
        40
    bronyakaka  
       68 天前
    @pkoukk #36 你哪只眼睛看到 SDK 了???无中生有??一直不都是在说运行时吗
    bronyakaka
        41
    bronyakaka  
       68 天前
    @pkoukk #36 眼睛不要就捐出去
    bronyakaka
        42
    bronyakaka  
       68 天前
    @pkoukk #36 我看是你自己搞不清 SDK ,这上面哪点和 SDK 有关系吗?
    bronyakaka
        43
    bronyakaka  
       68 天前
    @pkoukk #36 你告诉我 runtime 字面翻译是什么,不是运行时还是 sdk ??还是你觉得 go 没有 runtime ?
    bronyakaka
        44
    bronyakaka  
       68 天前
    @pkoukk #36 屏蔽了,别来恶心我
    pkoukk
        45
    pkoukk  
       68 天前
    @bronyakaka #40 看来你确实不知道。
    cheng6563
        46
    cheng6563  
       68 天前
    长工具链的开发模式更恶心,前段时间接手了一个老前端项目,npm install 一下又是要我下 VC++又是要我装 python2 ,把我恶心坏了。
    zhaoahui
        47
    zhaoahui  
       68 天前   ❤️ 1
    Go 不需要语法糖
    UnluckyNinja
        48
    UnluckyNinja  
       68 天前
    @asuraa #18 我觉得你的理解正好反了,如果一个语言只改语法不修改目标语言,那相当于只修改 parser 的部分,其它基本不用动,如果你把目标语言从 native 改成了源码,反而需要从零实现 AST 到源码的转换,难度不比前者低。
    chust
        49
    chust  
       68 天前
    neoblackcap
        50
    neoblackcap  
       68 天前
    @asuraa C 的编译并不慢,慢的是 C++。当然了 golang 都将编译速度看成是优化的点,那 golang 的编译速度的确快一些
    neoblackcap
        51
    neoblackcap  
       68 天前
    @UnluckyNinja 现在搞编译语言可以不那么麻烦,很多都是基于 LLVM 搞的,前端解析完也是出 LLVM IR ,后面的一系列优化都能被复用
    pkoukk
        52
    pkoukk  
       67 天前
    @chust
    你别光看标题不看内容,人家 faq 里说了“in Go the word “runtime” is just the name given to the library providing critical language services.”
    这原 po 在说 go 不像 java 需要 runtime ,他跑来说 go 也有 runtime ,你说他是什么意思?要么是抠字眼要么是不懂什么是 runtime 呗
    asuraa
        53
    asuraa  
    OP
       67 天前
    @UnluckyNinja 我意思就是模仿 ts ,实现类似的语法,但是转移转译为 go 后编译
    asuraa
        54
    asuraa  
    OP
       67 天前
    @neoblackcap LLVM 就很慢了,go 是 PLAN9 的体系 编译器来飞快啊
    xgdgsc
        55
    xgdgsc  
       67 天前 via Android
    @asuraa llvm 取决于怎么用了,如果像 julia 在 REPL 里 Revise 一点编译一点就跑的话还是很舒服的,从头编译慢点,但只在安装包的时候进行,可以接受
    guanzhangzhang
        56
    guanzhangzhang  
       67 天前
    python 搞个 typetion 就好了,各种乱 return 和乱用类型
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   840 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:08 · PVG 05:08 · LAX 14:08 · JFK 17:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.