Go语言的成功也预示着Rust的成功
副标题[/!--empirenews.page--]
从整体的角度来看Go,很难理解他是怎么取得这么大的成功的。从理论的角度上来说Go是一门非常糟糕的语言,就算是和C++或者Ada之类旧语言相比也是这样。它缺乏大量的编译时的检查和编译时的逻辑,它缺乏销毁逻辑导致许多样板文件和运行时错误。它的界面不是很有表现力。它具有一等公民数据结构(slices和maps),不能使用语言本身作为库进行复制。 在许多不需要易变性的情况下,它强制用户进行易变性。它附带了一个伪依赖管理器,它缺乏独立项目的独立版本控制。与大多数其他流行的系统编程语言(即C、C++、Ada、Fortran和Rust)相比,它的速度非常慢。 这就是我现在能想到的,很容易就能给你们展示的东西。一旦你深入研究go,你会发现它会做出一些固有的错误设计选择,它是为1980年而不是2020年设计的语言。 尽管如此,就像任何曾经使用过go的人都能告诉你的那样,这是一种非常好的语言。如果我被困在一个只有三种编程语言的岛上,我想go会成为其中之一。 尽管存在所有的缺陷,但它允许您编写性能良好的相对无错误的代码。向Go程序添加依赖项通常比向C++程序添加依赖项要顺利得多。 为什么 Go 是棒的 这让我处于一个非常奇怪的位置。 一方面,我可以谈谈 Go 有多可怕。 另一方面, Go 显然是一种非常好的语言。 为了弄清楚为什么是这样的,我们依然需要回到程序员解决问题的角度,把语言作为工具来看。 很多现代世界的问题看起来都是围绕着有效网络通信,围绕安全地利用所有硬件线程以及更容易的开发和部署展开的。 最后,渐渐有了一个稳定的趋势,良好的开源库渗透到我们的生活中,其中大多数是简洁和简单,适合单一目的。大多数 Node 或 Python 项目都有数百个这样的依赖项,而大多数 C 和 C ++ 代码库都有十几个。 C 和 C ++ 缺乏任何标准化的包管理,因此库往往是无所不包的整体(参见 QT 和 Boost ),而它们添加新的依赖项非常耗时。 开源库是现代开发人员生涯中的重要组成部分,但所有流行的系统编程语言都缺乏包管理。 从这个角度来看,Go有一些中心特征,这些特征非常让人惊叹,以至于它们把所有不好的一面都掩盖了。
或者,说白了, Go 是一种专为开源库,大规模并行和网络计算而设计的语言。 其他流行语言则缺少这三个类别中的一个。 Go的所有剩余问题源于三种设计选择:
若解决这些问题,Go无疑会成为未来的语言。 但是,由于各种问题,有些与先前的设计决策有关,有些又与设计师的意见有关,其中大部分都未解决。 例如,泛型可能会在2.0上实现,但是当前的实现与其他特征(比如接口)重叠,同时使用起来又烦恼并且缺少特征(比如,不能用作返回类型)。 或许我们可以找到一种“检查”所有正确语法的语言,又不用忍受那些糟糕的设计决策。 再来看看 Rust 语言 Rust 恰巧是一门解决了Go 所有问题的语言。 基于它的隐式移动语义和借用检查功能,使它在资源管理领域最终成为了最安全,最快速并且也最容易使用(这里是相对来说。比如目前借用检查比较难用,用过的都知道)的语言。它在编译期间就可以捕获大多数错误。 模板和特性(traits)组合给了它接近于C++的编译时编程能力,甚至某些方面更胜一筹。 最后,Cargo 也是最好的包管理系统之一,,它可以让你更容易地使用各种实用的公共库,并且有内建版本号和项目隔离特性。 换句话说,Rust的极大成功就是基于它更好地解决了Go存在的问题。 但是,Go 做得无比正确的事又有哪些呢?
Go 的影响 一旦 async/await 特性被合并到Rust的稳定版中,我认为Rust就完全超越Go了,确切地说,在任何方面!(译者注:借用检查仍旧是导致Rust难用的一个原因,最好是有更多的隐式借用或更好的方案) 我认为直到将Rust真正应用于产品中,人们才会认识到Rust在测试,调试和程序崩溃等方面为你节省了多少时间。 Rust和Rust相关的概念进入编程世界越多,人们就会越熟悉它的语法和概念,因此进入的门槛也就越低。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |