聊一聊年轻的编程语言Golang与Rust

Golang目前的主战场在后端,其以极简的语法,简单高效的并发模型所著称。Golang的特点是能够快速地实现核心功能,却不用考虑很多语言相关的细节。

Rust是一门以安全、性能著称的语言,其"异常安全"的设计与"异常强大"的编译器收获了一大批粉丝,同时也因其陡峭的学习曲线令很多人望而却步。Rust 正在前后端、Web3、系统内核等领域以星星之火的形式蔓延。最近很火的 Zed 代码编辑器也是一个 Rust 项目。

这里,我想通过对比两门语言最显著的差异------内存管理,来分析它们设计上的区别,从而得知为什么它们不能是一门语言。

Golang 与 Java 类似,是一门带有 GC 的语言,这意味着我们无需手动管理内存,分配的内存会在合适的时候被自动释放,好处是程序员几乎不用考虑内存管理的问题,但这样做的代价是程序需要 STW(Stop The World,暂停程序)来进行垃圾回收,还有额外的开销来处理标记。

复制代码
package main

import "fmt"

func main() {
    // 创建一个空的字符串切片
    var strs []string

    // 添加一些字符串到切片中
    strs = append(strs, "Hello")
    strs = append(strs, "World")
    strs = append(strs, "from Go")

    // 打印切片中的所有字符串
    for _, str := range strs {
        fmt.Println(str)
    }

    // Go 自动管理内存,开发者无需显式释放内存
}

而 Rust 则与 C++ 类似,不带有 GC,但也无需手动管理内存。它使用了所有权机制,对象的所有者离开生命周期时对资源进行释放。编译器会进行严格的静态检查,在编译期就确保了内存安全,同时不牺牲性能,因此对程序员编写代码的质量要求很高。一旦写的代码能够运行,它的质量就不会差。

复制代码
fn main() {
    let mut str = String::from("Hello world");
    let word_index = get_first_word(&str); // 传递不可变引用
    // &String 被自动解引用为 &str,因为 String 类型实现了 Deref trait
    // str.clear(); // cannot borrow `str` as mutable because it is also borrowed as immutable
    println!("{}", word_index); // word_index 生命周期结束
    str.clear() // 传递可变借用
}

// 切片是对数组的部分引用
fn get_first_word(s:&str)->&str{ // 使用切片作为参数能够使 API 更加通用
    let bytes = s.as_bytes();
    for(i,&item) in bytes.iter().enumerate(){
        if item==b' '{
            return &s[..i];
        }
    }
    &s[..]
}
相关推荐
G018_star sky♬1 分钟前
为什么java新建一个对象,需要obj o = new obj()这种写法
java·开发语言
星恒讯工业路由器6 分钟前
工业网络设备选型:导轨式、机架式与车载式的部署差异
开发语言·网络·数据库·php·工业路由器·导轨式·车载式
2601_962885727 分钟前
如何用 Python 把多只股票对齐成一张宽表?
开发语言·python
蹊黎3 小时前
C++中vector类的部分简单实现
开发语言·c++·visual studio
程序猿追9 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓9 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播9 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
墨云安全10 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php
摇滚侠10 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y10 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python