Hi all,As of commit d06327c741c08a1cd3ab50c7f62b8964b01fefc9 the libgo branch of llgo is self hosting. What that means is that it can build itself and all the Go code that it depends on, including the standard library, and the resulting binary can also build itself and all its dependencies to produce an identical binary which passes all the same standard library tests as a gc-built binary. This is a pretty significant milestone for any compiler and to my knowledge llgo is the first Go compiler to accomplish this milestone.
Thanks are in order to Andrew and the other llgo contributors, but this couldn't have been possible without the excellent go.tools libraries mostly developed by Robert Griesemer and Alan Donovan, and the libgo standard library mostly maintained by Ian Lance Taylor which of course is based on the community maintained Go standard library.
--Peter
You received this message because you are subscribed to the Google Groups "llgo-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to llgo-dev+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
As of commit d06327c741c08a1cd3ab50c7f62b8964b01fefc9 the libgo branch of llgo is self hosting. What that means is that it can build itself and all the Go code that it depends on, including the standard library, and the resulting binary can also build itself and all its dependencies to produce an identical binary which passes all the same standard library tests as a gc-built binary. This is a pretty significant milestone for any compiler and to my knowledge llgo is the first Go compiler to accomplish this milestone.Thanks are in order to Andrew and the other llgo contributors, but this couldn't have been possible without the excellent go.tools libraries mostly developed by Robert Griesemer and Alan Donovan, and the libgo standard library mostly maintained by Ian Lance Taylor which of course is based on the community maintained Go standard library.
--
--
Congratulations on self hosting! That's a major milestone.What's the problem with OS X? I might look into it.
Congratulations on self hosting! That's a major milestone.What's the problem with OS X? I might look into it.
Cheers,Andrew
Hi all,As of commit d06327c741c08a1cd3ab50c7f62b8964b01fefc9 the libgo branch of llgo is self hosting. What that means is that it can build itself and all the Go code that it depends on, including the standard library, and the resulting binary can also build itself and all its dependencies to produce an identical binary which passes all the same standard library tests as a gc-built binary. This is a pretty significant milestone for any compiler and to my knowledge llgo is the first Go compiler to accomplish this milestone.
On Tuesday, May 6, 2014 6:33:06 AM UTC+2, Peter Collingbourne wrote:Hi all,As of commit d06327c741c08a1cd3ab50c7f62b8964b01fefc9 the libgo branch of llgo is self hosting. What that means is that it can build itself and all the Go code that it depends on, including the standard library, and the resulting binary can also build itself and all its dependencies to produce an identical binary which passes all the same standard library tests as a gc-built binary. This is a pretty significant milestone for any compiler and to my knowledge llgo is the first Go compiler to accomplish this milestone.I agree that self hosting is an important milestone. On the other hand it isn't as important as in the distant past where existed no compilers and no high level languages. Nowadays there is an abundance of choices one can make when choosing an implementation language for a new compiler.
In relation to this topic, the Tulgo compiler takes a very different approach compared to llgo: the Tulgo compiler itself is implemented in a mature programming language (Java) which has tools around it (most importantly: IDE, profiler, debugger). The compiler runs in the cloud and the end-user interacts with it through a lean command-line front-end implemented in Go (https://github.com/tul-project/tul). This potentially enables for the compiler implementation to internally switch the implementation language without the user noticing anything (not that I plan to do so). Also, the front-end has a much lower update frequency compared to the compiler itself. The networked architecture enables all users to immediately benefit from updates to the compiler without the need to recompile the front-end. Note: Tulgo is a work in progress and can currently compile the raytrace-simple.go benchmark only.
On Sun, May 18, 2014 at 4:35 PM, Atom Symbol <0xe2.0x...@gmail.com> wrote:
On Tuesday, May 6, 2014 6:33:06 AM UTC+2, Peter Collingbourne wrote:Hi all,As of commit d06327c741c08a1cd3ab50c7f62b8964b01fefc9 the libgo branch of llgo is self hosting. What that means is that it can build itself and all the Go code that it depends on, including the standard library, and the resulting binary can also build itself and all its dependencies to produce an identical binary which passes all the same standard library tests as a gc-built binary. This is a pretty significant milestone for any compiler and to my knowledge llgo is the first Go compiler to accomplish this milestone.I agree that self hosting is an important milestone. On the other hand it isn't as important as in the distant past where existed no compilers and no high level languages. Nowadays there is an abundance of choices one can make when choosing an implementation language for a new compiler.Certainly you don't need to write the compiler in its target language, as gccgo has also shown. Still, there are benefits that are timeless: improvements to the compiler output improve the compiler itself (increasing motivation to improve the compiler);
and most important to me, it provides a very valuable proof of consistency (Peter's bootstrapping script performs a binary comparison of the executables built at stages two and three).In relation to this topic, the Tulgo compiler takes a very different approach compared to llgo: the Tulgo compiler itself is implemented in a mature programming language (Java) which has tools around it (most importantly: IDE, profiler, debugger). The compiler runs in the cloud and the end-user interacts with it through a lean command-line front-end implemented in Go (https://github.com/tul-project/tul). This potentially enables for the compiler implementation to internally switch the implementation language without the user noticing anything (not that I plan to do so). Also, the front-end has a much lower update frequency compared to the compiler itself. The networked architecture enables all users to immediately benefit from updates to the compiler without the need to recompile the front-end. Note: Tulgo is a work in progress and can currently compile the raytrace-simple.go benchmark only.It's an interesting approach, and certainly with merit; there are pros and cons here too, though. First, users are at the mercy of the network; second, you must establish yourself as a trusted party. I think the latter is a much more difficult issue when dealing with proprietary software. OTOH, in addition to the benefits you've noted, you may be able to do some more interesting optimisations given a large enough corpus of code.
Seems llgo is not producing very efficient code for raytrace-simple.go at the moment. I haven't had any time for llgo lately, but I'll look into this at some point...