The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Проект Solod развивает подмножество языка Go, транслируемое в язык Си

07.04.2026 11:53 (MSK)

Представлен язык программирования Solod (So), предоставляющий подмножество языка Go, транскомпилируемое в представление на языке Си (C11), пригодное для сборки компиляторами GCC, Clang и zig cc. Ключевым отличием Solod от Go и Tinygo является использование ручного управления памятью, работающего без применения сборщика мусора, без автоматического выделения памяти и без подсчёта ссылок. Транспайлер для Solod написан на языке Go и распространяется под лицензией BSD. Поддерживается работа в Linux, macOS и Windows.

Язык поддерживает структуры, методы, интерфейсы, слайсы, возврат функциями нескольких значений (например, результат + код ошибки), дженерики и отложенные вызовы (defer). C целью упрощения в языке не поддерживаются каналы, сопрограммы и замыкания. При разработке на языке Solod могут использоваться существующие LSP-серверы, линтеры, интегрированные среды разработки и редакторы кода, поддерживающие язык Go, а также инструментарий "go test".

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

По умолчанию вся память выделяется в стеке, но через функции Alloc / Free стандартной библиотеки можно выделять память в куче. Сборка мусора и подсчёт ссылок не используются, но в Solod предоставляются возможности для проверки типов и аварийного завершения при обращении за границу массива. При этом проверки на возвращение висячих указателей (dangling pointer) и отсутствие освобождения памяти не производятся. В качестве основного способа выявления проблем при работе с памятью упоминается использование AddressSanitizer (-fsanitize=address) в современных компиляторах.

По производительности скомпилированные программы, написанные на Solod, в большинстве случаев быстрее программ на 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%.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Выпуск языка программирования Go 1.26
  3. OpenNews: Выпуск Tinygo 0.40, компилятора для языка Go
  4. OpenNews: Оценка потребления памяти при одновременном запуске миллиона задач
  5. OpenNews: Выпуск транслятора языка программирования Vala 0.56.0
  6. OpenNews: Выпуск языка программирования Nim 2.2.8
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65160-solod
Ключевые слова: solod, go
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (58) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Axonic (ok), 12:41, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Изобрели Nim и Vala
     
     
  • 2.36, Аноним (36), 15:28, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Модно теперь их друг в друга транслировать.
     

  • 1.5, Аноним83 (?), 13:02, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > Из ключевых областей применения отмечается системное программирование с близкими к Си возможностями

    Да да, все такие важные.
    На вижал бейские тоже можно было писать системные приложения, да и на перле можно.

    Да и зачем оно надо, когда есть LUA и Vala.

     
  • 1.7, Жироватт (ok), 13:11, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Нужно изобрести язык Golod. Который будет как Git Crab, подъедать исходники при транспиляции в С, а затем в JS.
    И преобразователь текста УНИТАЗ.

    > не поддерживаются каналы, сопрограммы и замыкания

    Горутины - то, ради чего стоит в принципе if err!=nil терпеть

     
     
  • 2.10, Аноним (10), 13:26, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 3.61, Жироватт (ok), 16:26, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.11, Аноним (11), 13:33, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Типичный вопрос будет: "У Вас Ржавчина в УНИТАЗе - есть?"
     
     
  • 3.19, Аноним (19), 14:27, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 3.38, greomesh (?), 15:30, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Свой УНИверсальный Текстовый АналиЗатор мы писали на java. Староверы, мы ..
     
     
  • 4.58, Жироватт (ok), 16:16, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Да, потому и вспомнил. Чайку?
    А вообще стоило бы назвать как-нибудь так: РАЗумитель ГрамОты ВсеОбщий (Русский), с акронимом, типа РАЗГОВОР
     
  • 2.15, Аноним (15), 13:46, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 2.26, Аноним (26), 15:03, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
     
  • 3.60, Жироватт (ok), 16:24, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.29, Аноним (29), 15:21, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    без горутин он получается односолодовый
     
     
  • 3.59, Жироватт (ok), 16:17, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Светлый и фильтрованный.
    Можно сказать даже - нулёвка, где из солода - только запах
     

  • 1.8, Аноним (19), 13:25, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Solod - хорошее программистское название ;)
    Надеюсь, эти без телеметрии обходятся.
     
  • 1.9, крокодил (?), 13:25, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    а зачем? какая цель? just for fun? что бы был?

    Можно же сделать что-то принципиально новое. Зачем еще один велосипед?

     
     
  • 2.12, Аноним (11), 13:37, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Можно же сделать что-то принципиально новое

    Принципиально новое уже сделано: раст.

     
  • 2.14, Аноним (14), 13:45, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вы очень внимательно прочитали последний абзац новости.
     
     
  • 3.22, Аноним (22), 14:51, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В последнем абзаце не сказано зачем. Если я напишу, что я быстро бегаю - из этого никак не следует, что мне надо ехать на олимпиаду.
     

  • 1.13, Аноним (13), 13:41, 07/04/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     

  • 1.16, Hack3r (?), 13:57, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Trademark!
    https://dlang.org/spec/betterc.html
     
  • 1.17, искр (?), 14:21, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    ячмень -> солод -> пиво!

    парни знают толк в названиях

     
     
  • 2.35, Аноним (35), 15:27, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > ячмень -> солод -> пиво!

    мир! труд! май!

     
     
  • 3.41, Аноним (-), 15:35, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • –2 +/
     
     
  • 4.50, Аноним (19), 16:00, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 3.64, Жироватт (ok), 16:32, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Veni! Vidi! Vici!
     

  • 1.18, Аноним (-), 14:25, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Представлен язык программирования Solod (So), предоставляющий подмножество языка Go,
    > транскомпилируемое в представление на языке Си (C11), пригодное для сборки компиляторами GCC, Clang и zig cc

    Идея прикольная. Но ему как я понимаю нужен - go :\. Без этого сие как я понимаю не операбельно, это FAIL я считаю. Могли бы сделать транспилируемыми сам себя, и собираться собой. Без требования гуглокрапа.

     
  • 1.20, Вася Пупкин (?), 14:45, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чем бы не маяться - лишь бы Раст не учить
     
     
  • 2.39, Аноним (35), 15:33, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    "лишь бы Раст не учить" - это правильно
     

  • 1.21, Аноним (22), 14:48, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    То есть они открутили горутины, замыкания и тп и сборщик мусора. Получили на выходе покоцанный Си с другим синтаксисом. Чтобы что?
     
     
  • 2.23, Аноним (23), 14:56, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    в си нет женериков, в си нет слайсов и строк с длиной
     
     
  • 3.24, Аноним (23), 14:56, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    и точно и дефер будет только в с29..
     
     
  • 4.34, Аноним (36), 15:26, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ты путаешь си и си++
     
     
  • 5.40, Аноним (-), 15:34, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 3.45, Аноним (19), 15:50, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Всё это можно съэмулировать человеконечитаемым лапшекодом, но зато успешно компилируемым. Так а цель сгенериванного кода же не для чтения человеком.
     

  • 1.25, th3m3 (ok), 14:58, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    В итоге, результат - сомнительный. Лучше сразу тогда на C писать.
     
     
  • 2.33, Аноним (36), 15:25, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    И выйти за границу буфера.
     
     
  • 3.37, Аноним (35), 15:29, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    проверки надо делать, assert'ы и всё такое
     
     
  • 4.44, Аноним (36), 15:46, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем это делать самому это должен делать язык, иначе зачем он нужен?
     
     
  • 5.54, Аноним (14), 16:07, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Кому должен? Почему? С каких пор? Сколько и в какой валюте?
     
  • 5.55, Аноним (55), 16:10, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> проверки надо делать, assert'ы и всё такое
    > Зачем это делать самому это должен делать язык, иначе зачем он нужен?

    Это такая мантра у местных сишочников: не страдал - не эксперт! "Здесь мерилом работы считают усталость".

    Ты еще скажи, что задачу нужно решать нажатием пары кнопок, а не многочасовым сношением с консолью и манами - тут такой вой подымется!

     
  • 3.53, Аноним (53), 16:05, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    В Си нету буферов, вас обманули. Используйте библиотеки, если сами не можете писать код, который не будет убегать за установленные границы. Внутри буфера скорее всего есть и другие границы, например того что туда написали. Будете теперь на каждый чих создавать новый буфер и потом делать join() с копированием всех данных по 100 раз?
     
     
  • 4.57, Аноним (55), 16:13, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > В Си нету буферов, вас обманули.

    А разве buffer overflow - это не классическая ошибка из С?

    > Используйте библиотеки, если сами не можете писать код, который не будет убегать за установленные границы.

    Проще просто взять нормальный язык.

    > Будете теперь на каждый чих создавать новый буфер и потом делать join() с копированием всех данных по 100 раз?

    Приведи конкретный пример, а то непонятно, о каких конкретно join() и копированиях идет речь.

     
  • 3.62, Аноним (62), 16:28, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Это единственное, что смогли бы на C адепты Раста.
     
  • 2.46, Аноним (19), 15:53, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.28, Аноним (28), 15:20, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    > C целью упрощения в языке не поддерживаются каналы, сопрограммы и замыкания

    То есть убрали то почему язык называется go. И тогда причем тут вообще go?
    У парней которые делают V, легковесную замену голанга, тоже с трансляцией на C, аналог горутин сразу в первом релизе был.

     
  • 1.30, Аноним (28), 15:21, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    > C целью упрощения в языке не поддерживаются каналы, сопрограммы и замыкания

    То есть убрали то почему язык называется go. И тогда причем тут вообще go?
    У парней которые делают V, легковесную замену голанга, тоже с трансляцией на C, аналог горутин сразу в первом релизе был.

     
  • 1.32, Аноним (36), 15:25, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Напишите язык с синтаксисом Go и неотключаемым боров чекером. И получится Раст с нормальным синтаксисом.  

     
     
  • 2.42, Аноним (11), 15:43, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
     
  • 3.43, Аноним (36), 15:45, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
     
  • 4.47, Аноним (19), 15:58, 07/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.48, Аноним (29), 16:00, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    если бы ты заглянул в самые последние стандарты С++ и Java и заценил читаемость, то они попали бы в одну компанию с Растом.
     
     
  • 3.51, sage (??), 16:02, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Как что-то плохое. Плохой танцор просто не умеет грамотно отступы и переносы строк расставлять.
     
     
  • 4.63, Аноним (62), 16:30, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А кто умеет в отступы, тому и Раст ненужон. Тому Питончик впору.
     

  • 1.49, sage (??), 16:00, 07/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > не требует прикрепления runtime

    Что, даже glibc? Или ваша рантайм - это не рантайм?

    > C целью упрощения в языке не поддерживаются каналы, сопрограммы и замыкания

    Давайте выкинем go из go, чтобы получить си на несишном синтаксисе!

     
     
  • 2.56, Аноним (53), 16:13, 07/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > glibc Или ваша рантайм - это не рантайм?

    Глыбаси - это набор библиотечных функций, они сами по себе ничего не делают внутри твоего кода. Го-корутины, каналы и прочие штуки спавнят параллельные потоки (процессы), которыми кто-то должен рулить и это точно не программист на Go, который не отличает мультипоточность от кооперативной мультизадачности.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру