I would like to hear more about the technical implementations from the author on how he managed to improve performance. He mentions: "Due to the complex nature of the system this script could take up to three minutes to scan nodes and process the results" but how does Go solve this complex system that Python couldn't? 3 minutes to 1 second is a superb improvement.
The second paragraph reads like: replacing a relational DB with a (in memory?) key value store resulted in more throughput. He implemented it in Go, but he could have implemented it in any other language.
What I want to know is how he convinced management to use Go? Where did he find the programmers? I work in a similar environment and I don't see my firm adopting Go any time soon, although I wished they had as I'm a big fan of Go and believe it has a place especially server side processes (e.g. algo trading, market data feeds) where concurrent connections are prevalent.
> He implemented it in Go, but he could have implemented it in any other language
I assume he used Go's concurrency features, although he could have articulated on that.
> Where did he find the programmers
I don't think you explicitly need to hire new programmers. If you have capable, existing programmers, the learning curve is pretty minimal for something like Go.
On the Python script, it sounds like the performance problems were more likely than not caused by inadequate use of any concurrency features rather than an inherent problem with Python The Language. As exciting as Go is it sounds like replacing the old script with a sufficiently concurrent and well-written application in any language should have worked well.
More details would be really helpful. Also the author seems to be responding to a question of reliability by talking about performance which is not the same thing.
Can anyone explain why exactly a script written in one language would stall, while the same script in another wouldn't? Is there that much inherent instability in Python? Can it be assumed that the scripts in this case aren't comparable?
We moved a huge chunk of our code from Python to Go. We have one simple Go binary that just listens on a certain port and API requests from our Django app are proxied to the Go instance running. No issues, no panics, no memory leaks. It's pretty amazing to see a long running process never growing in memory (well, if you're coming from the Python world at least, I'm sure the JVM is pretty solid at keeping it's place nice & tidy).
Folks - Go ain't a fad, it's a great language if your problem domain benefits from concurrency AND if you need to deploy to multiple locations and love being able to just drop a single binary and walk away.
I'm sorry, but the world does not need another company-controlled, corporate programming language. .Net (Microsoft), Java (Oracle) and now Go (google).
All of these compilers or JIT interpreters are implemented in C or C++ (which are open languages with ISO standards).
It bothers me to no end to see corporations taking control of the fundamental building blocks (programming languages) of technology and then to see technologists and developers go on and on about how wonderful and better these corporate languages are.
With C and C++ and Python and Ruby and Perl we have freedom. With Go, .Net and Java, etc. we do not.
Google already control your search, your browser, your phone, your email and in some cases your OS (Chrome) why would you want them to control you programming language as well? The idea boggles my mind.
I wish others felt as strongly about this as I do. If you want to control your future, then use C or C++ or some other ISO standardized language with lot's of free compilers available, do not use a corporate controlled programming language.
> I'm sorry, but the world does not need another company-controlled, corporate programming language. .Net (Microsoft), Java (Oracle) and now Go (google).
.NET isn't a language and Java and Go are both open (but with the main contributers being employees from the aforementioned corporations).
> All of these compilers or JIT interpreters are implemented in C or C++ (which are open languages with ISO standards).
Layers of abstraction are there for convenience otherwise we'd also shortcut C++, C and even assembly and would be writing everything in machine code.
> Google already control your search, your browser, your phone, your email and in some cases your OS (Chrome) why would you want them to control you programming language as well? The idea boggles my mind.
I actually do get the Google paranoia. It's why I cut down on my dependence on them as well. But Go doesn't up-sell Google's services like Chome (which isn't an OS by the way - you must be thinking of ChromeOS), Android, Gmail and so on. And let's be honest, other popular languages have born out from businesses: C from AT&T, Borland lead the charge with Pascal, Microsoft had their version of BASIC bundled with many of the most popular micro PC's of the 80's. Need I go on?
> There is a reason go compilers are C and C++.
Yes, but it's not the reason you're thinking of. The problem was one of the chicken and the egg. It's all well and good writing Go's compiler in Go, but then how are you going to compile it? A language needs to reach a certain threshold before it becomes possible to write a compiler in it's own language. C had the same problem when it was young too.
> I wish others felt as strongly about this as I do. If you want to control your future, then use C or C++ or some other ISO standardized language with lot's of free compilers available, do not use a corporate controlled programming language.
The reason people don't agree with you is because: a) C++ would be overkill for a web framework (which is one popular application) and b) half your points are based on misinformation.
Go is completely open source. The primary devs just happen to work at Google. That is all.
If anything, the Google name attachment may only serve to help convince management that Go is a safe, long-term bet. If you don't like the Google attachment, you are entirely free to fork the language and make it your own.
>I'm sorry, but the world does not need another company-controlled, corporate programming language. .Net (Microsoft), Java (Oracle) and now Go (google).
The world begs to differ.
For one, Java and the JVM have a huge ecosystem, and nobody's complaining. And .NET is huge on Windows, and nobody's complaining their either. Actually, they rather like it that MS is in charge. [For the conversational english challenged, "nobody" means "a few outliers don't count"].
Oh, and Go is open source with a large community.
>All of these compilers or JIT interpreters are implemented in C or C++ (which are open languages with ISO standards).
Which is beside the point. Almost all compilers and JITs are written in C/C++. So what?
>With C and C++ and Python and Ruby and Perl we have freedom. With Go, .Net and Java, etc. we do not.
With those you have SOME freedoms. With .NET and Java you have OTHER freedoms. E.g I have the freedom to take advantage of a huge collection of libraries, with top-notch commercial support for a lot of them, and use them in around 4-5 top notch languages like Clojure, Scala, JRuby etc, with the most performant JIT in town. All the other options you mention don't give me THAT freedom.
>There is a reason go compilers are C and C++.
Portability, familiarity and low-levelness?
Also, you DO know that C (and IIRC C++) were once created and controlled by a corporation (AT & T) too, right?
I think your point is a little incoherent, since C# is an ISO standard, while Python, Perl and Ruby aren't, nor do they have "lots of free compilers available".
Personally, I don't use Gmail, Android, Chrome or ChromeOS, for real reasons pertaining to data ownership, privacy and maintenance of services, but I see no reason not to use their fully BSD licensed tools that I can run on my own hardware. If Golang 2.0 suddenly prevents you from making HTTP requests to any server outside the Google networks I'll be pretty pissed, but I find that pretty unlikely.
I don't see the big deal. What the heck are you afraid of? Is Google going to put user tracking into the Go spec? Go has two compilers, both of which are open source and open to external contributions.
The irony of your statement is that Go is open source, and C# is an ISO standard. Those were proactive choices by the companies, and they should really be considered the leading stewards of the language- but not the owners.
But for those who choose languages for pragmatic rather than cultural (religious) reasons, Golang is a fairly good egg. Liberally licensed (BSD Style + Patent Grant). Focused on the problems of modern large scale systems.
With modern message passing, great build / deploy tooling, an opinionated structure and formatting standard -- it really makes putting together LARGE system with many moving pieces much easier.
> With C and C++ and Python and Ruby and Perl we have freedom. With Go, .Net and Java, etc. we do not.
Unfortunately, there is an important language design space that is not covered by C, C++, Python, Ruby, and Perl, which is that of statically typed, imperative languages with automatic memory management.
C/C++ give you static typing, but not automatic memory management; Python, Ruby, and Perl give you automatic memory management, but not static typing.
And unfortunately, while there are quite a few languages with these features, only few have the critical mass, long term support, and infrastructure to justify investing in them for serious development.
All of these compilers or JIT interpreters are implemented in C or C++ (which are open languages with ISO standards).
Technically, if I'm not mistaken, Go is (currently!) implemented in Plan 9 C, which is not the same thing as ISO C.
Also, Go is very different from .NET and Java. For starters, it was published in source pretty soon after it had been announced. You have your freedom right there.
Microsoft has an undue amount of influence over both C and C++ thanks to the Windows platform and their questionable lack of full support for the relevant language standards.
Ultimately, what controls a language is who controls the market and who employs most of the people implementing the most popular compilers/interpreters for it.
The only reason C++ lives on is because platform holders have been willing to support it; and those platform holders are large corporations.
I remember some time ago a complaint about Go having some bugs on 32-bit machines (something related to the GC)
So yes, if you have control over your environment it may be a better choice
But the biggest issue with 'less than mainstream' languages are libraries. Things like DB connectors, protocol libraries (SOAP for example - yes, unfortunately this is necessary for some 3rd part services), etc
Heck, even for Python 2 (not to mention P3) this is an issue sometimes
Why, oh why, would anyone be running x86 hardware in this Year of Our Lord Two Thousand and Thirteen? It's been what, 10 fucking years that we've had AMD64 now, you can get free 64-bit systems from the curbside, just toss that goddamn PIII and get with the 21st century. Maybe then people can stop posting "Well, Go on 386 architecture has bugs, so don't use it for anything."
IIRC, Go tries to allocate a contiguous portion of virtual memory. This isn't a problem in 64-bit, because the addressable space is so big, but a 32-bit system that has been running for a while may have enough memory fragmentation that you can't allocate a large enough block.
I have to agree about libraries. You don't realize how great it is to have finely-tuned JDBC drivers for every database on Earth until you can't use them.
Every compiler has bugs. All of them, even ICC, xlC, and other heavyweight ones. The fact that Go has a bug in the GC on a 32-bit machine is hardly surprising.
If I had been at that conference, I would have asked the same question.
Thanks for the data point (Yes, fine for production AFAYCT).
What does Go do when it segfaults ? Simply saying it has not-yet-segfaulted is but one factor of production-readiness.
Does Go leave just a coredump ?
One thing I like about java in a production sense is that if the JVM exits unexpectedly it writes an hs_err_pid file that has a dump of what the threads are doing at the point of failure.
Go doesn't segfault. If a Go program panics it prints stack traces of all goroutines (including the information which goroutine caused the panic) and then exits.
Go programs don't segfault because Go is a memory safe language (unless you use unsafe). They can segfault in the runtime, but that never happened to me. Nevertheless, what happens when you segfault is a property of the system, not of the language implementation. It will happen whatever happens to C programs that segfault.
Go programs can panic but that doesn't produce a core dump, only a stacktrace.
Somewhat off-topic but are there any data on the penetration of Go outside Google, a few other companies [1] and weekend hack projects on Github? Thanks to its unfortunate name, even searching for Go developer positions is challenging [2].
first I saw go I thought meh but with so many people saying good things about it makes go inevitably more interesting day after day. however I just feel like it's going to be like mongo. when it first got popular, people all moved to mongo as it miraculously solving all the problems. same thing happening with go now and after sudden disappear of all the mongo evangelists, this makes me doubtful about go obviously.
IMO, people like hype, and a lot of the time, they are not aware of what better alternatives exist. If Go did not have Google or Ken or Pike as names behind it, do you think it would have gone anywhere? It doesn't really offer anything special compared to more expressive and safer languages like Scala and Rust for instance.
You can see it right here in the comments: someone said that Go is a memory safe language. It is not any more safer than Java is in that regard. We need languages that are safer than Java and Go.
Nothing, it's not a service. The code is already out there along with the documentation and language spec. The worst they can do is:
1. Cancel their future contributions.
2. Create a closed source fork (is this feasible with the license if they don't control what others have contributed?)
In the worst case, if there aren't enough go enthusiasts it goes the way of other niche languages. Since the supporters seem to be active enough, I doubt that'll happen.
[+] [-] kenkam|13 years ago|reply
The second paragraph reads like: replacing a relational DB with a (in memory?) key value store resulted in more throughput. He implemented it in Go, but he could have implemented it in any other language.
What I want to know is how he convinced management to use Go? Where did he find the programmers? I work in a similar environment and I don't see my firm adopting Go any time soon, although I wished they had as I'm a big fan of Go and believe it has a place especially server side processes (e.g. algo trading, market data feeds) where concurrent connections are prevalent.
[+] [-] elithrar|13 years ago|reply
I assume he used Go's concurrency features, although he could have articulated on that.
> Where did he find the programmers
I don't think you explicitly need to hire new programmers. If you have capable, existing programmers, the learning curve is pretty minimal for something like Go.
[+] [-] brown9-2|13 years ago|reply
More details would be really helpful. Also the author seems to be responding to a question of reliability by talking about performance which is not the same thing.
[+] [-] codonaut|13 years ago|reply
[+] [-] unknown|13 years ago|reply
[deleted]
[+] [-] unknown|13 years ago|reply
[deleted]
[+] [-] waterside81|13 years ago|reply
Folks - Go ain't a fad, it's a great language if your problem domain benefits from concurrency AND if you need to deploy to multiple locations and love being able to just drop a single binary and walk away.
[+] [-] kamaal|13 years ago|reply
[+] [-] 16s|13 years ago|reply
All of these compilers or JIT interpreters are implemented in C or C++ (which are open languages with ISO standards).
It bothers me to no end to see corporations taking control of the fundamental building blocks (programming languages) of technology and then to see technologists and developers go on and on about how wonderful and better these corporate languages are.
With C and C++ and Python and Ruby and Perl we have freedom. With Go, .Net and Java, etc. we do not.
Google already control your search, your browser, your phone, your email and in some cases your OS (Chrome) why would you want them to control you programming language as well? The idea boggles my mind.
I wish others felt as strongly about this as I do. If you want to control your future, then use C or C++ or some other ISO standardized language with lot's of free compilers available, do not use a corporate controlled programming language.
There is a reason go compilers are C and C++.
[+] [-] laumars|13 years ago|reply
.NET isn't a language and Java and Go are both open (but with the main contributers being employees from the aforementioned corporations).
> All of these compilers or JIT interpreters are implemented in C or C++ (which are open languages with ISO standards).
Layers of abstraction are there for convenience otherwise we'd also shortcut C++, C and even assembly and would be writing everything in machine code.
> Google already control your search, your browser, your phone, your email and in some cases your OS (Chrome) why would you want them to control you programming language as well? The idea boggles my mind.
I actually do get the Google paranoia. It's why I cut down on my dependence on them as well. But Go doesn't up-sell Google's services like Chome (which isn't an OS by the way - you must be thinking of ChromeOS), Android, Gmail and so on. And let's be honest, other popular languages have born out from businesses: C from AT&T, Borland lead the charge with Pascal, Microsoft had their version of BASIC bundled with many of the most popular micro PC's of the 80's. Need I go on?
> There is a reason go compilers are C and C++.
Yes, but it's not the reason you're thinking of. The problem was one of the chicken and the egg. It's all well and good writing Go's compiler in Go, but then how are you going to compile it? A language needs to reach a certain threshold before it becomes possible to write a compiler in it's own language. C had the same problem when it was young too.
> I wish others felt as strongly about this as I do. If you want to control your future, then use C or C++ or some other ISO standardized language with lot's of free compilers available, do not use a corporate controlled programming language.
The reason people don't agree with you is because: a) C++ would be overkill for a web framework (which is one popular application) and b) half your points are based on misinformation.
[+] [-] exch|13 years ago|reply
If anything, the Google name attachment may only serve to help convince management that Go is a safe, long-term bet. If you don't like the Google attachment, you are entirely free to fork the language and make it your own.
[+] [-] coldtea|13 years ago|reply
The world begs to differ.
For one, Java and the JVM have a huge ecosystem, and nobody's complaining. And .NET is huge on Windows, and nobody's complaining their either. Actually, they rather like it that MS is in charge. [For the conversational english challenged, "nobody" means "a few outliers don't count"].
Oh, and Go is open source with a large community.
>All of these compilers or JIT interpreters are implemented in C or C++ (which are open languages with ISO standards).
Which is beside the point. Almost all compilers and JITs are written in C/C++. So what?
>With C and C++ and Python and Ruby and Perl we have freedom. With Go, .Net and Java, etc. we do not.
With those you have SOME freedoms. With .NET and Java you have OTHER freedoms. E.g I have the freedom to take advantage of a huge collection of libraries, with top-notch commercial support for a lot of them, and use them in around 4-5 top notch languages like Clojure, Scala, JRuby etc, with the most performant JIT in town. All the other options you mention don't give me THAT freedom.
>There is a reason go compilers are C and C++.
Portability, familiarity and low-levelness?
Also, you DO know that C (and IIRC C++) were once created and controlled by a corporation (AT & T) too, right?
[+] [-] tptacek|13 years ago|reply
[+] [-] icebraining|13 years ago|reply
Personally, I don't use Gmail, Android, Chrome or ChromeOS, for real reasons pertaining to data ownership, privacy and maintenance of services, but I see no reason not to use their fully BSD licensed tools that I can run on my own hardware. If Golang 2.0 suddenly prevents you from making HTTP requests to any server outside the Google networks I'll be pretty pissed, but I find that pretty unlikely.
[+] [-] ma2rten|13 years ago|reply
[+] [-] untog|13 years ago|reply
[+] [-] scott_s|13 years ago|reply
Both of which originated in AT&T Bell Labs.
[+] [-] tezza|13 years ago|reply
You'll find the $EVIL_COMPANY quite well represented there too.
[+] [-] MetaCosm|13 years ago|reply
With modern message passing, great build / deploy tooling, an opinionated structure and formatting standard -- it really makes putting together LARGE system with many moving pieces much easier.
[+] [-] pjmlp|13 years ago|reply
[+] [-] jackielii|13 years ago|reply
[+] [-] rbehrends|13 years ago|reply
Unfortunately, there is an important language design space that is not covered by C, C++, Python, Ruby, and Perl, which is that of statically typed, imperative languages with automatic memory management.
C/C++ give you static typing, but not automatic memory management; Python, Ruby, and Perl give you automatic memory management, but not static typing.
And unfortunately, while there are quite a few languages with these features, only few have the critical mass, long term support, and infrastructure to justify investing in them for serious development.
[+] [-] gngeal|13 years ago|reply
Technically, if I'm not mistaken, Go is (currently!) implemented in Plan 9 C, which is not the same thing as ISO C.
Also, Go is very different from .NET and Java. For starters, it was published in source pretty soon after it had been announced. You have your freedom right there.
[+] [-] binarycrusader|13 years ago|reply
Microsoft has an undue amount of influence over both C and C++ thanks to the Windows platform and their questionable lack of full support for the relevant language standards.
Ultimately, what controls a language is who controls the market and who employs most of the people implementing the most popular compilers/interpreters for it.
The only reason C++ lives on is because platform holders have been willing to support it; and those platform holders are large corporations.
[+] [-] raverbashing|13 years ago|reply
So yes, if you have control over your environment it may be a better choice
But the biggest issue with 'less than mainstream' languages are libraries. Things like DB connectors, protocol libraries (SOAP for example - yes, unfortunately this is necessary for some 3rd part services), etc
Heck, even for Python 2 (not to mention P3) this is an issue sometimes
[+] [-] Titanous|13 years ago|reply
[+] [-] jff|13 years ago|reply
[+] [-] rubinelli|13 years ago|reply
I have to agree about libraries. You don't realize how great it is to have finely-tuned JDBC drivers for every database on Earth until you can't use them.
[+] [-] CountHackulus|13 years ago|reply
[+] [-] tezza|13 years ago|reply
Thanks for the data point (Yes, fine for production AFAYCT).
What does Go do when it segfaults ? Simply saying it has not-yet-segfaulted is but one factor of production-readiness.
Does Go leave just a coredump ?
One thing I like about java in a production sense is that if the JVM exits unexpectedly it writes an hs_err_pid file that has a dump of what the threads are doing at the point of failure.
[+] [-] _ak|13 years ago|reply
[+] [-] 4ad|13 years ago|reply
Go programs can panic but that doesn't produce a core dump, only a stacktrace.
[+] [-] reinhardt|13 years ago|reply
[1] http://go-lang.cat-v.org/organizations-using-go
[2] http://www.indeed.com/jobs?q=go+developer
[+] [-] BarkMore|13 years ago|reply
[+] [-] shocks|13 years ago|reply
[+] [-] sergiotapia|13 years ago|reply
What does he mean? I've searched the Go websites but it seems all Google gives you is the Go compiler and a tour.
[+] [-] mseepgood|13 years ago|reply
[+] [-] exch|13 years ago|reply
http://golang.org/cmd/go/
[+] [-] ralph|13 years ago|reply
[+] [-] r4um|13 years ago|reply
[+] [-] koraytaylan|13 years ago|reply
[+] [-] azth|13 years ago|reply
You can see it right here in the comments: someone said that Go is a memory safe language. It is not any more safer than Java is in that regard. We need languages that are safer than Java and Go.
[+] [-] moshberm|13 years ago|reply
[+] [-] Jtsummers|13 years ago|reply
1. Cancel their future contributions.
2. Create a closed source fork (is this feasible with the license if they don't control what others have contributed?)
In the worst case, if there aren't enough go enthusiasts it goes the way of other niche languages. Since the supporters seem to be active enough, I doubt that'll happen.