What's this about "you can't hand out precompiled library code and use the go build tools"...you really can't have binary libraries in Go and use the standard tools? That seems a bit strange for a native-compiled language.
You could compile the .a files for the different architectures, and let them link against that, instead of recompiling and linking from your source--but the 'go' tool won't currently accept it if there's no source. That could change, and there is a workaround (IIRC): Make an empty folder in the src/import/path.
Hi, Jabbles - alas, scroll down a bit in that problem report and you'll see a later commit by Russ that removed the support:
"I removed support for this shortly before Go 1, because it was causing worse problems. My intention is to allow this usage in Go 1.1, but only if there is no src directory
in the GOPATH tree in question. That is, if you create a directory listed in GOPATH that has _no source at all_, then it will be treated as binary-only."
My guess is that part of this was my fault, not Go's. We had some issues with Go being installed in different locations on the CS department machines than on the campus-wide compute infrastructure machines. Within the projects, we also had a somewhat convoluted directory structure in which to mix official code (e.g., interface definitions) that the students weren't supposed to modify and stub code that they were supposed to change. I hope to simplify it a bit for next year. So I'd take this with a little grain of salt: I expect many fewer compilation problems next year just by having had go1 installed for a year and it becoming stable in our environment.
If they are talking about installation/building on personal machines, not university machines (dgacmu's explanation seems fairly plausible there), they may be calling those things difficult when comparing them to using an installation wizard to install some IDE and clicking on menus to build.
My assessment of hassle between the two would be the opposite, but I suspect it varies greatly.
Kesden is letting us use any language in 440 this semester, Go included. All of the handouts are still in Java, but we were told multiple times to use whatever we want. The only catch is if we want any help on the projects from him or the TAs then we have to choose from four: Go, C, C++, or Java. (I actually think I might do project 2 in Rust, FTW).
Yeah, I heard about that. Thing is, I talked to him last sem and he wasn't sure that Go would be allowed at that point, so I decided to wait a sem. Have you heard anything from the people doing it in Go this time? Its awesome to have the opportunity to use it, but I think it would throw people off for a the first 1-2 weeks while they were getting used to it which might put them at a disadvantage relative to the class. Andersen said something similar too - http://da-data.blogspot.com/2013/02/teaching-distributed-sys...
I've heard good things so far. I know a couple groups using it and their impressions pretty much echo what you said. They felt a bit behind during project 1 while they tried to learn the new language, but are starting to feel more comfortable with it now (we're a week into project 2 currently).
I think students always complain the first couple times they are forced to learn new languages, but this is an important skill for them to master.
There were several student complaints about the lack of an IDE or debugger. These tools do exist: I use LiteIDE, with syntax highlighting, code autocomplete and built in Go debugging everyday. Perhaps the professor was not aware of LiteIDE, but his students could have used Google.
I used Go for the Distributed Systems course at UIUC. Assignments can be written in any language, but programming help is only provided for Java/C/C++. 4/~80 people used Go.
It was very enjoyable. The networking package abstracts some of the cruft of the underlying C libraries, and with the RPC package I didn't have to worry about serialization and dispatching.
15-440 with Andersen and Bryant was one of my favorite classes I took at CMU. I took it the first time it was taught in Go. I fell in love with Go and still miss it. I didn't find the language that difficult to learn. As he noted, not having to write your own data marshalling code and RPC let me focus more on the core algorithms.
19 comments
[ 3.5 ms ] story [ 52.0 ms ] threadhttps://groups.google.com/forum/?fromgroups=#!searchin/golan...
"I removed support for this shortly before Go 1, because it was causing worse problems. My intention is to allow this usage in Go 1.1, but only if there is no src directory in the GOPATH tree in question. That is, if you create a directory listed in GOPATH that has _no source at all_, then it will be treated as binary-only."
> Also setting up a Go environment on a new machine is a nightmare.
How so? There are binaries for all major platforms: http://golang.org/doc/install
All you have to do is extract the archive and adjust the PATH.
> Compilation in general is a huge, unintuitive mess.
Compiling a Go project is dead simple: it's just "go build". How is this a mess?
My assessment of hassle between the two would be the opposite, but I suspect it varies greatly.
The Windows MSI package and the OS X .dmg have wizards.
There were several student complaints about the lack of an IDE or debugger. These tools do exist: I use LiteIDE, with syntax highlighting, code autocomplete and built in Go debugging everyday. Perhaps the professor was not aware of LiteIDE, but his students could have used Google.
http://code.google.com/p/liteide/
https://github.com/visualfc/liteide
Go also has great built-in profiling support: http://blog.golang.org/2011/06/profiling-go-programs.html
Installing Go is easy, you can download it as an archive or use your package manager:
http://code.google.com/p/go/downloads/list
Also even installing Go from source is easy: I think the hardest part is the environment variables, but these are well documented.http://mac.softpedia.com/progScreenshots/LiteIDE-X-Screensho...
It was very enjoyable. The networking package abstracts some of the cruft of the underlying C libraries, and with the RPC package I didn't have to worry about serialization and dispatching.