LINUX.ORG.RU

tinygo 0.6.0

 , ,


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 ()

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

Выделяйте на стеке сколько хотите, никто не запрещает, советчик Вы наш.

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

аналог Ruby

Вообщето аналог только с точки зрения семантики. В рантайме он не уступает го и вале. Единственно в нем есть GC, а так весь дактайпинг работает на шаблонах (и дико разбухает код).

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

Чушь, «чтение литературы» не заменяет понимания через получение личного опыта.

Всё остальное в твоём посте можно автоматически не читать. Хотя конечно личные эксперименты и запиливание реального софта это разные вещи.

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

По ulimit тебя прибьют за такое. Впрочем, можно поставить там unlimited, если ты не пишешь модуль ядра.

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

Да вроде как был, это же системный язык, а не свистелки в виртуальной машинке

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

То есть, для реальной разработки плат оно не годится? Только для тех, схема которых ему известна?

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

Чушь, «чтение литературы» не заменяет понимания через получение личного опыта.

Чушь, чтение литературы заменяет понимание через получение личного опыта. Да ещё и чертовски экономит время. А тыкать в Си или ассемблер Вы можете только пока мамка готовит. Ни один, в здравом уме, дядя за это платить не будет. И всё это Си-надрачивание держится только на том, что дядя пока не осведомлён в должной мере, что его разрабы поражены сифилисом триасового периода.

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

В Го больше на стеке, чем нет.

func sample() {
    var (
        onStackBuf            bytes.Buffer
        onStackStringBuilding strings.Builder

        srv http.Server // I'm on stack
    )

    onHeapBuf = new(bytes.Buffer)

    // stuff here

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

По ulimit тебя прибьют за такое.

Речь не про лимиты, а про грамотное использование стека, когда создавать объекты в куче особого смысла нет. По крайней мере, я так это понял.

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

Насколько я помню, в го используется escape analysis. То есть гарантий, что всё будет на стеке - нет.

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

Мигает дефолтным для данной платы.

Какая нафиг плата если у меня atmega328? ::)

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от LINUX-ORG-RU

Ну так задай пин, наверное надо так led := machine.Pin(12)

KillTheCat ★★★★★ ()

Собрал и прошил китайскую arduino nano.

Сборка сделана просто гениально, если не указать расширение .hex то собирает обычный бинарник. Как-то так:

tinygo build -target arduino -o bin.hex main.go
avrdude -P/dev/ttyUSB0 -pm328p -carduino -b57600 -Uflash:w:bin.hex:i
KillTheCat ★★★★★ ()
Ответ на: комментарий от BigAlex

Говнокодить можно на любом языке. А один проект это нерепрезентативно.

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

Есть, но без прямого доступа. За то, где аплодировать переменную отвечает escape analysis внутри компилятора. Насколько оно работает в tinyGo - хз.

feofan ★★★★★ ()

Интересно, насколько программа портабельна в бинарном виде?

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

Так это unsafe и оно указатель возвращает. При чём тут стек?

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

И что, на Go уже есть какой-нибудь серьёзный софт?

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

есть, в основном связанный с контейнерами (docker, Kubernetes), хотя недавно Microsoft запилила виртуальную машину для Lua на Go.

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

docker, Kubernetes

А это вообще хоть кто-нибудь серьёзный использует? Всё всегда считают на кластерах без этих ваших докеров.

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

Kubernetes как минимум в гугле используется, достаточно серьезно или так, Рога и Копыта?

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

Kubernetes как минимум в гугле используется

Меня мало волнует что там у каких хипстеров происходит.

И прочих нормальных людей, видимо, тоже: https://upload.wikimedia.org/wikipedia/commons/f/f8/Tiobeindex.png

А теперь пример действительно серьёзного софта: https://root.cern.ch/

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

Так это unsafe и оно указатель возвращает. При чём тут стек?

Извините, я подумал, что Вы английский понимаете. Суть того метода в исключении strings.Builder из escape analyzer, чтобы он не выделялся на куче. Там так написано.

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

Есть проблема которую нужно решить – и есть решение.
В наше время даже ссаный IoT-контроллер

Какие готовые решения на расте уже есть?

Язык без экосистемы

А у раста она есть эта самая экосистема?! Например??

IoT-контроллер умеет больше чем вонючий Третий Пень

Например какой?

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

Согласен. Не про раст было. Ок.

IoT-контроллер умеет больше чем вонючий Третий Пень

Пример привести. Самому интересно.

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

Я балуюсь раст для своих проектов. Нет желания набегать и холиварить. Что со мной не так?

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

Посмотрел код. Я не разбираюсь в Go. Что значит звездочки и 'unsafe' в исходниках? И почему так часто встречается?

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

Это временное решение, там написано в комментарии всё. Он компилируется в 0 строк кода и нужен всего-то для того, чтобы не выделять буфер на куче, а работать со стеком. Вот и всё. Что этот код делает вникать не нужно. И в Го разбираться. Ключевая фраза «to avoid heap allocation», или типа того, в комментарии ниже. Программисту об этом знать не обязательно. Просто делать как я показал в примере и всё.

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

Т.е. чиста Go не подходит и из него делают другой язык?! или как?

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

Выходит что не уделывает пень!?

А по твоей ссылке 150 DMIPS performance, а здесь http://www.roylongbottom.org.uk/dhrystone results.htm указано что пень третий выдает 461 DMIPS не потималку и 1858 DMIPS оптималку.

Т.е. «IoT enabled High performance» далека даже до результатов 2000 года.

Или не то?!

baist ()

Любому кто считает что ГОвноподелию место на контроллерах - рекомендую написать на ЭТОМ прошивку для ЭБУ. Ага, том самом который должен ловить зажигание, через 115 мс включать форсунку а спустя еще 200 мс свечу, после чего отключать свечу через 50 мс, а форсунку через 100 мс, номер форсунки и свечи определять по ДПКВ, а временные промежутки расчитывать исходя из показаний лямбды, датчика расхода и так далее и тому подобное. А потом на этом проехаться.

Контроллер класса Atmega 328P.

Удачи.

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

Да пох, всё равно для рантайма хватит. Смысл в том, что корячиться с ручным управлением памяти и каким-нибудь Си отсутствует.

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

Типа tinygo – это не другой язык, а другой компилятор что ли. Типа того.

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

корячиться с ручным управлением памяти и каким-нибудь Си отсутствует

А в чем оно заключается?! можно примеры?!

baist ()
Последнее исправление: baist (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.