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

有没有这样一种编程语言

  •  
  •   zacharyjia · 66 天前 · 2387 次点击
    这是一个创建于 66 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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