https://avatars.githubusercontent.com/u/18242685

lihuu's blog

第 15 章:你做到了!

从第一章的"Hello, World!“到第十四章的高性能 Web 服务,你已经完成了一次史诗级的技术蜕变。

你不再是那个依赖 GC 的 Java 程序员,你现在是能与编译器对话的 Rust 开发者。

但这只是开始。Rust 的世界远比你想象的更广阔、更精彩、更有前途。

准备好探索 Rust 的无限可能了吗?

第 14 章:Spring Boot 用腻了吗?启动时间长,内存占用高,JVM 调优让人头疼?

是时候体验真正的 Web 服务性能了。

Rust 的 Web 框架不需要"魔法",不需要反射,不需要依赖注入的复杂性。它们只需要一件事:让你的 API 快到飞起。

准备好被 Rust Web 服务的性能震撼吧。

Spring Boot:舒适的性能杀手

Spring Boot 的"便利"代价

@RestController
@RequestMapping("/api")
public class UserController {

    @Autowired
    private UserService userService;  // 运行时注入,编译期不知道

    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        // 每个请求都经过:
        // 1. Servlet 容器
        // 2. Spring MVC 分发器
        // 3. 控制器映射
        // 4. 方法参数解析
        // 5. 反序列化/序列化
        // 6. 异常处理链
        return ResponseEntity.ok(userService.findById(id));
    }
}

看起来简洁?代价是什么?

第 13 章:Java 并发编程的噩梦经历过吗?

synchronized 的性能陷阱、volatile 的语义混乱、ConcurrentModificationException 的突然袭击、死锁调试的绝望时刻…

这些痛苦,Rust 要一次性终结。

Rust 的承诺:无畏并发(Fearless Concurrency)。不是因为并发变简单了,而是因为编译器不允许你犯错。

第 12 章:以为 Rust 没有接口?以为没有泛型?

错了!Rust 有的是 Traits 和 Generics,比 Java 的接口和泛型强大一千倍。

Java 的接口系统?20 年前的设计。Rust 的 Trait 系统?21 世纪的现代抽象。

准备好被彻底震撼吧。

Java 接口:功能有限的古董

Java 接口的局限

// Java 接口:只能定义方法签名
interface Drawable {
    void draw();
    // 不能定义字段
    // 不能定义静态方法(Java 8之前)
    // 不能为现有类型实现接口
}

class Circle implements Drawable {
    public void draw() {
        System.out.println("Drawing a circle");
    }
}

问题一览:

第 11 章:你以为换个语言,集合类就换个名字这么简单?

Naive!

Java 的 ArrayListStringHashMap 在 GC 的保护下随便用。Rust 的 VecStringHashMap 每一次操作都要过所有权系统的审查。

这不是负担,这是进化。

Java 集合:GC 庇护下的放纵

Java 的"舒适圈"

// Java 的任性代码
List<String> list = new ArrayList<>();
list.add("hello");
list.add("world");

String first = list.get(0);  // 随便取
String copy = new String(first);  // 随便复制
list.clear();  // 随便清空

// GC 负责一切你什么都不用担心

爽吗?当然爽。高效吗?呵呵。

第 10 章:Maven 的 XML 地狱受够了吗?Gradle 的 Groovy 脚本恶心不?

恭喜你,解脱的时候到了。

Cargo 不只是一个构建工具,它是项目管理的终极解决方案。一个工具搞定依赖管理、构建、测试、文档、发布——Maven 和 Gradle 联手都做不到的事情。

是时候见识真正的现代化工具链了。

Java 构建工具:功能强大,体验糟糕

Maven:XML 的噩梦

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0.0</version>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
    </dependencies>
</project>

加个依赖要写这么多垃圾?

第 9 章:你们 Java 程序员最恨什么?

NullPointerException!那个价值"十亿美元的错误",让多少个深夜变成了调试地狱。

还有什么?try-catch 的噩梦!要么用受检异常把方法签名搞得一团糟,要么用非受检异常埋下定时炸弹。

Rust 说:这些垃圾问题,我一个都不要。

Java 错误处理:两个极端的灾难

NPE:运行时的恐怖故事

// Java 的日常灾难
public String getUserName(int id) {
    User user = findUser(id);  // 可能返回 null
    return user.getName();     // 💥 NPE炸弹!
}

你永远不知道哪一行会炸。 防御性编程?写一堆 if (obj != null) 检查?代码变得恶心不说,还不一定管用。

第 8 章:终极 Boss 来了。

前面学的所有权和借用只是开胃菜。生命周期才是 Rust 最变态的部分。

它不会改变你程序的行为,不会提供新功能,它唯一的作用就是:让编译器变得更挑剔。

但掌握了它,你就是真正的 Rust 专家。准备好接受终极挑战了吗?

编译器的困惑时刻

你以为编译器无所不能?天真!

看看这个让编译器"脑子转不过来"的代码: