V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sy20030260
V2EX  ›  Rust

有没有这样一门语言,保留 Rust 其他特性但提供 GC 能力?

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

    首先我还是很喜欢 Rust 的所有权系统的,我觉得这是当下最为优雅的无 GC 内存管理方案。但不可否认的是,如果我们面向的是业务开发而非底层开发,大多数情况并不是不能接受 GC 带来的性能损耗。但所有权管理带来的陡峭学习曲线,对于技术团队搭建无疑是个巨大挑战(应该没人会否认培养一个成熟 Rust 工程师的难度要远远高于 Java/Go 吧)

    所以有没有这样一门语言,在移除所有权系统并提供 GC 的前提下,保留 Rust 的以下特点(按重要性排列):

    1. 完整的泛型和标准集合类库
    2. 优雅的空值检查和错误处理
    3. 支持高阶函数等函数式编程范式
    4. 模式匹配
    5. 支持 Trait 或其他类似的 Duck typing
    6. 异步友好:支持协程和消息通道
    7. 宏编程
    8. 无虚拟机,原生编译

    前五点可以认为是必要项,后三点属于加分项

    第 1 条附言  ·  174 天前
    补充下两点:

    1. 主要使用场景是服务端开发,但定位为通用语言以及支持 WASM 在我看来是个很有利于长期生态发展的选项
    2. 强类型!强类型!强类型!
    44 条回复    2022-11-16 12:10:36 +08:00
    zhangxzh
        1
    zhangxzh  
       174 天前 via Android   ❤️ 1
    可以关注下 kotlin native 的发展
    libook
        2
    libook  
       174 天前
    JS ?

    1. 弱类型可不可以。
    2. 不知道咋样才算优雅,至少有简单成熟的方案可以检查空值,以及是不是有 try/catch 就方便一些。
    3. 函数式编程是完全可以的,lambda 表达式啥的都有,可以确认一下是不是能满足所提到的“高阶函数”表达方法。
    4. 有模式匹配。
    5. 非常 Duck typing ,比如一些处理数组的方法实际上是基于迭代器,一个对象只要实现迭代器就可以用这些。
    6. 支持异步编程,引擎可以同时提供非阻塞,引擎底层用了协程进行优化,对开发者透明。
    7. 不支持宏。
    8. 依赖虚拟机。
    hxsf
        3
    hxsf  
       174 天前 via iPhone
    所有类型都包一层 mutex arc ?
    qmzhixu
        4
    qmzhixu  
       174 天前
    c#
    icyalala
        5
    icyalala  
       174 天前
    dotnet AOT
    emeab
        6
    emeab  
       174 天前   ❤️ 2
    @libook js 还是端走吧. 错误处理都一团糟
    kera0a
        7
    kera0a  
       174 天前
    啥用途?后端业务开发么?
    不说用途的话 Swift 都能勉强符合

    插眼蹲一个答案,最近想写个后端工具,想学门新语言
    novolunt
        8
    novolunt  
       174 天前   ❤️ 1
    sy20030260
        9
    sy20030260  
    OP
       174 天前
    @libook 感谢提醒,忘记最重要的一点了...必须强类型
    @kera0a 感谢提醒,主要是服务端
    libook
        10
    libook  
       174 天前
    @emeab #6 我用 JS 做了很多年后端系统了,没觉得错误处理一团糟,因为本身就是跟 Java/C 等一样的设计,除非你觉得 Java 的错误处理也是一团糟,或者你其实根本不了解 JS 怎么用。
    des
        11
    des  
       174 天前 via iPhone
    前一阵不是火了一个语言 zig 嘛,你看看符合不符合你的要求?
    libook
        12
    libook  
       174 天前
    @sy20030260 #9 JS 套个 TS ?

    其实我还是觉得,找个自己舒服的语言也仅限于自己做做个人项目,要是涉及到企业生产的话,最好还是要看生态,比如 Java 一类的主流服务端技术栈,至少不需要自己造很多轮子,可以让产品快速迭代。
    很多时候开发人员个人喜好往往要为生产效率让路的,比如 Go 就是一个以开发者体验为代价来解决一些工业生产上的问题的方案。

    甚至一个较大规模项目的不同部分,受限于各种技术栈的擅长领域的不同,需要同时采用几种不同的技术栈来实现。

    当然扯这些稍微有点跑题了。
    TWorldIsNButThis
        13
    TWorldIsNButThis  
       174 天前 via iPhone
    @libook js 有 pattern matching ?
    那提案才 stage 1
    icyalala
        14
    icyalala  
       174 天前
    所以 C# 也能用于服务端开发,也是通用语言,也能编译成 wasm ,也是强类型,也能编译成原生
    tairan2006
        15
    tairan2006  
       174 天前
    C#吧
    libook
        16
    libook  
       174 天前
    @TWorldIsNButThis #13 有草案就差不多相当于有了吧,至少现在有 babel 方案,如果愿意用的话。ES 的特性迭代挺快的,没准很快就能进 Stage2 了(但也说不准)。
    ecnelises
        17
    ecnelises  
       174 天前 via iPhone
    鉴于 Rust 本来就受 OCaml 启发很大,Rust with GC 大约可以看作 OCaml 换个马甲。而 OCaml 也基本能满足楼主说的每点要求。
    MakHoCheung
        18
    MakHoCheung  
       174 天前
    Duck typing 、宏编程我不懂,其他的 Swift 都符合。不过 Swift 6 要加入所有权😓
    Alexonx
        19
    Alexonx  
       174 天前
    仓颉?(笑
    LeegoYih
        20
    LeegoYih  
       174 天前
    平行宇宙的 Go
    404neko
        21
    404neko  
       174 天前
    你快去搞一个
    sy20030260
        22
    sy20030260  
    OP
       174 天前
    @ecnelises 涨知识了。但是简单看了下,感觉风格上和 Rust 区别还挺大的,如果说 Rust 是 70% 的 OOP + 30% 的 Functional Programming 的话,OCaml 更像是 70%的 FP + 30% 的 OOP ?
    Al0rid4l
        23
    Al0rid4l  
       174 天前
    最接近需求的应该就是.NET 6 吧, 要抽象用 F#, 要底层控制更多用 C#, 支持 AOT, 甚至 unsafe 也能给你
    WebKit
        24
    WebKit  
       174 天前 via Android
    @MakHoCheung swift 不是只能苹果设备上用吗?
    WebKit
        25
    WebKit  
       174 天前 via Android
    感觉 kotlin 不错。就是需要 jvm 不过,现在也可以编译原生了。发展几年了,目前也不错
    Leviathann
        26
    Leviathann  
       174 天前
    @sy20030260 Rust 生命周期标记的那个奇怪的单引号+字母的记法,就是来自 OCaml
    OCaml 的泛型参数前面必须有单引号
    而且 Rust 之父是 OCaml 的粉丝,第一版的 rustc 就是 OCaml 写的
    cmdOptionKana
        27
    cmdOptionKana  
       174 天前
    语言倒是其次,缺少第三方库是要命的。语言再怎么爽,生态没搞起来就只能玩一玩,根本不实用。
    tnychn
        28
    tnychn  
       174 天前   ❤️ 1
    dcsuibian
        29
    dcsuibian  
       173 天前 via Android
    这就是为什么有这么多编程语言,我称之为语言杂交学
    LeeReamond
        30
    LeeReamond  
       173 天前
    我觉得培养一个成熟的 rust 程序员成本可能很高,但培养一个动态语言+rust 扩展程序员的成本非常低。这样你可以同时享受到动态语言的强大末端描述能力,和 99%的 rust 好处。
    Aloento
        31
    Aloento  
       173 天前
    @icyalala 非常赞同,尤其是 dotNet Native AOT ,是无虚拟机的纯本机代码,不能动态生成 IL
    Chad0000
        32
    Chad0000  
       173 天前
    @Aloento #31
    @icyalala #14

    在 V 站吹 C#没用,Mac 占有率低成那样都能吹得风生水起,C#市场占有率也只是在国内比 Java 差一个档次却被踩得不成样。不如在外默默写 C#,啥都不说。
    ymmud
        33
    ymmud  
       173 天前
    haskell
    MakHoCheung
        34
    MakHoCheung  
       173 天前
    cclin
        35
    cclin  
       173 天前 via Android
    尝试下 scala 吧,应该都满足
    KDr2
        36
    KDr2  
       173 天前
    Haskell.
    icyalala
        37
    icyalala  
       173 天前
    @Chad0000 其实我不怎么写 C#,只是恰好觉得 C# 比较符合楼主列的条件...
    @MakHoCheung Swift 没有 GC ,本质还是所有权那套,只是默认有编译器 ARC
    DonkeyBenjamin
        38
    DonkeyBenjamin  
       173 天前   ❤️ 1
    虽然很多人推荐 C#, 但是感觉写起来风格差挺远的,远没有 rust 爽
    推荐 Gleam, Elixir + Rust 的缝合怪
    hez2010
        39
    hez2010  
       173 天前
    看了一下你这条件感觉最符合的就是 C# 了,配合 .NET 7 的 NativeAOT 也能做到无虚拟机原生编译。
    qbug
        40
    qbug  
       171 天前
    @libook 那 Rescript 应该就是最佳选择了,类 Ocaml 语法编译成 JS 跟 TS 类似但定位是子集而不是超集,有 Facebook 大厂背书,创始成员之一是国人。
    xgdgsc
        41
    xgdgsc  
       158 天前 via Android   ❤️ 1
    Julia
    mizuBai
        42
    mizuBai  
       77 天前 via iPhone
    @xgdgsc Julia 除了预热的时候达不到 rust 的速度,几乎完全符合这个问题了
    itfanr
        43
    itfanr  
       74 天前
    c#11 + .Net7
    itfanr
        44
    itfanr  
       74 天前
    @DonkeyBenjamin 嗯 炒鸡喜欢 rust 的风格 一个字:舒服
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   342 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 19:18 · PVG 03:18 · LAX 11:18 · JFK 14:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.