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

2017-10-26 19:17:43 +08:00
 noli
不知道从什么角度来切入思考这个问题比较好。

请各位尽量不就语言本身来撕……
3209 次点击
所在节点    程序员
14 条回复
czheo
2017-10-26 20:17:33 +08:00
golang 吧。链接的 node 多了,自带 goroutine 会派上用场。估计也是因为这个,以太坊的官方客户端用 golang。
glues
2017-10-26 20:39:26 +08:00
Rust 性能好,内存安全
SuperMild
2017-10-26 20:43:39 +08:00
涉及金融的貌似用 Erlang 蛮好
k9982874
2017-10-26 20:56:57 +08:00
各位知道易语言吗(逃
Elven
2017-10-26 21:15:33 +08:00
然而我用了 js ……
Elven
2017-10-26 21:15:54 +08:00
那个顺手用那个喽
hjc4869
2017-10-26 21:29:27 +08:00
语言没啥关系,差别都在 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
CoderGeek
2017-10-26 22:08:05 +08:00
go or java
noli
2017-10-26 22:10:17 +08:00
@hjc4869

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

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

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

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

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

我试过用 BC C# 写过一些 demo,甚至有人移植 dotnet core 版本,但真心太难懂,用得我心中没底。
也有留意到另外一个 SecurityDriven.Inferno 但是没用过。
stirlingx
2017-10-27 09:05:49 +08:00
go 吧,C/C++ Rust 太折腾
leeg810312
2017-10-27 09:21:55 +08:00
@hjc4869 请教一下.net 密码学库哪些方面不够好呢?性能?安全性?我 Java 也写,从使用来看,我觉得.net 还是挺方便的,效果和 Java 差不多
markx
2017-10-27 23:16:34 +08:00
忍不住想说句题外话,一大堆推荐各种语言的,大家都不看清题就作答么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/401039

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX