首先我还是很喜欢 Rust 的所有权系统的,我觉得这是当下最为优雅的无 GC 内存管理方案。但不可否认的是,如果我们面向的是业务开发而非底层开发,大多数情况并不是不能接受 GC 带来的性能损耗。但所有权管理带来的陡峭学习曲线,对于技术团队搭建无疑是个巨大挑战(应该没人会否认培养一个成熟 Rust 工程师的难度要远远高于 Java/Go 吧)
所以有没有这样一门语言,在移除所有权系统并提供 GC 的前提下,保留 Rust 的以下特点(按重要性排列):
前五点可以认为是必要项,后三点属于加分项
1
zhangxzh 2022-08-08 17:38:05 +08:00 via Android 1
可以关注下 kotlin native 的发展
|
2
libook 2022-08-08 17:51:12 +08:00
JS ?
1. 弱类型可不可以。 2. 不知道咋样才算优雅,至少有简单成熟的方案可以检查空值,以及是不是有 try/catch 就方便一些。 3. 函数式编程是完全可以的,lambda 表达式啥的都有,可以确认一下是不是能满足所提到的“高阶函数”表达方法。 4. 有模式匹配。 5. 非常 Duck typing ,比如一些处理数组的方法实际上是基于迭代器,一个对象只要实现迭代器就可以用这些。 6. 支持异步编程,引擎可以同时提供非阻塞,引擎底层用了协程进行优化,对开发者透明。 7. 不支持宏。 8. 依赖虚拟机。 |
3
hxsf 2022-08-08 17:52:50 +08:00 via iPhone
所有类型都包一层 mutex arc ?
|
4
qmzhixu 2022-08-08 17:53:15 +08:00
c#
|
5
icyalala 2022-08-08 17:55:02 +08:00
dotnet AOT
|
6
2kCS5c0b0ITXE5k2 2022-08-08 17:55:07 +08:00 2
@libook js 还是端走吧. 错误处理都一团糟
|
7
kera0a 2022-08-08 17:57:46 +08:00
啥用途?后端业务开发么?
不说用途的话 Swift 都能勉强符合 插眼蹲一个答案,最近想写个后端工具,想学门新语言 |
8
novolunt 2022-08-08 17:58:39 +08:00 1
|
9
sy20030260 OP |
10
libook 2022-08-08 18:15:11 +08:00
@emeab #6 我用 JS 做了很多年后端系统了,没觉得错误处理一团糟,因为本身就是跟 Java/C 等一样的设计,除非你觉得 Java 的错误处理也是一团糟,或者你其实根本不了解 JS 怎么用。
|
11
des 2022-08-08 18:16:12 +08:00 via iPhone
前一阵不是火了一个语言 zig 嘛,你看看符合不符合你的要求?
|
12
libook 2022-08-08 18:22:58 +08:00
@sy20030260 #9 JS 套个 TS ?
其实我还是觉得,找个自己舒服的语言也仅限于自己做做个人项目,要是涉及到企业生产的话,最好还是要看生态,比如 Java 一类的主流服务端技术栈,至少不需要自己造很多轮子,可以让产品快速迭代。 很多时候开发人员个人喜好往往要为生产效率让路的,比如 Go 就是一个以开发者体验为代价来解决一些工业生产上的问题的方案。 甚至一个较大规模项目的不同部分,受限于各种技术栈的擅长领域的不同,需要同时采用几种不同的技术栈来实现。 当然扯这些稍微有点跑题了。 |
13
TWorldIsNButThis 2022-08-08 18:23:41 +08:00 via iPhone
@libook js 有 pattern matching ?
那提案才 stage 1 |
14
icyalala 2022-08-08 18:25:01 +08:00
所以 C# 也能用于服务端开发,也是通用语言,也能编译成 wasm ,也是强类型,也能编译成原生
|
15
tairan2006 2022-08-08 18:35:56 +08:00
C#吧
|
16
libook 2022-08-08 18:36:31 +08:00
@TWorldIsNButThis #13 有草案就差不多相当于有了吧,至少现在有 babel 方案,如果愿意用的话。ES 的特性迭代挺快的,没准很快就能进 Stage2 了(但也说不准)。
|
17
ecnelises 2022-08-08 18:40:54 +08:00 via iPhone
鉴于 Rust 本来就受 OCaml 启发很大,Rust with GC 大约可以看作 OCaml 换个马甲。而 OCaml 也基本能满足楼主说的每点要求。
|
18
MakHoCheung 2022-08-08 18:48:08 +08:00
Duck typing 、宏编程我不懂,其他的 Swift 都符合。不过 Swift 6 要加入所有权😓
|
19
Alexonx 2022-08-08 19:28:57 +08:00
仓颉?(笑
|
20
LeegoYih 2022-08-08 19:32:41 +08:00
平行宇宙的 Go
|
21
404neko 2022-08-08 20:28:45 +08:00
你快去搞一个
|
22
sy20030260 OP @ecnelises 涨知识了。但是简单看了下,感觉风格上和 Rust 区别还挺大的,如果说 Rust 是 70% 的 OOP + 30% 的 Functional Programming 的话,OCaml 更像是 70%的 FP + 30% 的 OOP ?
|
23
Al0rid4l 2022-08-08 22:42:11 +08:00
最接近需求的应该就是.NET 6 吧, 要抽象用 F#, 要底层控制更多用 C#, 支持 AOT, 甚至 unsafe 也能给你
|
24
WebKit 2022-08-08 23:34:43 +08:00 via Android
@MakHoCheung swift 不是只能苹果设备上用吗?
|
25
WebKit 2022-08-08 23:37:17 +08:00 via Android
感觉 kotlin 不错。就是需要 jvm 不过,现在也可以编译原生了。发展几年了,目前也不错
|
26
Leviathann 2022-08-09 00:15:21 +08:00
@sy20030260 Rust 生命周期标记的那个奇怪的单引号+字母的记法,就是来自 OCaml
OCaml 的泛型参数前面必须有单引号 而且 Rust 之父是 OCaml 的粉丝,第一版的 rustc 就是 OCaml 写的 |
27
cmdOptionKana 2022-08-09 00:46:52 +08:00
语言倒是其次,缺少第三方库是要命的。语言再怎么爽,生态没搞起来就只能玩一玩,根本不实用。
|
28
tnychn 2022-08-09 03:11:13 +08:00 1
|
29
dcsuibian 2022-08-09 05:20:54 +08:00 via Android
这就是为什么有这么多编程语言,我称之为语言杂交学
|
30
LeeReamond 2022-08-09 05:57:51 +08:00
我觉得培养一个成熟的 rust 程序员成本可能很高,但培养一个动态语言+rust 扩展程序员的成本非常低。这样你可以同时享受到动态语言的强大末端描述能力,和 99%的 rust 好处。
|
32
Chad0000 2022-08-09 07:30:41 +08:00
|
33
ymmud 2022-08-09 08:08:41 +08:00
haskell
|
34
MakHoCheung 2022-08-09 09:10:17 +08:00
|
35
cclin 2022-08-09 10:48:37 +08:00 via Android
尝试下 scala 吧,应该都满足
|
36
KDr2 2022-08-09 10:49:10 +08:00
Haskell.
|
37
icyalala 2022-08-09 10:52:32 +08:00
|
38
DonkeyBenjamin 2022-08-09 16:50:37 +08:00 1
虽然很多人推荐 C#, 但是感觉写起来风格差挺远的,远没有 rust 爽
推荐 Gleam, Elixir + Rust 的缝合怪 |
39
hez2010 2022-08-09 17:02:21 +08:00
看了一下你这条件感觉最符合的就是 C# 了,配合 .NET 7 的 NativeAOT 也能做到无虚拟机原生编译。
|
40
qbug 2022-08-11 11:37:50 +08:00
@libook 那 Rescript 应该就是最佳选择了,类 Ocaml 语法编译成 JS 跟 TS 类似但定位是子集而不是超集,有 Facebook 大厂背书,创始成员之一是国人。
|
41
xgdgsc 2022-08-24 14:51:43 +08:00 via Android 1
Julia
|
43
itfanr 2022-11-16 12:07:36 +08:00
c#11 + .Net7
|
44
itfanr 2022-11-16 12:10:36 +08:00
@DonkeyBenjamin 嗯 炒鸡喜欢 rust 的风格 一个字:舒服
|