Add README
Этот коммит содержится в:
		
							родитель
							
								
									90fb0ee4eb
								
							
						
					
					
						коммит
						9ad59bf001
					
				
					 1 изменённых файлов: 65 добавлений и 0 удалений
				
			
		
							
								
								
									
										65
									
								
								README.markdown
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										65
									
								
								README.markdown
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
# TinyGo - Go compiler for microcontrollers
 | 
			
		||||
 | 
			
		||||
> We never expected Go to be an embedded language and so it's got serious
 | 
			
		||||
> problems [...].
 | 
			
		||||
 | 
			
		||||
-- Rob Pike, [GopherCon 2014 Opening Keynote](https://www.youtube.com/watch?v=VoS7DsT1rdM&feature=youtu.be&t=2799)
 | 
			
		||||
 | 
			
		||||
TinyGo is a project to bring Go to microcontrollers and small systems with a
 | 
			
		||||
single processor core. It is similar to [emgo](https://github.com/ziutek/emgo)
 | 
			
		||||
but a major difference is that I want to keep the Go memory model (which implies
 | 
			
		||||
garbage collection of some sort). Another difference is that TinyGo uses LLVM
 | 
			
		||||
internally instead of emitting C, which hopefully leads to smaller and more
 | 
			
		||||
efficient code and certainly leads to more flexibility.
 | 
			
		||||
 | 
			
		||||
My original reasoning was: if [Python](https://micropython.org/) can run on
 | 
			
		||||
microcontrollers, then certainly [Go](https://golang.org/) should be able to and
 | 
			
		||||
run on even lower level micros.
 | 
			
		||||
 | 
			
		||||
Example program (blinky):
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
import "machine"
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	led := machine.GPIO{machine.LED}
 | 
			
		||||
	led.Configure(machine.GPIOConfig{Mode: machine.GPIO_OUTPUT})
 | 
			
		||||
	for {
 | 
			
		||||
		led.Low()
 | 
			
		||||
		runtime.Sleep(runtime.Millisecond * 1000)
 | 
			
		||||
 | 
			
		||||
		led.High()
 | 
			
		||||
		runtime.Sleep(runtime.Millisecond * 1000)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Currently supported features:
 | 
			
		||||
 | 
			
		||||
  * control flow
 | 
			
		||||
  * many (but not all) basic types: most ints, strings, structs
 | 
			
		||||
  * function calling
 | 
			
		||||
  * interfaces for basic types (with type switches and asserts)
 | 
			
		||||
  * goroutines (very initial support)
 | 
			
		||||
  * function pointers (non-blocking)
 | 
			
		||||
 | 
			
		||||
Not yet supported:
 | 
			
		||||
 | 
			
		||||
  * float, complex, etc.
 | 
			
		||||
  * garbage collection
 | 
			
		||||
  * interface methods
 | 
			
		||||
  * channels
 | 
			
		||||
  * introspection (if it ever gets implemented)
 | 
			
		||||
  * standard library (needs more language support)
 | 
			
		||||
  * `defer`
 | 
			
		||||
  * closures
 | 
			
		||||
  * ...
 | 
			
		||||
 | 
			
		||||
## Analysis
 | 
			
		||||
 | 
			
		||||
The goal is to reduce code size (and increase performance) by performing all
 | 
			
		||||
kinds of whole-program analysis passes. The official Go compiler doesn't do a
 | 
			
		||||
whole lot of analysis (except for escape analysis) becauses it needs to be fast,
 | 
			
		||||
but embedded programs are necessarily smaller so it becomes practical. And I
 | 
			
		||||
think especially program size can be reduced by a large margin when actually
 | 
			
		||||
trying to optimize for it.
 | 
			
		||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче