unifier
V2EX  ›  问与答

有没有这样一种编程语言

  •  
  •   unifier · Oct 8, 2019 · 7448 views
    This topic created in 2587 days ago, the information mentioned may be changed or developed.

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

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