LINUX.ORG.RU

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

 , , , ,


0

2

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

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

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

и т. п. Помимо набора портированных 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%.

>>> Подробности на OpenNET



Проверено: dataman ()
Последнее исправление: dataman (всего исправлений: 4)

Подробности на OpenNET

Тогда зачем писать «Программистом по имени Антон Жиянов»?

dataman ★★★★★
()
Ответ на: комментарий от PunkPerson

Так и цитируй полностью, без своего переиначивания.

dataman ★★★★★
()

А смысл? Язык с автоматическим управлением памятью и язык с ручным управлением памятью это два принципиально разных языка. Весь код, кроме Hello World, всё равно придётся переписывать. И тогда встаёт вопрос, чем это лучше тонны других языков транспилируемых в Си (не добавлял в Си дженерики и ООП за десятилетия его существования только ленивый). Плюс горутины и каналы чуть ли не главная киллер-фича Go (нативных языков с ООП чуть меньше, чем дофига), а именно они не включены в новый язык.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 3)
Ответ на: комментарий от water_closed

Тому, кому нужны каналы, сопрограммы и замыкания. Очевидно же.

ugoday ★★★★★
()

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

Следовательно ни одна реальная программа на голанге не заработает, даже после правок. Тогда большой вопрос а нафига это вообще нужно? Какой-то велосипед с квадратными колёсами.

no-such-file ★★★★★
()

Зачем тогда писать на этом недоGO, если можно то же самое сразу писать на C?

imul ★★★★★
()
Ответ на: комментарий от zabbal

Нет. Зачем нужен Go без Go и на Си, если уже есть Си и даже С++, предмет тёмный и изучению не подлежит.

mister_VA ★★★
()

Solod

к нему срочно нужен фреймворк Hmel :-) Чтобы был Solod & Hmel а не унылое «трансляция в язык С».

MKuznetsov ★★★★★
()

Как на этом и других транслируемых в Си языках вести разработку? Их же в отладчик не загрузишь? Кодим в Go-шном синтаксисе, а в видим отладчике Си код, типа комфортно?

mky ★★★★★
()
Ответ на: комментарий от PunkPerson

С учётом вашей аватары, на этот вопрос лучше не отвечать :)

mky ★★★★★
()
Ответ на: комментарий от MKuznetsov

Писали уже на опеннете: нужен язык Golod

Который будет как Git Crab, подъедать исходники при транспиляции в С, а затем в JS.

DzenPython
()
Ответ на: комментарий от quickquest

Для такого языка нужно сразу пивопровод программистам делать. На рабочее место, чтобы они переизобрели горутины и бла-бла-бла, ради которых в принципе и стоит терпеть if err!=nil и вообще весь тоталитарный стиль TOOWTDI: «There’s Only One Way To Do It».

И вообще:

  • KvASS: Kvarta As Single Storage - это для него пакетный менеджер и хранилище лефтпадов;
  • BEErr: Basic Enforcement: Errors - библиотека, которая убирает го’шное if err!=nil
  • VI’s Key: окружение для ТруЪ - набор пресетов для vi*
DzenPython
()

наш IT ответ на это ваше безалкогольное пиво и кофе без кофеина?
ну получилось, чо

olelookoe ★★★★
()

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

Bad_ptr ★★★★★
()
Ответ на: комментарий от dynamic_cast

Че, все слова незнакомы?

Тебе? Похоже на то...

Somebody ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.