#  Solod — подмножество языка Go, транслируемое в язык Си
robot (spnet, 1) → All  –  08:44:04 2026-04-11

[ Представлен ]( https://antonz.org/solod ) язык программирования [ Solod (So) ]( https://solod.dev ) , предоставляющий подмножество языка Go, транскомпилируемое в представление на языке Си (C11), пригодное для сборки компиляторами GCC, Clang и zig cc. Ключевым отличием Solod от Go является использование ручного управления памятью, работающего без применения сборщика мусора, без автоматического выделения памяти и без подсчёта ссылок. Транспайлер для Solod написан на языке Go и [ распространяется ]( https://github.com/solod-dev/solod ) под лицензией BSD. Поддерживается работа в Linux, macOS и Windows.

Язык поддерживает структуры, методы, интерфейсы, слайсы, возврат функциями нескольких значений (например, результат + код ошибки), [ дженерики ]( https://github.com/solod-dev/solod/blob/main/doc/generics.md ) и отложенные вызовы ( [ defer ]( https://github.com/solod-dev/solod/blob/main/doc/spec.md#defer ) ). C целью упрощения в языке не поддерживаются каналы, сопрограммы и замыкания. При разработке на языке Solod могут использоваться существующие LSP-серверы, линтеры, интегрированные среды разработки и редакторы кода, поддерживающие язык Go, а также инструментарий «go test».

Написанный на Solod код может интегрироваться с приложениями на языке Си (язык Си может вызвать функции на Solod и наоборот) и не требует прикрепления runtime. Из ключевых областей применения отмечается системное программирование с близкими к Си возможностями, но с синтаксисом в стиле Go и обеспечением проверки типов. Solod также может применяться для портирования Go-библиотек для использования в проектах на Си. На язык Си портированы Go-пакеты:

• [ strings ]( https://antonz.org/porting-go-strings )

• [ io (antonz.org) ]( https://antonz.org/porting-go-io )

• bytes

• mem

• slices

и [ т. п. ]( https://github.com/solod-dev/solod/tree/main/so ) Помимо [ набора ]( https://github.com/solod-dev/solod/blob/main/doc/stdlib.md ) портированных Go-библиотек в программах на языке Solod можно использовать [ обвязки ]( https://github.com/solod-dev/solod/tree/main/so/c ) над стандартной Си-библиотекой libc.

По умолчанию вся память выделяется в стеке, но через функции [ Alloc / Free ]( https://github.com/solod-dev/solod/blob/main/doc/stdlib.md#somem ) стандартной библиотеки можно выделять память в куче. Сборка мусора и подсчёт ссылок не используются, но в Solod предоставляются возможности для проверки типов и аварийного завершения при обращении за границу массива. При этом проверки на возвращение висячих указателей dangling pointer и отсутствие освобождения памяти не производятся. В качестве основного способа выявления проблем при работе с памятью упоминается использование AddressSanitizer -fsanitize=address в современных компиляторах.

По производительности скомпилированные программы, написанные на Solod, в большинстве случаев [ быстрее ]( https://github.com/solod-dev/solod/blob/main/bench/README.md ) программ на Go:

• производительность работы функций из пакета Byte быстрее в полтора раза при идентичном потреблении памяти;

• работа с байтовыми буферами быстрее в 1.3 раза при чтении и в 2-4 раза при записи;

• в пакете Map выборка по целочисленному ключу быстрее в 3.4 раза, но модификация ключей медленнее в 1.6 раза;

• выборка по строковым ключам на одном уровне с языком Go, но модификация медленнее в 1.5 раза;

• парсинг и форматирование целых чисел быстрее в 2 раза, а с плавающей запятой - в 1.5/1.2 раза;

• строковые функции быстрее в 1.3 раза, а создание строк быстрее в 2-4 раза при снижении потребления памяти на 10-20%.

https://www.linux.org.ru/news/development/18263523
Powered by iii-php v0.11