想要有以下这些特性,V 站大佬们见多识广给分析分析:
最近把各种语言都看了看,发现符合大部分要求的就是 Rust 和 Go 了,但是 Rust 的限制实在太多,写起来脑壳疼。Go 的话使用 CGo 和 C 进行交互的时候貌似开销不小,性能下降得挺厉害。
然后其实还看了看 JVM 系和.NET 系。JVM 要想和 C/C++互调,基本上得有个 GraalVm 之类的东西,但是我看了一下一方面好像还不太成熟,另一方面在互相调用的时候语法也不够直接,需要很多额外的适配。.NET 的话其实现在有了 CoreRT 这样的东西,可以把 C#编译成 Native 代码,但是好多年了也不够成熟,随便写了一些 Demo 都有 Bug。
各位大佬看看,有没有什么比较合适的,感觉需要的是一个Simplified Rust?实在没办法就只能回去怼 Rust 编译器了,头疼
![]() | 1 momocraft 2019-10-08 22:56:43 +08:00 交互是什意思 以任意比例任意方式混合? 看 JNI |
2 unifier OP @momocraft jni 应该是只能从 java 调 c 吧,不能把 java 生成 dll 给 c 调用。其实大部分语言都能调起 dll 来,我们更希望能用其他语言生成 dll,这样可以慢慢替代原来用 c 写的库。 |
![]() | 3 cmdOptionKana 2019-10-08 23:04:55 +08:00 V 语言? vlang.io |
![]() | 4 cmdOptionKana 2019-10-08 23:06:19 +08:00 V 语言宣称结合了 rust 和 go 的优点 |
![]() | 5 oyjc 2019-10-08 23:06:42 +08:00 nim |
6 unifier OP @cmdOptionKna 要是 vlang 真能像他说的那样那还真的挺合适,但是前段时间好像 v2 上还讨论过这玩意儿到底靠不靠谱 |
![]() | 7 Leonard 2019-10-08 23:14:58 +08:00 objc |
![]() | 8 momocraft 2019-10-08 23:16:04 +08:00 jni 有嵌入 c 的用法 (我用大西) https://docs.oracle.com/en/java/javase/11/docs/specs/jni/invocation.html |
9 arYUWang 2019-10-08 23:16:14 +08:00 不是大佬,就想抛个砖。Cython 难道不符合这个要求吗? |
![]() | 10 Trim21 2019-10-08 23:24:22 +08:00 via iPhone 除了性能 cython 都符合… |
![]() | 11 clino 2019-10-08 23:27:10 +08:00 via Android lua 其他符合,就是性能可能不符,但已经是动态语言里最厉害的了 |
12 bequt 2019-10-08 23:51:45 +08:00 via Android @zacharyjia vlang 年底可以自举了吧 这货最近是真的活跃 |
![]() | 13 silhouette 2019-10-08 23:59:24 +08:00 via Android MATLAB |
14 ppphp 2019-10-09 00:30:54 +08:00 能编成动态库,那只能是编译型语言了,编译型语言就那么几种,去 llvm 和 gcc 下面看一圈不就完了 |
![]() | 15 wayslog 2019-10-09 00:47:32 +08:00 via iPad Rust 吧。学习,持续的学习,是一种能力,加油。 |
16 sosilver 2019-10-09 01:10:21 +08:00 via Android 还有个 Zig |
![]() | 17 dawn009 2019-10-09 01:48:43 +08:00 所以,没考虑 Swift 的原因是哪一条? |
![]() | 18 noqwerty 2019-10-09 01:51:20 +08:00 via Android 除了性能 R 都符合,我现在很多数据处理类的脚本用 R 比 Python 还顺手了 |
19 lizhuoli 2019-10-09 02:59:42 +08:00 via iPad @dawn009 不支持 C++调用,只能 export C。所以为啥不直接用 Objective-C++和 Rust ? Lark 就是大量这样的 Rust 代码和 OC++混编才跨平台的 |
![]() | 21 Mutoo 2019-10-09 07:45:30 +08:00 国内流行的游戏架构很多是静态语言+binding+脚本语言。 cocos2d-js (c++/js) cocos2d-lua (c++/lua) unity3d + tolua# (c#/lua) 性能不是问题,需要性能的放静态语言,需要灵活的放脚本语言。 |
![]() | 22 starsriver 2019-10-09 07:49:08 +08:00 via Android 一切基于 c。你可以自己造一个语言啊? 参考隔壁 |
![]() | 23 kran 2019-10-09 08:04:31 +08:00 via Android http://terralang.org 这个怎么样 |
![]() | 24 favourstreet 2019-10-09 08:25:01 +08:00 via Android ![]() 看来大家已经忘了 FORTRAN 也是高性能语言来着 |
![]() | 25 Kilerd 2019-10-09 08:28:14 +08:00 @favourstreet 经常在算法速度排行榜上看到他 |
![]() | 26 Kilerd 2019-10-09 08:29:35 +08:00 无船先生已经在着手做 simple rust 了,但是基本的概念都没变,所以还是 rust 好 |
![]() | 27 gimp 2019-10-09 08:49:08 +08:00 Simplified Rust 到最后就变成 Rust 了 |
![]() | 28 CraxClive 2019-10-09 08:52:24 +08:00 via Android Crystal 类似 Ruby 的脚本语言,只不过还没出 1.0。 |
![]() | 29 geelaw 2019-10-09 08:54:59 +08:00 via iPhone 如果是 Windows 上的话可以考虑用 COM 作为接口,就没这么多费事儿的了 |
30 CatCode 2019-10-09 09:17:40 +08:00 Go 没写过,不评价。 ========================== 选 Rust 要慎重,毕竟 Rust 不是一个迎合所有人的语言。 下面我也说一点儿 Rust 的缺点。 1.可以和 C/C++交互,在动态库层次上进行互相调用,即能编译成动态库给 C/C++调用,也能调用 C/C++生成的动态库; Rust 在这个方面支持是支持,但还是不够方便,而且没有 Safe Rust 的保障。要折腾的话需要点儿毅力。 2. 有统一的包管理机制( C/C++千奇百怪的编译系统和依赖管理实在是头疼),各类常用库较为齐全; Rust 的包管理确实不错。但是如果某些依赖项还依赖到了 C/C++的东西还是蛋疼。各类常用库的话,可以说是比较齐了;但是某些库可能是社区维护的。 3. 性能较高,应该是 Go 或者更高级别的; 写不好的话,性能也高不到哪儿去。初学 Rust 的时候我滥用 clone() to_owned()这些,可以“绕过”借用检查,但是。。。。 4. 语法相对简单,开发效率较高。 Rust 的语法简单???不过确实习惯了的话,看着还是挺规整的。 ========================== 没有完美,只是适合 |
31 lyy16384 2019-10-09 09:44:52 +08:00 从 c/c++调用 c#的官方方式是用托管 C++包装一下 |
![]() | 32 tt67wq 2019-10-09 09:46:08 +08:00 https://nim-lang.org/ 不怕坑可以试试 刚刚 1.0 |
![]() | 33 muxueqz 2019-10-09 10:07:51 +08:00 Nim 基本符合你的需求 1.可以和 C/C++交互,在动态库层次上进行互相调用,即能编译成动态库给 C/C++调用,也能调用 C/C++生成的动态库; Nim 可以调用 so 也可以编译生成 so 给其它语言使用 2. 有统一的包管理机制( C/C++千奇百怪的编译系统和依赖管理实在是头疼),各类常用库较为齐全; Nim 内置了现代化的包管理,现在的生态也已初具规模(V 还只有 20 个 module 吧?) 3. 性能较高,应该是 Go 或者更高级别的; Nim 性能接近 C,超过 Go 4. 语法相对简单,开发效率较高。 像 Python 一样的语法,非常简单,开发效率很高 |
34 aliwalker 2019-10-09 15:18:24 +08:00 Dlang. |
![]() | 39 muxueqz 2019-10-12 23:35:33 +08:00 @clino 1. 自带电池还可以,碰到问题可以去官方论坛和聊天室问 2. 与 Python 互相调用非常方便,Nim 可以生成 python 的 C 模块( so 文件),也可以使用 python 模块(需要 python-devel ) |
![]() | 42 clino 2019-11-06 15:46:12 +08:00 楼主最后选了啥? |