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 · 2 天前 · 3798 次点击

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

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

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

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

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

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

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

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

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

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