URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 117961
[ Назад ]

Исходное сообщение
"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"

Отправлено opennews , 19-Июл-19 15:25 
Доступен (https://github.com/tinygo-org/tinygo/releases) выпуск проекта Tinygo 0.7.0 (https://tinygo.org/), в рамках которого развивается компилятор языка Go для областей, в которых необходимо компактное представление результирующего кода и низкое потребление ресурсов, таких как микроконтроллеры и компактные однопроцессорные системы.  Код распространяется (https://github.com/tinygo-org/tinygo/) под лицензией BSD.


Компиляция для различных целевых платформ реализована при помощи LLVM, а для поддержки языка применяются библиотеки, применяемые в основном инструментарии от проекта Go. Скомпилированная программа напрямую может запускаться на микроконтроллерах, позволяя применять Go в качестве языка для написания сценариев автоматизации.


Мотивом создания нового проекта послужило желание использовать привычный для себя язык Go на компактных устройствах - разработчики рассудили, что если существует вариант Python для микроконтроллеров, то почему бы не создать подобное для языка Go. Go выбран (https://tinygo.org/faq/why-go-instead-of-rust/) вместо Rust так как он более прост в изучении, предоставляет независимую от реализаций потоков поддержку распараллеливания на основе сопрограмм и предлагает обширную стандартную библиотеку ("батарейки входят в комплект").


В текущем виде поддерживается 15 моделей микроконтроллеров, включая различные платы Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark,    Nordic Semiconductor, Makerdiary и Phytec. Программы также могут быть собраны для запуска в браузере в формате WebAssembly и в виде исполняемых файлов для Linux.


Ключевые цели проекта:

-  Генерация очень компактных исполняемых файлов;
-  Поддержка наиболее распространённых моделей плат микроконтроллеров;
-  Возможность применения для Web;
-  Поддержка CGo с минимальными накладными расходами при вызове функций на языке Си;
-  Поддержка большей части стандартных пакетов и возможность компиляции типового существующего кода без его изменения.


Не входит в число основных целей  поддержка многоядерных систем,
эффективный запуск огромного числа сопрограмм (сам по себе запуск сопрограмм поддерживается в полной мере), достижение уровня производительности эталонного компилятора gc (оптимизация отдаётся на откуп LLVM и в некоторых применениях  Tinygo может оказаться быстрее gc) и полная совместимость (https://tinygo.org/lang-support/) со всеми приложениями на Go.

Основным отличием от похожего компилятора emgo (https://github.com/ziutek/emgo) является попытка сохранения оригинальной  модели управления памятью Go с использованием сборщика мусора и задействование LLVM для генерации эффективного кода вместо компиляции в представление на языке Си.

Из изменений в выпуске 0.7 отмечается реализация команды "tinygo test", обеспечение поддержки сборки мусора для большинства целевых плат (на базе ARM Cortex-M) и  WebAssembly, поддержка платы HiFive1 rev B на основе архитектуры RISC-V и платы Arduino nano33,
улучшение поддержки языка (поддержка битовых полей с использованием геттеров и сеттеров, поддержка анонимных структур).

    


URL: https://github.com/tinygo-org/tinygo/releases
Новость: https://www.opennet.ru/opennews/art.shtml?num=51126


Содержание

Сообщения в этом обсуждении
"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Анонимно , 19-Июл-19 15:25 
Под ESP32 кто-нибудь пробовал это дело?

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 15:31 
Жаль поддержки ESP32 нет, а было бы просто огонь:
- хорошая поддержка веб-технологий;
- горутины (а эта железка двухъядерная).

Хотя наличие какой-нибудь простенькой RTOS не помешало бы...

> Генерация очень компактных исполняемых файлов;

Лень по ссылкам ходить, насколько компактно? Вес Hello World исчисляется не в мегабайтах? Любители Go, не минусуйте - в контексте встраиваемых систем "настольный" Go действительно весьма жирный.

> поддержка платы HiFive1 rev B на основе архитектуры RISC-V

Вот это кстати хорошо.

Немного оффтоп: лично меня печалит, что беспроводные коммуникации = проприетарные блобы. Wi-Fi (те же ESP-шки, которые впихнули в одну из RISC-V плат), Bluetooth, а уж про GSM/GPRS вспоминать страшно... Медленное, но верное рподвижение RISC-V радует, надеюсь что однажды кто-нибудь сможет родить по-настоящему свободный Wi-Fi чип.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 15:38 
Во что нашёл:
https://tinygo.org/faq/what-about-esp8266-esp32/

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено proninyaroslav , 19-Июл-19 18:46 
>- горутины (а эта железка двухъядерная).

И они никак не связаны с многоядерностью, асинхронность не всегда равно параллелизм. Так что не вижу тут никакого преимущества для многоядерных процах по сравнению с другими языками. К тому же по дефолту (по крайней мере так было) рутины запускаются на 1 ядре, поочерёдно переключаясь, так как работа с потоками ОС не такая уж и дешёвая вещь.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено АноНеМаус , 20-Июл-19 16:08 
По дефолту уже давно горутины запускаются не на одном ядре. И потоки ОС почти не используются (запускается столько потоков сколько ядер, а дальше уже свой планировщик)

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено asdasd , 19-Июл-19 19:49 
> Любители Go, не минусуйте - в контексте встраиваемых систем "настольный" Go действительно весьма жирный.

Любая статически скомпилированная прога будет столько весить (а микрики как раз статично собранные, ибо там не то что shared library, там ОС то нет).


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 19:52 
Ничего подобного. Дело даже не в том, что у Go весьма жирный рантайм, а в самой «модели памяти», которую сии деятели героически пытаются протащить на МК. При малом объёме оперативки вообще кучу использовать противопоказано, не говоря уже про GC.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 20-Июл-19 06:16 
> Любая статически скомпилированная прога будет столько весить

Да что вы такое говорите?


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Анон12345 , 20-Июл-19 10:55 
frog@frog-ThinkPad-X240 /tmp> cat q.c
#include <stdio.h>
void main()
{
    printf("Hello World\n");
}
frog@frog-ThinkPad-X240 /tmp> gcc q.c -static
frog@frog-ThinkPad-X240 /tmp> ls -la a.out
-rwxrwxr-x 1 frog frog 844696 Jul 20 10:54 a.out*
frog@frog-ThinkPad-X240 /tmp>

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 20-Июл-19 11:15 
Не умеешь.


$ musl-gcc q.c -static
$ ls -l a.out
-rwxr-xr-x 1 user user 26064 июл 20 11:12 a.out


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним qwerty_qwerty1 , 21-Июл-19 09:51 
Не бьется что то


#include <stdio.h>                                                                                                                  
int main()                                                                                                                          
{                                                                                                                                    
printf("Hello World\n");                                                                                                            
return 0;                                                                                                                            
}    

gcc q.cc -static
ls -l

844696 июл 21 09:48 a.out                                                                                  
70 июл 21 09:48 q.cc    


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 20-Июл-19 11:18 
Ну и для сравнения:


$ cat q.go
package main

import "fmt"

func main() {  
    fmt.Println("Hello World")
}
$ go build
$ ls -l hello
-rwxr-xr-x 1 user user 1906945 июл 20 11:16 hello



"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Fedd , 28-Июл-19 18:26 
package main
func main() {
    print("Hello World!\n")
}
go build -ldflags -s hello.go
ls -l hello
-rwxr-xr-x 1 Unit RedstarOS 760160 Jul 28 18:16 hello

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено пох. , 20-Июл-19 14:03 
и это он еще man strip не прочитал!


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено НяшМяш , 19-Июл-19 16:04 
> так как он более прост в изучении

А вот мне он очень трудно даётся, после C-подобного синтаксиса в разных языках постоянно в голове крутится вопрос "зачем так сделали вообще"


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено metanprog , 19-Июл-19 16:09 
Попробуй метапрог, вот там-то заживём!

</sarcasm>


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено VarflomeyKote4ka , 19-Июл-19 18:09 
Дык реально заживем. По твоему вот то что выше - лучше?

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 16:15 
У Go вполне себе C-подобный синтаксис. Слегка упрощённый (можно не ставить лишние скобочки и разделители).

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 17:44 
Таки плюсую

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 22-Июл-19 23:12 
Не надо, плюсы то еще го*но монструозное. Даже Страуструп там уже ногу сломает.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено НяшМяш , 19-Июл-19 23:54 
Не спорю, у Go синтаксис ближе к С, чем к тому же Python. Но, например, зачем было делать 2 способа объявить переменную, оставлять возможность variable shadowing - чтобы потом ловить лулзов на этапе дебага и впиливать в go tool ещё один флаг проверки? Или, например, синтаксис методов на структуре - его вообще упорыш писал. Ладно, нет в языке классов, наследования и вот этого всего - но сделать человеческий синтаксис, чтобы в теле структуры можно было обьявить метод без тонны ((())) наверное можно было? Прямо современный язык, на котором писать сложнее чем на С. Даже жабоскрипт в этом плане куда проще и красивее.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 20-Июл-19 00:20 
> сделать человеческий синтаксис, чтобы в теле структуры можно было обьявить метод

Зачем тебе его там объявлять? Чтобы дублировать один и тот же прототип в двух местах, как в сишечке? Так в сишечке это не от хорошей жизни сделано.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено НяшМяш , 21-Июл-19 00:27 
Дык в этом-то и вопрос - зачем в современный ЯП тащит конструкции из С? Я считаю, что следующая запись куда проще парсится гдазами:

type Foo struct {
    func Bar() string { ... }
}

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

type Foo struct {
    
}

func (f Foo) Bar() string { ... }


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено funny.falcon , 21-Июл-19 00:43 
Вообще, горный синтаксис лучше выглядят в результатах грепа: хочешь найти, где метод объявлен, грепаешь, и сразу видишь, на каких типах он объявлен.

А с С++/Java/etc синтаксисом приходится лезть в файл и искать начало объявления класса.

Безусловно, с навороченными IDE это все не проблема. Но иногда хочется использовать VIM.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 22-Июл-19 23:30 
В C++ никто не запрещает писать определение метода вне определения класса. Собственно, обычно так и делают, если только речь не идёт о шаблонах и/или предназначенной для инлайнинга мелочи.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 22-Июл-19 13:36 
> Я считаю, что следующая запись куда проще парсится гдазами:
>
> type Foo struct {
>     func Bar() string { ... }
> }

Такая — проще, да. А вот когда на месте «...» оказывается несколько десятков строк, и число методов тоже начинает измеряться десятками, — уже не проще.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Наше имя Легион , 23-Июл-19 02:28 
структура есть сучность хранения данных. методы досступа к оным (к модификации,чтению, созданию нового etc) - это не к структуре. (ладно, в крестах - да, но то - кресты...)

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 16:50 
Правильно, пусть дальше будем жрат тормозной JS!

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено user90 , 19-Июл-19 16:54 
js хоть просмотреть можно (возникни у меня такое извращенное желание)..
Вообще-то очень забавно рассматривать браузер как среду для исполнения кода))

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 16:57 
> js хоть просмотреть можно

Его сейчас всюду минифицируют... Толку немного.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 16:58 
> js хоть просмотреть можно

https://code.jquery.com/jquery-3.4.1.min.js - чайтате, пожалуйста. И это ещё без обфускатора.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено user90 , 19-Июл-19 17:09 
Убедил. Поэтому давно использую технику блокировки всех сторонних js, чтобы не сталкиваться с подобными простынями :) Ну не нужны мне ПРИЛОЖЕНИЯ в браузере.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 17:22 
> не нужны мне ПРИЛОЖЕНИЯ в браузере.

Вот с этого и нужно было начинать.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 19:22 
Сейчас всё идет к тому, что в браузере будут всё более мощные и крутые приложения (уже, собственно), в частности без убогого дома и с wasm.
Нет смысла этому противиться.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено user90 , 19-Июл-19 20:24 
Проблема в том, что эти какбы-приложения по существу все равно внешние сервисы. Да и использование браузера как среды выполнения выходит все равно довольно накладно, и тут ничего сделать нельзя. То есть никаким прогрессом тут и не пахнет..

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено VelikiiNehochuha , 21-Июл-19 13:00 
доставка приложений, обновлений, не нужна установка, плюсов тоже хватает

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 20-Июл-19 15:48 
> Сейчас всё идет к тому, что в браузере будут всё более мощные и крутые приложения (уже, собственно), в частности без убогого дома и с wasm.

Где-то я что-то подобное уже слышал лет 15 назад. Только вместо wasm фигурировал flash.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним84701 , 20-Июл-19 16:00 
>> Сейчас всё идет к тому, что в браузере будут всё более мощные и крутые приложения (уже, собственно), в частности без убогого дома и с wasm.
> Где-то я что-то подобное уже слышал лет 15 назад. Только вместо wasm фигурировал flash.

Java апплеты, ActiveX.  Причем, совсем не примитив:
https://www.csm.ornl.gov/~geist/java/book/Cool-Applets.html (1997, на тех компютерах модный^W современный JS феймворк вообще в память не влезет, не говоря уже о JS движках с JIT)

или из более современного:
http://coolapplets.blogspot.com/


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено CryNet , 20-Июл-19 10:56 
> Поэтому давно использую технику блокировки всех сторонних js

Ох и не завидую я тебе


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 16:59 
А что толку-то? К DOM'у всё равно толком не проберёшься.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 19:20 
Справедливости ради, JS - один из быстрейший интерпретируемых языков. Браузерные войнушки пошли ему на пользу за последние десять лет.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 19:23 
а больное место браузера -- тормозной DOM, который в идеале заменить бы на WebGL / WebAssembly

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Crazy Alex , 19-Июл-19 19:40 
Больное место браузера - возможность гонять код вместе с данными и менять его в любой момент,напрочъ убившее любые осмысленные стороние (и подконтрольные пользователю) клиенты

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 20:55 
>а больное место браузера -- тормозной DOM, который в идеале заменить бы на WebGL / WebAssembly

Ишь чего удумали, текст с сайтов копировать! Дадим им картинку, пусть утрутся.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено НяшМяш , 19-Июл-19 23:56 
Будем скриншотить и прогонять через OCR. Чёрт, звучит как идея для дополнения (если они к тому времени останутся).

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено гуглезила , 22-Июл-19 10:05 
останутся, но доступа к изображению на странице у них не будет, для вашей большей безопастносте - а то ж они его могут - украсть!


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено мяя , 20-Июл-19 15:16 
DOM не такой уж тормозной, просто не надо его использовать как хранилище данных.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 18:58 
Убийца раста.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 19:25 
Смотря на различный код, Раст, пускай и многословней, но на вид как-то поадекватнее Го
Так что пускай лучше живёт

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 23:00 
Адекватнее. Одни сплошные сголашения и синтаксис просто хакерский какие-то двоеточия вертикальные пайпы блоки выполнения. Ну нахрен.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Илья , 20-Июл-19 14:49 
Да, синтаксис не очень красивый. Но если разобраться поглубже - то становится понятно, что в расте всё на своих местах.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 20-Июл-19 19:46 
А вы не хакер случаем?

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 21-Июл-19 12:51 
> А вы не хакер случаем?

Хyякер


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Ordu , 19-Июл-19 22:26 
Не, это разные языки. Сферы их применения пересекаются, но не совпадают.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 20:20 
> компактное представление
> LLVM

Как-то не верится.


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 21:10 
Вот добавить бы упралвение подкапотными потоками (создавать, удалять, группировать в группы и т.д.) ну цены бы не было, а так приходиться изгаляться всякими GetOSLockThread.
А да еще хорошо бы более прозрачную интеграцию с C runtime и вообще бы цены небыло, а так какая игрушка.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 21:39 
И у нас там был недалеко топор. И мы подумали — может топор запустить?! Отсюда и родилась мысль — сделать летающий топор. (c)

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 19-Июл-19 23:01 
Откуда это? Хочу почитать ...

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 20-Июл-19 06:14 
В поиск вбей, что ты как маленький.

https://www.ominform.com.ua/2015/08/28/letayushhiy-topor/


"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Илья , 20-Июл-19 14:51 
Какая-то токсичная газета, вы не находите?

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 20-Июл-19 19:44 
То есть летающий топор это нормально, а гезета значит токсичная. Да помоему это все идиотизм вмесете взятое,

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено Аноним , 21-Июл-19 03:13 
Хорошо, в следующий раз просто кину ссылку на DuckDuckGo с соответствующим запросом.

"Выпуск Tinygo 0.7.0, компилятора языка Go на базе LLVM"
Отправлено vantoo , 22-Июл-19 13:34 
> разработчики рассудили, что если существует вариант Python для микроконтроллеров, то почему бы не создать подобное для языка Go

Рассуждение из области "вон кто-то намусорил, значить почему бы и мне не намусорить?".