V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zacharyjia
V2EX  ›  问与答

有没有这样一种编程语言

  •  
  •   zacharyjia · 2019-10-08 22:40:24 +08:00 · 6015 次点击
    这是一个创建于 1651 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想要有以下这些特性,V 站大佬们见多识广给分析分析:

    1. 可以和 C/C++交互,在动态库层次上进行互相调用,即能编译成动态库给 C/C++调用,也能调用 C/C++生成的动态库;
    2. 有统一的包管理机制( C/C++千奇百怪的编译系统和依赖管理实在是头疼),各类常用库较为齐全;
    3. 性能较高,应该是 Go 或者更高级别的;
    4. 语法相对简单,开发效率较高。

    最近把各种语言都看了看,发现符合大部分要求的就是 Rust 和 Go 了,但是 Rust 的限制实在太多,写起来脑壳疼。Go 的话使用 CGo 和 C 进行交互的时候貌似开销不小,性能下降得挺厉害。

    然后其实还看了看 JVM 系和.NET 系。JVM 要想和 C/C++互调,基本上得有个 GraalVm 之类的东西,但是我看了一下一方面好像还不太成熟,另一方面在互相调用的时候语法也不够直接,需要很多额外的适配。.NET 的话其实现在有了 CoreRT 这样的东西,可以把 C#编译成 Native 代码,但是好多年了也不够成熟,随便写了一些 Demo 都有 Bug。

    各位大佬看看,有没有什么比较合适的,感觉需要的是一个Simplified Rust?实在没办法就只能回去怼 Rust 编译器了,头疼🤣

    42 条回复    2019-11-06 15:46:12 +08:00
    momocraft
        1
    momocraft  
       2019-10-08 22:56:43 +08:00
    交互是什麼意思 以任意比例任意方式混合?
    看過 JNI 嗎
    zacharyjia
        2
    zacharyjia  
    OP
       2019-10-08 23:01:32 +08:00 via iPhone
    @momocraft jni 应该是只能从 java 调 c 吧,不能把 java 生成 dll 给 c 调用。其实大部分语言都能调起 dll 来,我们更希望能用其他语言生成 dll,这样可以慢慢替代原来用 c 写的库。
    cmdOptionKana
        3
    cmdOptionKana  
       2019-10-08 23:04:55 +08:00
    V 语言? vlang.io
    cmdOptionKana
        4
    cmdOptionKana  
       2019-10-08 23:06:19 +08:00
    V 语言宣称结合了 rust 和 go 的优点
    oyjc
        5
    oyjc  
       2019-10-08 23:06:42 +08:00
    nim
    zacharyjia
        6
    zacharyjia  
    OP
       2019-10-08 23:12:11 +08:00 via iPhone
    @cmdOptionKana 要是 vlang 真能像他说的那样那还真的挺合适,但是前段时间好像 v2 上还讨论过这玩意儿到底靠不靠谱😂😂
    Leonard
        7
    Leonard  
       2019-10-08 23:14:58 +08:00
    objc😏
    momocraft
        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
    arYUWang
        9
    arYUWang  
       2019-10-08 23:16:14 +08:00
    不是大佬,就想抛个砖。Cython 难道不符合这个要求吗?
    Trim21
        10
    Trim21  
       2019-10-08 23:24:22 +08:00 via iPhone
    除了性能 cython 都符合…
    clino
        11
    clino  
       2019-10-08 23:27:10 +08:00 via Android
    lua 其他符合,就是性能可能不符,但已经是动态语言里最厉害的了
    bequt
        12
    bequt  
       2019-10-08 23:51:45 +08:00 via Android
    @zacharyjia vlang 年底可以自举了吧
    这货最近是真的活跃
    silhouette
        13
    silhouette  
       2019-10-08 23:59:24 +08:00 via Android
    MATLAB
    ppphp
        14
    ppphp  
       2019-10-09 00:30:54 +08:00
    能编成动态库,那只能是编译型语言了,编译型语言就那么几种,去 llvm 和 gcc 下面看一圈不就完了
    wayslog
        15
    wayslog  
       2019-10-09 00:47:32 +08:00 via iPad
    Rust 吧。学习,持续的学习,是一种能力,加油。
    sosilver
        16
    sosilver  
       2019-10-09 01:10:21 +08:00 via Android
    还有个 Zig
    dawn009
        17
    dawn009  
       2019-10-09 01:48:43 +08:00
    所以,没考虑 Swift 的原因是哪一条?
    noqwerty
        18
    noqwerty  
       2019-10-09 01:51:20 +08:00 via Android
    除了性能 R 都符合,我现在很多数据处理类的脚本用 R 比 Python 还顺手了
    lizhuoli
        19
    lizhuoli  
       2019-10-09 02:59:42 +08:00 via iPad
    @dawn009 不支持 C++调用,只能 export C。所以为啥不直接用 Objective-C++和 Rust ? Lark 就是大量这样的 Rust 代码和 OC++混编才跨平台的
    66450146
        20
    66450146  
       2019-10-09 07:38:18 +08:00 via iPhone
    @dawn009 没有 C++ interop 第一条就砍了
    Mutoo
        21
    Mutoo  
       2019-10-09 07:45:30 +08:00
    国内流行的游戏架构很多是静态语言+binding+脚本语言。
    cocos2d-js (c++/js)
    cocos2d-lua (c++/lua)
    unity3d + tolua# (c#/lua)
    性能不是问题,需要性能的放静态语言,需要灵活的放脚本语言。
    starsriver
        22
    starsriver  
       2019-10-09 07:49:08 +08:00 via Android
    一切基于 c。你可以自己造一个语言啊?

    参考隔壁
    kran
        23
    kran  
       2019-10-09 08:04:31 +08:00 via Android
    http://terralang.org
    这个怎么样
    favourstreet
        24
    favourstreet  
       2019-10-09 08:25:01 +08:00 via Android   ❤️ 1
    看来大家已经忘了 FORTRAN 也是高性能语言来着
    Kilerd
        25
    Kilerd  
       2019-10-09 08:28:14 +08:00
    @favourstreet 经常在算法速度排行榜上看到他
    Kilerd
        26
    Kilerd  
       2019-10-09 08:29:35 +08:00
    无船先生已经在着手做 simple rust 了,但是基本的概念都没变,所以还是 rust 好
    gimp
        27
    gimp  
       2019-10-09 08:49:08 +08:00
    Simplified Rust 到最后就变成 Rust 了
    CraxClive
        28
    CraxClive  
       2019-10-09 08:52:24 +08:00 via Android
    Crystal 类似 Ruby 的脚本语言,只不过还没出 1.0。
    geelaw
        29
    geelaw  
       2019-10-09 08:54:59 +08:00 via iPhone
    如果是 Windows 上的话可以考虑用 COM 作为接口,就没这么多费事儿的了
    CatCode
        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 的语法简单???不过确实习惯了的话,看着还是挺规整的。
    ==========================
    没有完美,只是适合
    lyy16384
        31
    lyy16384  
       2019-10-09 09:44:52 +08:00
    从 c/c++调用 c#的官方方式是用托管 C++包装一下
    tt67wq
        32
    tt67wq  
       2019-10-09 09:46:08 +08:00
    https://nim-lang.org/
    不怕坑可以试试 刚刚 1.0
    muxueqz
        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 一样的语法,非常简单,开发效率很高
    aliwalker
        34
    aliwalker  
       2019-10-09 15:18:24 +08:00
    Dlang.
    clino
        35
    clino  
       2019-10-12 15:02:13 +08:00
    @muxueqz nim 你用过啦? 好用吗?
    muxueqz
        36
    muxueqz  
       2019-10-12 16:28:41 +08:00
    @clino 我在用,还挺好用的,给自己写了些工具,感觉比 Go 的开发效率高,比 Python 的性能好,部署方便
    clino
        37
    clino  
       2019-10-12 17:46:49 +08:00
    @muxueqz 自带电池多吗? 另外我搜了貌似很小众都没什么人在讨论,你如果碰到问题要去哪里问?
    clino
        38
    clino  
       2019-10-12 17:50:27 +08:00
    @muxueqz 另外 nim 和 python 互相调用方便吗?
    muxueqz
        39
    muxueqz  
       2019-10-12 23:35:33 +08:00
    @clino
    1. 自带电池还可以,碰到问题可以去官方论坛和聊天室问
    2. 与 Python 互相调用非常方便,Nim 可以生成 python 的 C 模块( so 文件),也可以使用 python 模块(需要 python-devel )
    clino
        40
    clino  
       2019-10-13 07:40:22 +08:00
    @muxueqz 感觉还挺吸引人的,就是几乎没什么生态,有机会玩玩看。
    muxueqz
        41
    muxueqz  
       2019-10-14 09:39:09 +08:00
    @clino 好呀好呀,我也是玩,还不太敢在重要的生产环境用,写了一些自己用的小工具
    clino
        42
    clino  
       2019-11-06 15:46:12 +08:00
    楼主最后选了啥?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3237 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:28 · PVG 21:28 · LAX 06:28 · JFK 09:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.