"I feel like writing about the Go programming language (or 'Golang') today, so instead today's topic is computer stuff. For the record, the language I've programmed the most in has been Python, so that’s the perspective I'm analyzing it from." Some good and bad things about Go.

This is only possible if you restrict yourself to the base library and Go pure code.

Yet that's exactly what the context of this thread is about. We're not talking about some imaginary examples of Go which break convention; we're talking about Go code written as Go code is designed. And that means using non-OS specific API calls in the base to build extended non-OS specific Go libraries.

Go is designed with portability in mind. C++ wasn't. So while C++ can be portable, it's much easier to write portable code in Go.

This is nothing new, cross-compiling exists since the dawn of computing.

Thank you for telling me what I'd already categorically stated in my post.

My point was Go makes the process much less painful, not that it's the only language to have ever supported cross-compiling.

These days you can do pretty much anything in pretty any language. So the choice of language boils down to productivity (time spent coding, compiling, porting, etc) vs performance (raw execution speed, memory usage, etc) and sometimes even performance is a non-issue. So my point was this: Go enhances productivity. Which is why it's my new go-to language.

"Go is designed with portability in mind. C++ wasn't. So while C++ can be portable, it's much easier to write portable code in Go."

I actually agree with moondevil's point. While the c++ ecosystem is filled with tons of incompatible libraries/frameworks across tons of platforms, the c++ language itself doesn't impose significant portability issues, in fact it's highly portable. I think you ought to be blaming the C++ frameworks for portability issues rather than the C++ language itself.

Now in the end this difference may be mute because we really do need the C++ frameworks in practice, but I think it's important to recognize because without a central authority for coordination of one common framework, all languages have the potential to devolve into the situation C++ finds itself in with incompatible local frameworks. I can see it now: "microsoft foundation classes for Go", haha.

Personal anecdote:
Even the JDK, with the most portable framework I've ever used, wasn't perfect. For a university project we were using java to control serial ports connected to early bluetooth prototypes. The JDK worked perfectly from windows, but we needed to adopt a custom serial port driver for spark workstations (oh delicious irony).

I did a bit of work with OpenBabel for my dissertation (I made a very simple Java app) and was going to release it open source (probably a "do what you f--king want license") with a few bug fixes and a general code clean-up.

The JNI interface was a PITA to link up on Linux and I didn't even attempt it on OpenBSD. The Java interface was generated by SWIG bindings and they were totally different to the Windows versions. It might have been something to do with SWIG but I just gave up there as I was just going to spend maybe an afternoon getting a decent release.

(There was only a few thousand lines of code, and most of it was pretty decent other than some novice mistakes I made at the time).

In the end it bit-rotting in my dropbox. I think I might build a swing front end for it and stick it up on my personal site for anyone who wishes to use it on the OpenBabel google group and if they are inclined they can port it to another OS themselves. I don't really have the time, nor the inclination.

I actually agree with moondevil's point. While the c++ ecosystem is filled with tons of incompatible libraries/frameworks across tons of platforms, the c++ language itself doesn't impose significant portability issues, in fact it's highly portable. I think you ought to be blaming the C++ frameworks for portability issues rather than the C++ language itself.

I appreciate what you're saying, but these days frameworks are as integral part of the language as the language itself. eg what would be the point of C# if it wasn't for .NET? Or Java if it wasn't for JRE? Or even Python if it wasn't for it's modules?

I genuinely do like C++ - I'm not trying to argue that one language is a "better" language than the other. But it is fair to say that because of the core frameworks and because of the Go compiler, Go is an easier language to port.

Now in the end this difference may be mute because we really do need the C++ frameworks in practice, but I think it's important to recognize because without a central authority for coordination of one common framework, all languages have the potential to devolve into the situation C++ finds itself in with incompatible local frameworks. I can see it now: "microsoft foundation classes for Go", haha.

That's a very interesting point. We do see this problem in some other languages as well.

Personal anecdote:
Even the JDK, with the most portable framework I've ever used, wasn't perfect. For a university project we were using java to control serial ports connected to early bluetooth prototypes. The JDK worked perfectly from windows, but we needed to adopt a custom serial port driver for spark workstations (oh delicious irony).

hehehe interesting stuff

I'm not a fan of Java personally (to be frank, it's the language I hate the most). But that boils down to personal more than anything. "each to their own" as they say hehe