An update on the Internet overlord's new programming language: Google Go
At its heart, Go is a multi-threading, concurrent multi-processor programming language. That might not mean a lot to some of you, but it should. For the longest time, the largest breakdown between real life and computers -- the killer paradigm shift -- is how data is processed. We humans process data in parallel, while computers are classically linear or procedural in their execution: step one, step two, step three. But suddenly we have the power of parallelism and the ability to concurrently process wildly varied data -- just like humans!
It's all happened very quickly, with Intel and AMD finally bringing multiple processor cores to the mainstream consumer a few years back, but it IS here -- and it's time to face facts: the current arsenal of tools available to a developer just don't cut it when it comes to concurrency.
Most of the programming languages we use today are at least 10 years old, with some being much older. There's a grand total of zero popular programming languages that have concurrency as a primary feature. There have been revisions to old favourites to bring them up to date, but to really make the most of new technology we need a new language.
Fortunately it's already here in the form of Go, and it's being developed by a team at Google.
Since we first covered it four months ago, a lot of development has transpired! It's not ready for mission-critical stuff yet, but in an email to the Good Gear Guide, Rob Pike (one of the Go project leads) said it was more than ready for "simple Web servers, text processing and other such things". What I'm trying to say is that, if you're a developer, you should go and get stuck in right now.
Be part of the next big thing in Developer Land!













Comments
24
Subscribe to commentsMark KMar 3rd 2010 10:26AM
Are you kidding me? Please tell me Sebastian Anthony are you a developer? Do you have any clue what you're talking about. Yes!!! All developers drop your current developing language and run to Go, an unproven, untested language. The reason developers stick to languages that might be 10+ years old is because they're tested and work. Also many languages now day have no problem at all with multi-threading applications... Ask a developer or two questions before you post and not someone who might "know programming" but someone who actually does it for a living. All this article sounds like is a big Google plug.
Sebastian AnthonyMar 3rd 2010 10:28AM
You did read through to the end where I said it wasn't ready for prime time, right?
And that I only mentioned Google once -- and that Google isn't even mentioned on the Go homepage...?
There has seemingly been a lot of developer/community interest in Go. If you don't want to give it a go, that's fine, but don't get all old, weird and beardy. LET GO OF THE FORTRAN MAN.
Mark KMar 3rd 2010 10:37AM
Did you have to "google" most useless language to come up with Fortran? I did notice you saying it wasn't ready for critical apps yet but I did notice the fact that you basically say that not programming language can multi-task well. WRONG. Many can and do....
Sebastian AnthonyMar 3rd 2010 10:40AM
Believe it or not, I've coded in Fortran, Lisp, COBOL -- all sorts of odd and esoteric languages.
There are some languages that have been built with concurrency and multithreading in mind, but none of the major languages handle it particularly gracefully -- or are you really going to say that Java threads are graceful?
Not to mention the other goodies in Go...! (If you haven't read the site, go read it!)
EsenteMar 5th 2010 6:32PM
Erlang, Scala, Kilim?
Go is not easy for newcomer, at least from last time I took a look at it. For regular programmers, they would stick to the tested and well-developed languages. Since concurrency concept in programming is kind of new recently, the languages that truly support it are not popular, but they're getting attention. And the popular languages are catching up.
Go may be developed by Google, but it's not something we should "go and get stuck in right now."
And I feel really offended with the sentence "There's a grand total of zero popular programming languages that have concurrency as a primary feature." You have to define "popular" and "grand total of zero" there.
Sebastian AnthonyMar 5th 2010 8:18AM
I admit, it's very similar to Erlang with C-like syntax... but people don't really use Erlang or Scala, do they?
To build systems I mean. Scalable systems.
I could be wrong of course -- it's been years since I was in DEEP :)
PrestonMar 3rd 2010 10:52AM
This whole article feels like it should have one of those "the views expressed do not necessarily represent those of Download Squad" warning labels.
Sebastian AnthonyMar 3rd 2010 11:44AM
Well, like, this is a blog, not a corporation. It's kind of implied that our opinions are our own -- it's not like Download Squad is some kind of nebulous... thing. Download Squad _is_ its bloggers.
PrestonMar 3rd 2010 11:51AM
You sure are awfully defensive about this post.
Sebastian AnthonyMar 3rd 2010 11:57AM
Sorry, hang on, let me look up the correct, customer-is-always-right response...
"Yes, you are right, this should have a disclaimer on it. The writer has been taken out the back and shot. Sorry again."
PrestonMar 3rd 2010 11:58AM
Wow dude, no reason to be an ass.
Sebastian AnthonyMar 3rd 2010 12:18PM
OK, well, let's start over then -- clean start and all that. Why do you feel this needs a disclaimer?
EdexMar 3rd 2010 11:41AM
I agree with Mark K, but he is a bit too offensive/defensive... "at least 10 years old", "grand total of zero" really doesn't go well, you are right on both of those, but you are kinda missing the point as he pointed out.
You are a good blogger, though. Better than Lee! :) Maybe a bit sensationalist at times (for example the whole China vs. Google thing).
Sebastian AnthonyMar 3rd 2010 11:45AM
Thanks! I think!
It's a little sensational, but I like to think that I might have encouraged non-programmers to actually give a damn. This isn't a developer-centric blog, so I try to leverage an end-user slant.
Matt BMar 3rd 2010 12:21PM
Poor Sebastian. I liked this post.
Sebastian AnthonyMar 3rd 2010 12:24PM
Don't worry about me, SAVE YOURSELF!
David RonMar 3rd 2010 12:53PM
Nearly every programming language on earth has constructs for threading. The major drawback is that they generally communicate through shared memory which causes locking issues (one thread writing to an area in memory causes the other to wait to do a read), and worse, deadlock (one thread is writing to memoryA and is locked waiting to read memoryB and another thread is writing to memoryB and locked waiting to read memoryA).
The general solution to deadlock is message-passing, a problem solved well through new languages such as SCALA's "Actors" (Scala compiles to Java .class and .jar files for use with Java applications or standalone). I'm not sure how Google Go solves the shared-memory issue, but there isn't anything wrong with concurrent programming even in older languages like c/c++/Java/Python, all containing thread support and similar modern messaging libraries. For instance, recent releases of Java have contained upgraded threading support.
How else are you able to hear the gun shots over the sound of the music while you see movement on the screen while multi-player chat is going on while the mouse is able to move the character on the screen in your favorite game? That's right: multithreading!
Sebastian AnthonyMar 3rd 2010 7:27PM
I think we're agreeing here, but I'm not sure...
The only example I can give, with my games background, is the PlayStation 2. It supported HUGE parallelism, but until much later in its development cycle no one really knew how to code it -- the tools weren't available. People had to hand-code parallel routines to make the prettiest and best games.
Parallel/threaded coding could be a lot easier than it is today with Java/C++/etc. Bring on the Go!
davidronMar 5th 2010 5:22PM
You are correct that massive parallelism is hard with simple threading models, but modern message passing is the best current solution. It's the solution Go implements, and it's exactly the same as as any other language with support for concurrent message passing, including Java/C++ with new library support.
People seem to forget that old languages can Evolve. Let's take Java as an example. In 2004, Java 5 came out with advanced threading support which has allowed Java to be one of the best languages to implement enterprise servers. Java has support for Messaging platforms such as JMS as third-party add-ons that allow for massively parallel software. Java 7 is coming out next year with support for closures that will enable an even more terse syntax for concurrent message passing, and Scala is out today for Java to allow the same. And, Java 7 will have additional support for concurrent programming:
http://www.ibm.com/developerworks/java/library/j-jtp03048.html?ca
Other languages such as C# and C++ have evolved similarly. New (and old) dynamic functional languages such are F#, Scala, Clojure, Ruby, erlang, have had built in santax designed for no-shared-memory concurrency for quite a while.
Programming languages should be about syntax, but this over-hyped feature is not anything new, and has little directly to do with the language syntax.
JordanMar 8th 2010 9:59AM
I'll say straight up I'm not a programmer. I know basic C, but other than that nothing. As a user, I do know that Java needs to die a painful death.