Go Version 1 Released
New submitter smwny writes "Google's system programming language, Go, has just reached the 1.0 milestone. From the announcement: 'Go 1 is the first release of Go that is available in supported binary distributions. They are available for Linux, FreeBSD, Mac OS X and, we are thrilled to announce, Windows. ... Go 1 introduces changes to the language (such as new types for Unicode characters and errors) and the standard library (such as the new time package and renamings in the strconv package). Also, the package hierarchy has been rearranged to group related items together, such as moving the networking facilities, for instance the rpc package, into subdirectories of net. A complete list of changes is documented in the Go 1 release notes. That document is an essential reference for programmers migrating code from earlier versions of Go. ... A similar process of revision and stabilization has been applied to the App Engine libraries, providing a base for developers to build programs for App Engine that will run for years.'"
The amazing thing is that even before the first stable release is out quite a few organizations are using Go in production to run real systems. Very impressive:
http://go-lang.cat-v.org/organizations-using-go
"When in doubt, use brute force." Ken Thompson
Can someone explain to me what Go's aim is, and why exactly it requires a new programming language? Is it meant a replacement for Java/C++/Python, or does it cater a new branch of programming?
but mandating their terrible indent style is not one of them.
Do you even lift?
These aren't the 'roids you're looking for.
What's the point in that? Go is very expressive. Just write in Go instead of Python.
Yes, because all libraries in the world are already written in Go and everything is better in Go than in any other language in the world. You must only work on trivial problems if you don't need other packages / shoulders of giants.
NB: The message above might reflect my opinion right now, but not necessarily tomorrow or next year.
Do the developers of GO have beards?
try { do() || do_not(); } catch (JediException err) { yoda(err); }
So write in Go and import the C libs.
my other sig is written in brainfuck
So do good ones.
--
The GP referred to Fortran and C as well as python.
Increasingly we're seeing lots of legacy code (C / C++ / Fortran) wrapped in Python. People using Python for simplicity and expressiveness, dropping to C , etc. for the heavy lifting. This is especially true in the sciences (in HPC, for example).
Trying to avoid the language flamewar, there are distinct advantages in a small number of interoperable languages like this.
If I'm to try a new language, I want to avoid having to rewrite the world in it. I might convince my colleagues to use my code if they can interop. from the language they are already using, like C/C++ or Python.
Anyone who believes exponential growth can go on forever in a finite world is either a madman or an economist
How does this language compare with Mozilla's new programming language?
First time I looked at Go, my conclusion was "this language isn't ready". The next time I looked at Go, I concluded that it had essentially bled to death. But the release of version 1 changes things. I will take another look. I hope they've worked out enough of the details for me to be able to tell if this is a language I would love to work with or not.
Please correct me if I got my facts wrong.
I don't think you fully grok what they have achieved. Google employs only a handful of people who work on Go, and probably not all them work full time on it (though maybe that's not true lately in the last release cycle).Let me give you a quote from an accomplished (hint, you use his code every day) C & C++ hacker on using Go:
"In my experience Go is probably 5-10x faster than C or C++. I estimate that programs that take me half an hour to write in Go would take me about 2½ hours in C and 5 hours in C++."
Then when you only have to wait about 10 seconds or so for the whole Go std library *and* all your own libs and binaries to build, you can see it's value over waiting for large C++ projects (of which Google has many) to build.
my other sig is written in brainfuck
I don't see how C is elegant. It's a horrible pain to write a lot of modern code from across many disciplines in C and even C++. Most software that deals with hardware or UIs needs to process asynchronous events and producers/consumers, so you need state machines and yield at the very least. Those are almost universally a royal pain to hack around. Just look at the statechart and msm libraries in boost -- and that's C++, not C! In plain C, look at Miro Samek's QP framework. Both C and C++ gets you to drown in irrelevant syntax for anything but old style procedural code, never mind that those languages artificially hide introspective data -- for example, there's no generic way in C nor C++ to add structural information about instances to enable non-conservative garbage collection. Go is a step in the right direction at least, even if it offers no compile-time computation (I consider that a must in any modern language).
A successful API design takes a mixture of software design and pedagogy.
Last time I checked Googlers were limited to C++, Java, JS, and Python.
If you check now, you'll find out that the list is C++, Java, JS, Python and Go. In future, it may even be just C++, Java, JS and Go, judging from the trend at Google. (Specialties like Sawzall don't count here, I guess.)
Ezekiel 23:20
This is interesting... If you run the Concurrent Pi example program on the Go website.. it prints:
3.1417926135957908
But it should be:
3.1415926535897932
It's wrong starting with the 5th digit...
What kind of language is that inaccurate? And why would they use it as an example program?!
I see language designers are still making the mistake of trying to represent characters as fixed size entities. Go 1 adds a new data type 'rune' intended to represent a UTF-32 codepoint, which is fine as long as it's only used for code points, but then the example code they show is:
:= '' // delta has type rune.
delta
var DELTA rune
DELTA = unicode.ToUpper(delta)
When you design an API that accepts or returns individual characters (as opposed to code units or code points), do not use rune, char, wchar_t, char16_t, char32_t, int, or any other fixed length type to represent a character. Characters are fundamentally variable length.
You should use a string data type because fixed size types can only represent a subset of characters. For example, a single UTF-32 code point cannot represent the Lithuanian characte LATIN SMALL LETTER A WITH OGONEK AND ACUTE. In Unicode this character can only be represented as a sequence of multiple code points (<U+0105> <U+0301> or <U+00E1> <U+0328> or <U+0061> <U+0328> <U+301>). So using strings works whereas using a fixed size type will inevitably fail.
Using strings to represent a character has another advantage beyond the fact that it's the only way that works. It eliminates the client's need to convert between the string type and the type used to hold a code point. Clients can just directly use text in whatever the native encoding is.
Does anyone know if this is an R&D project that could be poking at the idea of a litigation free runtime for Android away from Dalvik?
I'm curious to see how this language evolves and its internal adoption inside of google.
Regardless of the language taking off or not, it's a great to see a new language enter the ecosystem, and no doubt we'll learn things from it that can be brought back into main-stream languages or interesting innovation that could open the doors for new (pray disruptive) development in new areas.
Take a look at type embedding: http://golang.org/doc/effective_go.html#embedding
Go does not provide the typical, type-driven notion of subclassing, but it does have the ability to “borrow” pieces of an implementation by embedding types within a struct or interface.
tomorrow who's gonna fuss
First, Go has an FFI system like every other language. You can directly compile C code into your binary, and make wrappers with "cgo" for C and C++ libraries. Second, you should read this about dynamic linking -- I don't know if it's perfectly accurate but it's definitely interesting: What does dynamic linking and communism have got in common?
tomorrow who's gonna fuss
As it mentions in the code, it's an approximation of pi using concurrency. The number of "goroutine" calls used determines the accuracy. In the code comments, they refer you to http://goo.gl/ZuTZM if you want more information on the algorithm they are using. Increasing the accuracy is just a matter of increasing n in their example.
He is saying that Go is 5-10 times faster to compile than C++, not that the output binary runs faster.
I write both Go and C++ at google. Sadly, Rob Pike's joke has a definite core of truth: writing C++ code at google is extremely time-consuming and difficult to get right because it has to be multi-threaded and asynchronous.
Long compile times is more of a build system problem than a compiler problem, IME. Of course, lots of people have broken build systems, and compile the same things over and over again
Well, our in-house developed build system is the best I've ever seen, and probably the best in the industry. Read more about it here. Even with all the niftyness of a thoroughly correct build system and a data-center sized ccache, it still sucks.
Go is definitely awesome, and I recommend everyone to set aside the gripes with the syntax and learn it. I guarantee you that you'll be pleasantly surprised.
Han-Wen Nienhuys -- LilyPond