Soppo - Go,但具备它所缺失的特性

Lobsters Hottest 工具

摘要

Soppo 是一门新的编程语言,它在 Go 的基础上扩展了枚举、模式匹配、“?”错误传播运算符以及编译期空值安全,同时保持与现有 Go 代码和工具链的完全互操作性。

<p><a href="https://lobste.rs/s/0ykmyt/soppo_go_with_features_it_s_missing">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/08/04 07:45

# Soppo 来源:https://soppolang.dev/ Go,以及它所缺少的特性。 类型安全与易用性,兼具完全互操作性。 参加导览 (https://tour.soppolang.dev/) ## 熟悉的语法 Soppo 尽可能使用 Go 语法。如果你会 Go,就已经掌握了 Soppo 的大部分内容。可以直接使用任何 Go 库,保留现有工具链,并逐步将 Soppo 引入现有项目。 `` package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", handleHome) http.HandleFunc("/hello", handleHello) fmt.Println("Server starting on :8080") http.ListenAndServe(":8080", nil) } `` ## 枚举与模式匹配 带有结构体变体的标记联合,以及能确保你处理所有情况的模式匹配。编译器会在代码运行之前捕获缺失的分支,因此你可以放心重构。 `` type Shape enum { Circle struct { radius float64 } Rectangle struct { width, height float64 } } func area(s Shape) float64 { match s { case Shape.Circle{radius: r}: return 3.14159 * r * r case Shape.Rectangle{width: w, height: h}: return w * h } } `` ## 使用 `?` 进行错误处理 不再需要重复编写 `if err != nil` 代码块。`?` 运算符在保持错误处理显式可见的同时,简洁地传播错误。需要时还可以添加自定义处理。 `` func processFile(path string) error { data := os.ReadFile(path) ? result := parse(data) ? err { return fmt.Errorf("parse failed: {err}") } fmt.Println("Processed {len(result)} items") return nil } `` ## 空值安全 空指针解引用是 Go 中运行时 panic 的常见来源。Soppo 在编译时追踪可空性,因此你可以让这些 bug 在进入生产环境之前被捕获。进行 nil 检查后,类型会自动收窄。 `` func findUser(id int) ?*User { if id == 0 { return nil } return &User{name: "Alice"} } func greet(id int) { user := findUser(id) if user != nil { fmt.Println("Hello {user.name}") } } `` ## 清晰的错误信息 当出现问题时,Soppo 会精确地告诉你发生了什么以及在哪里发生。错误信息会显示相关代码、高亮问题所在,并建议如何修复。调试应当是直接明了的,而不是猜谜游戏。 `` × Non-exhaustive match ╭─[main.sop:11:5] 10 │ var message string 11 │ ╭─▶ match colour { 12 │ │ case Colour.Red: 13 │ │ message = "Stop" 14 │ │ case Colour.Yellow: 15 │ │ message = "Wait" 16 │ ├─▶ } · ╰──── missing variants: Green 17 │ } ╰──── help: Ensure all enum variants are handled, or add a `default` case `` ## 开始使用 安装 Soppo 的推荐方式是通过 SOPMOD (https://github.com/halcyonnouveau/sopmod),一个负责安装、更新和切换版本的版本管理器。它还管理 Go,Soppo 在内部使用 Go 进行编译。 curl -fsSL https://soppolang.dev/install.sh | sh 然后将其加入你的 PATH 并安装: export PATH="$HOME/.sopmod/bin:$PATH" sopmod install sop latest 或者,不使用 SOPMOD,直接通过 Cargo 安装 `sop` 二进制文件(需要 Rust (https://www.rust-lang.org/tools/install) 和 Go (https://go.dev/doc/install)): cargo install soppo

相似文章

Solod: Go 可以成为更好的 C

Hacker News Top

Solod 是 Go 的一个严格子集,可编译为可读的 C11,零运行时,无GC,拥有丰富的标准库,让 Go 开发者获得系统级控制,同时为 C 程序员提供熟悉的工具链。

依赖 Go

Lobsters Hottest

Solod 是一种新的系统编程语言,它是 Go 的一个子集,复用 Go 的工具链和标准库,同时编译为 C11,提供手动内存管理。

Golang开发者应该尝试Odin

Lobsters Hottest

本文主张Golang开发者应该探索Odin,这是一种新的编程语言,通过内存管理和数组编程等功能解决了Go的一些局限性。

就用Go

Lobsters Hottest

一篇带有强烈观点的开发者文章倡导使用Go编程语言,强调其简洁的语法、强大的标准库、高效的并发模型以及单二进制部署,作为对过于复杂的现代技术栈的实用替代方案。