LINUX.ORG.RU

tinygo 0.6.0

 , tinygo


4

5

TinyGo – это компилятор языка Go, предназначенный для использования в таких областях, как микроконтроллеры, WASM, а также разработки утилит командной строки.

TinyGo использует утилиты и библиотеки, написанные в проекте Go, при этом предоставляя альтернативный метод компиляции программ на основе наработок проекта LLVM.

Задачи проекта:

  1. Обеспечить минимальный размер исполняемых файлов.
  2. Поддержка наибольшего количества микроконтроллеров.
  3. Поддержка WebAssembly.
  4. Хорошая поддержка CGo.
  5. Поддержка оригинального кода на Go без изменений.

Пример использования для переключения LED на микроконтроллере:

package main

import (
    "machine"
    "time"
)

func main() {
    led := machine.LED
    led.Configure(machine.PinConfig{Mode: machine.PinOutput})
    for {
        led.Low()
        time.Sleep(time.Millisecond * 1000)

        led.High()
        time.Sleep(time.Millisecond * 1000)
    }
}

Версия 0.6.0 содержит множество изменений. Основные из них относятся к улучшению поддержки CGo, js.FuncOF (Go 1.12+), а также двух новых отладочных плат: Adafruit Feather M0 и Adafruit Trinket M0.

Полный список изменений доступен на GitHub странице проекта.

>>> TinyGo.org

anonymous

Проверено: jollheef ()

По коду не понятно, каким образом оно определяет, допустим, на какой ножке находится этот самый светодиод

XMs ★★★★★
()

Почему Go вместо Rust (перевод блога разработчиков)

Rust это еще один «новый» и «безопасный» язык, который доступен для использования на микроконтроллерах, а также имеет весьма активное комьюнити.

Тем не менее, помимо субъективных предпочтений в ЯП, Go имеет следующие преимущества:

* Go значительно проще в изучении. Rust в целом более сложен чем Go, со запутанными правилами владения и прочими особенностями. Go же гордится тем, что будучи простым и немного туповатым языком, он оказывается невероятно читаемым.

* Поддержка из коробки конкуретности с горутинами и каналами, которые **не основываются на определенной реализации потоков**. Это **позволяет избежать** необходимости реализации RTOS-like фреймворка или RTOS целиком с еще одним новым API для изучения. В Go же все особенности конкурентности встроены в язык.

* Батарейки стандартной библиотеки. Rust использует монолитную стандартную библиотеку, которая на данный момент неюзабельна на bare metal, в то время как стандартная библиотека Go работает.

* Также, отличные от стандартных пакетов в Go не маркируются чем-то вроде `#![no_std]` для того, чтобы быть юзабельными на bare metal.

anonymous
()

Go значительно проще в изучении

И сложнее в использовании.

Go же гордится тем, что будучи простым и немного туповатым языком, он оказывается невероятно читаемым.

Читаемость кода отнюдь не равносильна его понятности. Особенно когда большая часть кода — это

if err != nil {
        return nil, err
}

Поддержка из коробки конкуретности с горутинами и каналами, которые **не основываются на определенной реализации потоков**. Это **позволяет избежать** необходимости реализации RTOS-like фреймворка или RTOS целиком с еще одним новым API для изучения. В Go же все особенности конкурентности встроены в язык.

Вот только этот функционал обеспечивается рантаймом, который сам по себе довольно жирный и вдобавок сильно усложняет интероп с другими языками.

Rust использует монолитную стандартную библиотеку, которая на данный момент неюзабельна на bare metal

Ну вот это просто неправда. Есть core, которая в принципе рантайма не требует. Отдельно при необходимости можно подключить alloc для поддержки динамического выделения памяти.

Также, отличные от стандартных пакетов в Go не маркируются чем-то вроде `#![no_std]` для того, чтобы быть юзабельными на bare metal.

Что отнюдь не означает, что они действительно юзабельны в подобном случае.

~~@~~

anonymous
()

Горутины на атмегах и никакой сишки? Звучит очень круто, жаль нет поддержки esp.

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

Есть core, которая в принципе рантайма не требует. Отдельно при необходимости можно подключить alloc для поддержки динамического выделения памяти.

alloc будет стабильным только в следующем релизе. Да и ассемблер ещё не стабилизирован.

O02eg ★★★★★
()

на пентиум3 работать будет? оригинальный го не работает, инструкциев не хватает. и программы на го тоже не работают.

buratino ★★★★★
()

Rust это еще один «новый» и «безопасный» язык, который доступен для использования на микроконтроллерах, а также имеет весьма активное комьюнити.

Ничего себе, оборзевшие разрабы. Еще один «новый» и «модный» языг - это как-раз Go. Очередная поделка со сборщиком мусора, которых пруд-пруди. На микроконтролерах ему делать нечего.

Rust же - никакой не еще один, а с уникальной парадигмой, которой нет ни у одного другого языка. Как-раз для микроконтролеров подходит идеально, ибо полностью управляет памятью.

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

Напомни, в каком языке до Golang была такая же реализация конкурентности, как в Go?

Какой язык был настолько же прост в использовании, но при этом был статически типизированным и компилировался в нативный код?

Какой ещё язык до Go вызывал жопную боль при каждом упоминании у каждого Rust-фанатика?

Go — это прорывной язык для индустрии.

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

Не программировал на С#, но подозреваю что там можно все это устроить (кроме простоты).

vlad9486
()
Ответ на: комментарий от anonymous

Напомни, в каком языке до Golang была такая же реализация конкурентности, как в Go?

Simula, Modula-2

Какой язык был настолько же прост в использовании, но при этом был статически типизированным и компилировался в нативный код?

Pascal

Какой ещё язык до Go вызывал жопную боль при каждом упоминании у каждого Rust-фанатика?

Никакакой, включая Go. А вот ржавчина знатно заставляет свербить в анусах всяких гогошников.

Go — это прорывной язык для индустрии.

Бугага! Гофанатику даже палиться не надо.

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

Нее, дафайте лучче погороним это ваше гогно.

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

А что в го еще и нет классов? В расте они просто не нужны. Там есть dyn trait примерно соответсвующие тайпклассам хаскеля

q0tw4 ★★★★
()

Начинание интересное, но пока очень сырое. Кроме хэлловордов вряд ли на что-то годно.

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

go сложнее в использовании, чем rust

Проиграл.

Вот только этот функционал обеспечивается рантаймом, который сам по себе довольно жирный и вдобавок сильно усложняет интероп с другими языками.

Сабж как раз решает эту проблему.

Ну вот это просто неправда. Есть core, которая в принципе рантайма не требует. Отдельно при необходимости можно подключить alloc для поддержки динамического выделения памяти.

go тоже можно использовать без стандартной библиотеки, только это фактически совсем другой язык (и в том, и в другом случае) и смысла в этом никакого нет.

Что отнюдь не означает, что они действительно юзабельны в подобном случае.

В go не нужно на каждом шагу делать unsafe и вызовы сишного кода, поэтому огромная часть библиотек будет пригодна.

Короче, очень слабенький наброс, разберись в матчасти и попробуй еще раз.

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)
Ответ на: комментарий от FilosofeM

А вот ржавчина знатно заставляет свербить в анусах всяких гогошников.

Половина комментариев только и состоит из задней боли фанатиков rust.

ОК.jpg

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

В go не нужно на каждом шагу делать unsafe и вызовы сишного кода, поэтому огромная часть библиотек будет пригодна.

Ну да, это же не игрушечный язык, чтобы OpenGL вызовы дёргать.

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

Ну да, это же не игрушечный язык, чтобы OpenGL вызовы дёргать.

Боюсь тебя спросить, как и чем собираешься дергать OpenGL на микроконтроллерах и в браузерах.

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

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

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

смысл блоков unsafe не в том, что их вообще не должно быть (это невозможно, тем более в эмбеде), а в том в них будет только небольшая часть кода. Меньше проблемного кода - меньше проблем.

И вообще, го и раст - языки с совершенно разными подходами, какой смысл их сравнивать? Конкретно про этот tinygo я бы скорее поинтересовался, какой цимес переходить на него с Си.

anonymous
()

То есть, теперь говнокод для МК будет не только на C++ под ардуину (что ещё можно было сравнительно просто облагородить руками), но ещё и на богомерзком Go ?

DawnCaster ★★
()

Заинтересовался, как они решили вопрос с использованием кучи и сборкой мусора (что на микроконтроллерах очень нежелательно): оказалось, что никак. Советуют не использовать возможности языка, которые приводят к выделению в куче. Я бы не сказал, что это проще C или Rust.

DuMOHsmol
()

очередной язычок для моргания светодиодами

anonymous
()
Ответ на: комментарий от DuMOHsmol

А давайте тогда кристалл в микроконтроллеры. Он же почти полный клон руби. Удобно кодить будет.

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

Давайте. Я имею ввиду: вы сами и давайте. Никто больше не будет ни участвовать ни пользоваться.

У вас есть некоторая трудность, состоящая в том, что вы не понимаете, в чём состоит задача. Ruby в микроконтроллерах не нужен, а раз ваш кристал емли верить вам аналог Ruby, то и он не нужен.

Есть реализации Lua и JavaScript для микроконтроллеров. Неперспективны.

Единственный язык, который завоевал некоторую популярность (кроме наиболее обычного C) - MicroPython. С ним и надо сравнивать tinyGo. Есть ешё Zerynth Python. Кажется интересным, но как и tynyGo страдает малым выбором плат, на которых можно разрабатывать приложения на нём.

В общем, tynyGo может иметь некоторый успех в будущем, но может и нет.

Partisan ★★★★
()

О, я вижу, бомбаж уже начался :D

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

Напомни, в каком языке до Golang была такая же реализация конкурентности, как в Go?

В Эрланге и ещё где-то до Эрланга.

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

ржавчина знатно заставляет свербить в анусах всяких гогошников

Не правда же, всем абсолютно пофиг на раст, пока раст-веганы не набигают и не начинают кричать о том, какой он классный.

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

Я тоже недавно типичные Go-сырцы наблюдал на коммерческом проекте, там пустой интерфейс использовался чаще чем даже самописная функция для проверок на ошибки)))

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

Хочу видеть человека, который написал на нём чуть больше хеллоуворлда и скажет абсолютно обратное. Потому и свербит - потому что таких очень мало: ты либо с безумным взглядом отстаиваешь свои сакральные ретроценности, не пытаясь понять вовсе, либо пытаешься понять и начинаешь начинаешь ржаветь.

anonymous
()
Ответ на: комментарий от Partisan

Есть реализации Lua и JavaScript для микроконтроллеров. Неперспективны.

Слушай, но NodeMCU для ESP8266 вполне торт.

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

«Лень изучать что-то новое, но не лень принимать активное участие в срачах о предмете, суть которого ты не знаешь» (Касается не только ржавого) - это выбор дегенератов, уровень низших форм жизни из ВКшечки.

anonymous
()
Ответ на: комментарий от WitcherGeralt

О какашечке никакой речи и не шло, пользуешься ты ей или нет - всем безразлично. Но очень странно что ты решил об этом упомянуть.

И каким образом тот анон - растонутый? Он просто жиробасик, который вбросил, - и все клюнули.

А Go я просто не пользуюсь.

anonymous
()
Ответ на: комментарий от Partisan

Единственный язык, который завоевал некоторую популярность (кроме наиболее обычного C) - MicroPython.

Да не завоевал, а вот lua на esp определенно популярен.

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

NodeMCU для ESP8266 вполне торт

Ну, есп - не вполне типичный МК. Алсо, нода пока что не вполне торт, много недоделок и странных глюков, вроде пропуска прерываний GPIO при передаче данных через UART.

Deleted
()
Ответ на: комментарий от FilosofeM

Rust же - никакой не еще один, а с уникальной парадигмой, которой нет ни у одного другого языка. Как-раз для микроконтролеров подходит идеально, ибо полностью управляет памятью.

Ну, насчёт уникальности ты загнул. Аналогичные возможности есть в ATS, Clean и Cyclone. Все появились сильно раньше Rust'а, а последний вообще прямым текстом называют лекалом, по образцу которого Rust и сделан

anonymous
()
Ответ на: комментарий от shkolnick-kun

Кто-нибудь пробовал это поделие? Если да, пошарьте бинарь для кортекса, интерсно посмотреть сколько весит и какой асм генерит.

pftBest ★★★★
()
Последнее исправление: pftBest (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

... тема про Go, напоминаю, растонутые всегда сами набигают.

Не знаю, как там в других темах про Go, но в этой вы их сами «позвали».

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

какой цимес переходить на него с Си

Известное дело какой: Си – говно мамонта. Язык без экосистемы и достаточно полной стандартной библиотеки по нонешним временам только динозавры называют языком. Трахаться со всем этим на каждый чих, вместо того, чтобы go get mother/foxtrot/uniform/charlie/kilo/er будет только конкретно отсталый. Я конечно понимаю, что кому-то не хватает знаний об устройстве ПК и ОС, контроллеров там всяких. Но для этого обычно достаточно чтения литературы, а не мастурбации с Си. Есть проблема которую нужно решить – и есть решение. И есть худший способ решить эту проблему под сомнительными предлогами, именуемый Си.

P.S.: вот только не нужно тут затирать про ограниченные ресурсы. В наше время даже ссаный IoT-контроллер умеет больше чем тот же вонючий Третий Пень. Во всяком случае на рантайм хватит.

P.P.S: остаётся проблема разделяемых библиотек. Но да мне-то пофигу на всё это изначально.

kostyarin_ ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.