2016-01-13 57 views
3

I read从Go 1.4开始,Go运行时被写入Go本身(而不是C)。Go运行时可能如何写入Go?

这怎么可能?如果Go程序运行在运行时间之上,并且运行时间是Go程序,那么运行时间是否会自动运行?

+2

此问题可能会有用:[用自己的语言编写编译器](http://stackoverflow.com/q/193560/142162) –

+0

@TimCooper - 谢谢,这很有用。看起来用该语言编写语言的编译器是可能的,因为一旦引导,编译器就能够编译它自己。但是,运行时似乎不可能支持自己:例如,垃圾收集器可以收集自己的垃圾吗? – user200783

+1

为什么很难理解一种语言可以使用用同一种语言编写的库(和框架)(并由同一编译器编译)?它为什么不*能够像使用该语言的其他任何东西一样执行它自己的垃圾回收? –

回答

3

总之:仔细。

总之:不安全的软件包可以让你做指针算术和任意强制转换,你需要实现go的gc。您可以避免在gc go代码中使用gc,就像您在正常运行代码中一样:使用堆栈或静态分配的数据。下面的链接提到mainline go编译器通过未公开的选项在运行时强制执行此操作。一些汇编位允许你进行系统调用,它可以让你完成从产卵过程到打开文件的所有工作。

待续更多权威人士:查看Ian Lance Taylor (of the go team)'s post on golang-nuts