首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
华为云
V2EX  ›  程序员

[讨论] 用基于 VM 的语言(如 C# Java )还是用原生语言如(C/C++ Rust)来写区块链?可能各有什么利弊?

  •  
  •   noli · 357 天前 · 1980 次点击
    这是一个创建于 357 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知道从什么角度来切入思考这个问题比较好。

    请各位尽量不就语言本身来撕……
    14 回复  |  直到 2017-10-27 23:16:34 +08:00
        1
    czheo   357 天前   ♥ 1
    golang 吧。链接的 node 多了,自带 goroutine 会派上用场。估计也是因为这个,以太坊的官方客户端用 golang。
        2
    glues   357 天前   ♥ 1
    Rust 性能好,内存安全
        3
    SuperMild   357 天前
    涉及金融的貌似用 Erlang 蛮好
        4
    k9982874   357 天前 via iPhone
    各位知道易语言吗(逃
        5
    Elven   357 天前 via iPhone
    然而我用了 js ……
        6
    Elven   357 天前 via iPhone
    那个顺手用那个喽
        7
    hjc4869   357 天前   ♥ 3
    语言没啥关系,差别都在 runtime,C#可以编译成 native code,C/C++也可以编译成 .NET CIL。
    基于 VM 的语言跟 native code 最大的差异应该是 GC,其次是 JIT 的代码质量问题,还有一些别的零碎的问题,比如内存安全的语言,运行时内存安全的代价——边界检查,类型检查等等。

    GC 的存在( JVM,CLR 这类,不包括 golang 那种 simple naive GC )使得这些环境在处理特定 workload 时有较大的优势,主要是在于 GC 分代、移动对象使得程序更加 cache-friendly。虽然用 C#理论上你可以完全绕过 GC,但是实际上也没见过多少人这么做,有这个需求的都去写 C++了🤣

    另外这篇文章给了一些非常具体的数据,可以去看一下。虽然这个是 .NET 2.0 时代的,CLR/JVM 今非昔比,但是一些过去很昂贵的写法,现在仍然要避免。https://msdn.microsoft.com/en-us/library/ms973852.aspx
        8
    CoderGeek   357 天前
    go or java
        9
    noli   357 天前
    @hjc4869

    我想到了一个可能跟“语言”或者说语言生态有关系的点。
    区块链客户端中,可以预料到 网络 IO 和 密码学相关计算 是最重要的功能。

    从以上考虑出发,应该选一些符合以下条件的:

    1. 在多种常见平台上对 异步 IO 的支持比较好,
    2. 同时生态环境中 密码学库比较成熟的 语言。

    C# 跨平台支持 异步 IO 没什么问题。

    但是 C# 标准库中对密码学的支持感觉比较弱。
    也好像没有像 OpenSSL 那样在密码学领域比较全能的套件?
        10
    hjc4869   357 天前
    @noli 非阻塞 IO 肯定没问题,不过 C#标准库的设计者根本不懂密码学,完全是外行设计的密码学库。
    但是 .NET 调用 native code 方便,可以直接调用 OpenSSL,用现有的 wrapper 或者自己写都行。别的密码学 C 库也有很多 .NET 的 wrapper。
    如果不在乎性能,可以用 BouncyCastle,不过 .NET 版的 bc 没有 Java 的 bc 好用,有些时候可能会需要抄 Java 那边的代码。
        11
    noli   357 天前
    @hjc4869

    我试过用 BC C# 写过一些 demo,甚至有人移植 dotnet core 版本,但真心太难懂,用得我心中没底。
    也有留意到另外一个 SecurityDriven.Inferno 但是没用过。
        12
    stirlingx   356 天前
    go 吧,C/C++ Rust 太折腾
        13
    leeg810312   356 天前 via Android
    @hjc4869 请教一下.net 密码学库哪些方面不够好呢?性能?安全性?我 Java 也写,从使用来看,我觉得.net 还是挺方便的,效果和 Java 差不多
        14
    markx   356 天前
    忍不住想说句题外话,一大堆推荐各种语言的,大家都不看清题就作答么?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   972 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 25ms · UTC 17:37 · PVG 01:37 · LAX 10:37 · JFK 13:37
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1