想要有以下这些特性,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
zacharyjia 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
zacharyjia OP @cmdOptionKana 要是 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 1
看来大家已经忘了 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
楼主最后选了啥?
|