首先我还是很喜欢 Rust 的所有权系统的,我觉得这是当下最为优雅的无 GC 内存管理方案。但不可否认的是,如果我们面向的是业务开发而非底层开发,大多数情况并不是不能接受 GC 带来的性能损耗。但所有权管理带来的陡峭学习曲线,对于技术团队搭建无疑是个巨大挑战(应该没人会否认培养一个成熟 Rust 工程师的难度要远远高于 Java/Go 吧)
所以有没有这样一门语言,在移除所有权系统并提供 GC 的前提下,保留 Rust 的以下特点(按重要性排列):
前五点可以认为是必要项,后三点属于加分项
![]() | 1 zhangxzh 2022-08-08 17:38:05 +08:00 via Android ![]() 可以关注下 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 ![]() @libook js 还是端走吧. 错误处理都一团糟 |
![]() | 7 kera0a 2022-08-08 17:57:46 +08:00 啥用途?后端业务开发么? 不说用途的话 Swift 都能勉强符合 插眼蹲一个答案,最近想写个后端工具,想学门新语言 |
8 novolunt 2022-08-08 17:58:39 +08:00 ![]() |
![]() | 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 |
![]() | 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 ![]() |
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 ktqFDx9m2Bvfq3y4 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 ![]() 虽然很多人推荐 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 ![]() 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 的风格 一个字:舒服 |