vak: (Знайка)
[personal profile] vak
Один крутой чувак придумал переделать язык Go в Си. Написал транслятор, на входе которого подмножество Golang, а на выходе стандартный Си11. Убрал из Go всё тяжёлые фичи. Рантайм библиотека не требуется: пользуемся обычной libc. Вот перевод из README проекта:
Solod (So) — это строгое подмножество Go, которое транслируется в обычный C.

Основные особенности:
  • Go на входе, C на выходе. Вы пишете обычный код на Go и получаете читаемый C11 на выходе.
  • Нулевой рантайм. Нет сборщика мусора, нет подсчёта ссылок, нет скрытых аллокаций.
  • Богатая стандартная библиотека. Используйте привычные типы и функции, портированные из стандартной библиотеки Go.
  • Нативная совместимость с C. Можно вызывать C из So и So из C — без CGO и без накладных расходов.
  • Инструменты Go работают «из коробки». Подсветка синтаксиса, LSP, линтинг и go test.
So поддерживает структуры, методы, интерфейсы, срезы (slices), отображения (maps), множественные возвращаемые значения и defer. По умолчанию всё размещается на стеке; куча используется только по желанию через стандартную библиотеку. Для упрощения отсутствуют каналы, горутины, замыкания и дженерики.

So предназначен для разработчиков на Go, которым нужен контроль на уровне системного программирования без необходимости изучать новый язык. А также для программистов на C, которым нравятся безопасность, структура и инструменты Go.
Ставится утилита So командой:
go install solod.dev/cmd/so@latest
По традиции запустим пример Hello World.
$ 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
Отличный получается язычок в замену Си. Заметьте: имеются методы и интерфейсы. Никаких инклудов. Можно забыть про make: сборка и подгрузка библиотек делаются стандартной утилитой go. Просто счастье невиданное! 😀

Date: 2026-04-12 01:39 (UTC)
ufm: (Default)
From: [personal profile] ufm
> Для упрощения отсутствуют каналы, горутины, замыкания и дженерики

Ну, допустим, дженирики это новомодная хня и она не обязательна, а вот отсутствие каналов, горутин и замыканий - это то, ради чего голанг вобще используют. Ну т.е. это как написать обратный транслятор из C в Go, только вырезать работу с указателями. Т.е. писать на таком C можно будет, но смысл - теряется.

Date: 2026-04-12 05:45 (UTC)
ufm: (Default)
From: [personal profile] ufm
А, я еще про сборку мусора забыл. Это-ж вобще ужос - самому за памятью следить... Если уж хочется внятного С - так на https://dlang.org/ надо смотреть.

Date: 2026-04-12 06:31 (UTC)
fenikso: (Default)
From: [personal profile] fenikso
D как-то подзатих, на страничке Success stories много ссьілок не работают, а tech talks 9-10-летней давности. Похоже смотреть уже стоит на https://ziglang.org/

Date: 2026-04-12 06:37 (UTC)
ufm: (Default)
From: [personal profile] ufm
Да всё равно на что. Но использовать как замену для С сильно обкусанный go без поддержки основных фич - такая себе идея. IMHO.

Date: 2026-04-12 06:49 (UTC)
fenikso: (Default)
From: [personal profile] fenikso
Согласен, но как обьічно, зависит от usecase :) Вон автору подходит :)

Date: 2026-04-12 07:17 (UTC)
ufm: (Default)
From: [personal profile] ufm
Не, тут не поспоришь. Когда мотивация "меня прикалывает" и "я так развлекаюсь" - тут возразить нечего. :)

Date: 2026-04-12 02:30 (UTC)
sab123: (Default)
From: [personal profile] sab123
Все попытки заменить make делают только хуже. Кстати, поимев дело с Растом, обнаружил, что отсутствие инклудов - хуже, чем их наличие.

Date: 2026-04-12 13:26 (UTC)
sab123: (Default)
From: [personal profile] sab123
Отсутствие инклюдов плохо тем, что интерфейс оказывается перемешан с реализацией. Вроде, копировать одну и ту же декларацию функции в двух местах - утомительно, зато гораздо удобнее читать в инклюдах. Не говоря уже про библиотеки без исходного кода.

Проблем со специальными системами билдов три. Во-первых они пупоцентричные, вещь в себе. То есть, не заточены под сосуществование с другими системами. Следствием этого является то, что они не могут напрямую использоваться в других проектах, будь они корпоративные или опенсорсные (например, Андроид), потому что в них уже есть своя стандартная система билдов. Особо смешно было смотреть, как микрософтовский .Net не укладывается в имкрософтовский же корпоративный билд. Во-вторых, мания автоапдейтов, которая тоже несовместима с большими проектами, и к тому же является источником supply chain attacks. В-третьих, они просто очень жесткие, негибкие (это общее с тем же андроидом и многими корпоративными системами). Они исключают любые внешние тулзы, а свой набор тулзов у них убог. Они не дают генерировать файлы скриптами, вместо этого предлагаются всякие кривые костыли.

Date: 2026-04-12 05:33 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Отличнейшая идейка. А с библиотеками норм? Там же пойнтеры на функции, возвращающие пойнтеры на функции?

Date: 2026-04-12 09:18 (UTC)
norian: (Default)
From: [personal profile] norian
прикольно, но практически чисто развлекательноэ имко, там весь смысл в анальном огоражывании

в кресты давеча добавили модули - кривовато, как и почти всё там, но более лучше стало

import Math;
import <iostream>;

int main() {
std::cout << add(5, 5);
}
Edited Date: 2026-04-12 09:19 (UTC)

Date: 2026-04-13 05:23 (UTC)
From: [personal profile] sassa_nf
> Для упрощения отсутствуют каналы, горутины, замыкания и дженерики.

😹😹😹 olololo what's left then? Syntax?

Watch go programmers squirm helplessly. Where's your power now?! Mwuahahaha!

Date: 2026-04-13 13:23 (UTC)
freedom_of_sea: (Default)
From: [personal profile] freedom_of_sea
а какой объем бинарника?

Date: 2026-04-16 14:48 (UTC)
recoder: (Default)
From: [personal profile] recoder
Но есть же уже V - с виду примерно Go, но всё компилирует в обычный C (если хочется).

Date: 2026-04-17 09:25 (UTC)
dmytrish: (Default)
From: [personal profile] dmytrish
А що думаєте про zig?

В мене від нього змішані відчуття: з одного боку, дуже свіжі ідеї, comptime, мінімальність зі смаком у стилі Сі, явні алокатори/io, багато сучасних речей, хороший (і де в чому унікальний) тулінг.

З другого боку, навмисна вперта антимодульність, closed world, lazy compilation (наче й свіжа ідея, але навіщо), дуже примітивний тайпчекер (DIY дженерики та інтерфейси, кодити інваріанти в типи дуже важко), комʼюніті молодих зелених ентузіастів із невідстріляними ногами, дивні експерименти із io (які часто нагадують спринт по давно відомих граблях).

Так хочеться, щоб він повернув у якийсь конкретний напрямок, але поки що там creative destruction на всю котушку.