Один крутой чувак придумал переделать язык Go в Си. Написал транслятор, на входе которого подмножество Golang, а на выходе стандартный Си11. Убрал из Go всё тяжёлые фичи. Рантайм библиотека не требуется: пользуемся обычной libc. Вот перевод из README проекта:
Solod (So) — это строгое подмножество Go, которое транслируется в обычный C.Ставится утилита So командой:
Основные особенности:So поддерживает структуры, методы, интерфейсы, срезы (slices), отображения (maps), множественные возвращаемые значения и defer. По умолчанию всё размещается на стеке; куча используется только по желанию через стандартную библиотеку. Для упрощения отсутствуют каналы, горутины, замыкания и дженерики.
- Go на входе, C на выходе. Вы пишете обычный код на Go и получаете читаемый C11 на выходе.
- Нулевой рантайм. Нет сборщика мусора, нет подсчёта ссылок, нет скрытых аллокаций.
- Богатая стандартная библиотека. Используйте привычные типы и функции, портированные из стандартной библиотеки Go.
- Нативная совместимость с C. Можно вызывать C из So и So из C — без CGO и без накладных расходов.
- Инструменты Go работают «из коробки». Подсветка синтаксиса, LSP, линтинг и go test.
So предназначен для разработчиков на Go, которым нужен контроль на уровне системного программирования без необходимости изучать новый язык. А также для программистов на C, которым нравятся безопасность, структура и инструменты Go.
По традиции запустим пример Hello World.go install solod.dev/cmd/so@latest
Отличный получается язычок в замену Си. Заметьте: имеются методы и интерфейсы. Никаких инклудов. Можно забыть про make: сборка и подгрузка библиотек делаются стандартной утилитой go. Просто счастье невиданное! 😀$ mkdir hello
$ cd hello
$ go mod init example
$ go get solod.dev@latest
$ cat > main.go
package main
import "solod.dev/so/math"
func main() {
ans := math.Sqrt(1764)
println("Hello, world! The answer is", int(ans))
}
^D
$ so build -o hello .
$ ./hello
Hello, world! The answer is 42

no subject
Date: 2026-04-12 01:39 (UTC)Ну, допустим, дженирики это новомодная хня и она не обязательна, а вот отсутствие каналов, горутин и замыканий - это то, ради чего голанг вобще используют. Ну т.е. это как написать обратный транслятор из C в Go, только вырезать работу с указателями. Т.е. писать на таком C можно будет, но смысл - теряется.
no subject
Date: 2026-04-12 01:46 (UTC)Когда-то я развивал свою RTOS, где всё было на Си. Если бы нынче понадобилось повторит с нуля, я бы наверное делал всё на Solod или типа такого.
no subject
Date: 2026-04-12 02:30 (UTC)no subject
Date: 2026-04-12 03:25 (UTC)no subject
Date: 2026-04-12 05:33 (UTC)no subject
Date: 2026-04-12 05:45 (UTC)no subject
Date: 2026-04-12 06:17 (UTC)no subject
Date: 2026-04-12 06:31 (UTC)no subject
Date: 2026-04-12 06:37 (UTC)no subject
Date: 2026-04-12 06:49 (UTC)no subject
Date: 2026-04-12 07:17 (UTC)no subject
Date: 2026-04-12 09:18 (UTC)в кресты давеча добавили модули - кривовато, как и почти всё там, но более лучше стало
import Math;
import <iostream>;
int main() {
std::cout << add(5, 5);
}