有没有这样一种编程语言 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
unifier
V2EX    问与答

有没有这样一种编程语言

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

    想要有以下这些特性,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
    unifier
        2
    unifier  
    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
    unifier
        6
    unifier  
    OP
       2019-10-08 23:12:11 +08:00 via iPhone
    @cmdOptionKna 要是 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
    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     Solana     5652 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 01:40 PVG 09:40 LAX 18:40 JFK 21:40
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86