tinygo编译的原理

说明

tinygo本身是个针对微控制器的编译器+工具,可以build、flush。

tinygo依赖自己的go-llvm

tinygo的实现中依赖的自己的go-llvm,其实就是llvm的一个go的binding,最终依赖系统的llvm

通过go-llvm/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) {

转载于:https://my.oschina.net/chuqq/blog/3067975

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值