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

2022-08-08 17:32:49 +08:00
 sy20030260

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

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

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

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

5482 次点击
所在节点    Rust
44 条回复
zhangxzh
2022-08-08 17:38:05 +08:00
可以关注下 kotlin native 的发展
libook
2022-08-08 17:51:12 +08:00
JS ?

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

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

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

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

当然扯这些稍微有点跑题了。
TWorldIsNButThis
2022-08-08 18:23:41 +08:00
@libook js 有 pattern matching ?
那提案才 stage 1
icyalala
2022-08-08 18:25:01 +08:00
所以 C# 也能用于服务端开发,也是通用语言,也能编译成 wasm ,也是强类型,也能编译成原生
tairan2006
2022-08-08 18:35:56 +08:00
C#吧
libook
2022-08-08 18:36:31 +08:00
@TWorldIsNButThis #13 有草案就差不多相当于有了吧,至少现在有 babel 方案,如果愿意用的话。ES 的特性迭代挺快的,没准很快就能进 Stage2 了(但也说不准)。
ecnelises
2022-08-08 18:40:54 +08:00
鉴于 Rust 本来就受 OCaml 启发很大,Rust with GC 大约可以看作 OCaml 换个马甲。而 OCaml 也基本能满足楼主说的每点要求。
MakHoCheung
2022-08-08 18:48:08 +08:00
Duck typing 、宏编程我不懂,其他的 Swift 都符合。不过 Swift 6 要加入所有权😓
Alexonx
2022-08-08 19:28:57 +08:00
仓颉?(笑
LeegoYih
2022-08-08 19:32:41 +08:00
平行宇宙的 Go

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX