プログラミング
Solod: Goはより良いCになり得る
Solod: Go can be a better C (solod.dev)
要約
Solod(So)はGoの厳密なサブセットであり、通常のC言語にコンパイルされます。Goの構文とツールを使いながら、ランタイムやガベージコレクションのない、読みやすいC11コードを生成します。Goの標準ライブラリの機能を利用でき、C言語との相互運用性も提供します。
全文翻訳
Solod: Goはより良いCになり得る
Solod (So) はGoの厳密なサブセットであり、通常のCに翻訳されます。Goのコードを書き、読みやすいC11を出力します。
ゼロランタイム。ガベージコレクションなし、参照カウントなし、隠れたアロケーションなし。
豊富な標準ライブラリ。Goのstdlibから移植された使い慣れた型と関数を使用します。
ネイティブC相互運用性。CからSoを、SoからCを呼び出します — CGOなし、オーバーヘッドなし。
Goのツールがそのまま使えます。シンタックスハイライト、LSP、リンティング、"go test"。
Soは、構造体、メソッド、インターフェース、スライス、マップ、複数返り値、deferをサポートします。デフォルトではすべてスタック割り当てされ、ヒープは標準ライブラリを通じてオプトインです。ジェネリクスは限定的にサポートされており、並行処理は言語に組み込まれるのではなく標準ライブラリによって提供されます。
Soは、新しい言語を学ぶことなくシステムレベルの制御を望むGo開発者向けです。また、Goの安全性、構造、ツールを好むCプログラマー向けでもあります。
プレイグラウンド
ここにmain.goファイルにあるGoコードの例を示します。実行するには「実行」をクリックするか、生成されたCコード(main.h + main.c)を表示するには「翻訳」をクリックします。
```go
package main
import "solod.dev/so/time"
type Person struct {
Name string
Age int
Nums [3]int
}
func (p *Person) Sleep() int {
p.Age += 1
return p.Age
}
func main() {
p := Person{Name: "Alice", Age: 30}
p.Sleep()
println(p.Name, "is now", p.Age, "years old.")
p.Nums[0] = 42
println("1st lucky number is", p.Nums[0])
year := time.Now().Year()
println("The year is", year)
}
```
始め方
Soはまだ本番稼働の準備ができていませんが、ホビープロジェクトで試してみるか、コンセプトが気に入ったら注目しておいてください。
ローカルでSoを操作するためのインストールと使用方法。
概要を素早く把握するための言語および標準ライブラリガイド。
実践的な入門のためのSoの例。
内部を確認したり貢献したりするためのソースコード。
現在のステータス v0.3 開発中
2026年7月現在、Soは活発に開発中です。最新リリースは0.2で、ネットワーキング、WebAssembly、フリースタンディングモードのサポートが追加されました。次のリリース0.3では、並行処理サポートが追加される予定です。
ご質問があれば、GitHubでお気軽にお問い合わせください。
🧑💻 Anton Zhiyanov