这篇文章主要讲解了“tinygo编译的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“tinygo编译的原理是什么”吧!
tinygo本身是个针对微控制器的编译器+工具,可以build、flush。
tinygo的实现中依赖的自己的go-llvm,其实就是llvm的一个go的binding,最终依赖系统的llvm
tinygo基于go的编译器,通过go-llvm/llvm实现了一个基本的编译器,所以支持的语法、特性主要和go类似
例如 channel的发送:
compiler/channel.go
37 c.createRuntimeCall("chanSend", []llvm.Value{coroutine, ch, valueAllocaCast, valueSize}, "") 38 39 // End the lifetime of the alloca.
src/runtime/chan.go
44 // chanSend sends a single value over the channel. If this operation can 45 // complete immediately (there is a goroutine waiting for a value), it sends the 46 // value and re-activates both goroutines. If not, it sets itself as waiting on 47 // a value. 48 func chanSend(sender *coroutine, ch *channel, value unsafe.Pointer, size uintptr) {
感谢各位的阅读,以上就是“tinygo编译的原理是什么”的内容了,经过本文的学习后,相信大家对tinygo编译的原理是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。