This could be very good! "Google software luminaries such as Unix co-creator Ken Thompson believe that they can help boost both computing power and programmers' abilities with an experimental programming language project called Go. And on Tuesday, they're taking the veil of secrecy off Go, releasing what they've built so far and inviting others to join the newly open-source project." - Paul Buchheit
What do you think, Paul? I know it's early, but Python latched on at Google... Think this is a response? And just on a lark, do you think Go may be headed for the browser at some point? Many of us have wondered if Chrome will take a stab at reinventing/reworking the web stack. Go feels more like a back-end tool, but wondering what came to your mind when you saw this... - Christopher Galtenberg
My first reaction was oh yay, another C like language with brackets to make it acceptable. Having Rob Pike and Thompson on the team is impressive but makes me think of a plan9 resurrection. Using CSPs though is pretty cool and it looks like it supports mobile tasks. - todd
"Specifically, Go uses a technology dating back to the 1960s called CSP, or communicating sequential processes, that handles interactions among a set of cooperating programs, Pike said. The technology made an appearance in programming languages such as Occom and Erlang, but it generally hasn't been applied in systems programming." - Paul Buchheit
If Google uses this for internal projects, that will give it a big advantage over something like plan9 in terms of being practical (not to mention the fact that it's free software, which plan9 was not, and a programming language, not an OS). - Paul Buchheit
I am very excited about this, it's not genius or rocket science but it maybe the language to put alongisde C/C++ for real. I thought it was going to be D, maybe this is it - Lawrence Oluyede
Please ; at the end of lines... (I hate languages without ; for some psychological reasons) - Ozgur Demir
I am no fan of language features designed to ease parsing but i suppose that's important for a system language? But it's hardly a user (i.e. programmer)-centric design. I think they should have drawn more from Scala (for concurrency model) and Io (for a beautiful syntax) instead of the messy, old languages they chose. Luckily, it's not designed for my needs so i'll never have to worry about it. - nicerobot
@ozgurdemir I agree. Either require them or don't. Don't make them optional in some cases. It confuses what programmers generally expect of a programming language: consistency. - nicerobot
Just checked and hated it. Sorry guys, it's not about the rest of the language.. it's just the ;'s. - Ozgur Demir
while checking it, I noticed how much I love C / Java syntax and how lame to trying to change it just for to make a new product different. - Ozgur Demir
@Paul you should know better than to confuse a language with its implementation! The people working on this all hail from the C/Java lineage and I don't know...may be fast but generally C is a hassle and Java is too dumbed-down. Trying to fix the mistakes they made in the past. Wonderful... - Rudolf Olah
For god's sake, who cares what the syntax looks like? What matters is whether it solves useful problems or not. It's designed to clean up a lot of the problems stemming from the legacy of C[++], compile fast, execute fast, be appropriate for systems programming, and have good primitives for concurrency. Those are good goals in my book, and they fill a much-needed niche. - Joel Webber
I thought it was kinda weird the way the video highlighted how fast it compiles. Compilation speed is great, and the vid was impressive, but I've never seen a language launch where that was highlighted so much. "Look, it compiles fast!!!!!! Oh, BTW, we are trying to solve concurrency". - Nick Lothian
@Ozgur: Sure, but as long as the syntax isn't broken in some way, or ambiguous (VB6 comes to mind), it's surely much less important than what the language is capable of (compile speed, execution speed, what can be expressed, etc). Syntax seems like a distant third- or fourth-most important aspect to me. - Joel Webber
@Nick: That kind of struck me as well when they first started talking about it. But when you consider that your main alternative is C++, and that compile times can get absolutely brutal (try compileing WebKit sometime -- it takes hours), it makes a bit more sense. - Joel Webber
@Joel. yea, I can't say you're wrong and I am right.. these are all preferences.. for me, syntax is an important aspect in terms of code readability that's why I care since it becomes a real pain in the ass on a midsize or bigger project. - Ozgur Demir
This thread is degenerating into rubbish. You know who you are - please stop. - Christopher Galtenberg
@Joel yeah, I guess. But compiling something like that should take hours! Back when men were men and compiling a kernel on my 386 was a major undertaking success was so much more satisfying! Who are these young'uns Thompson & Pike and what do they know anyway! - Nick Lothian
Compilation speeds mean a lot when you're dealing with the google programming model. This is a company that invented code search for internal use. (See as an example: http://www.freepatentsonline.com/7613693.html) - Piaw Na
@Piaw - nice example. I only skipped through it, but I can't see why something like that makes compilation speed critical. It seems similar in concept to static analysis - more speed is good, but the lack of speed doesn't break the model. - Nick Lothian
@nlothian: static analysis and compilation both include parsing. efficient parsing of C++ is rather hard to achieve, due to messy nature of multiply included files and macro substitutions. if code analysis takes hours (ok, half-hours), it ceases to be useful. - 9000
Lack of speed totally breaks the model. When you can get your analysis and search tools to respond in sub 500ms, the model for coding completely changes. You no longer remember where files are --- you just search for them and expect the search tool to remember for you. This enables massive code sharing, and allows small teams to be extremely effective, since they can now leverage other teams' work. - Piaw Na
Use an IDE for iterative development of the components you are working on, make modules independent through interfaces, do a nightly build so the bulk of build products like libraries etc are available, then these compile issues go away. Justifying based on compile times is so 1990s. - todd
Ah, but how exactly does your IDE allow you to do iterative development quickly? You have to be able to compile individual modules (whatever form they take) quickly enough to make this feasible. If you take C[++] as the de facto systems language, it fails badly on this front, because the only way to share interfaces among modules is via the preprocessor, and precompiled headers only get you so far. Java has similar properties to Go in this sense -- compiling an individual .java file (in the presence of existing .class files for other modules) is extremely fast -- which is what enables fast iterative development in an IDE. - Joel Webber
C++ allows for abstract bases classes. No implementation. Compose systems this way and you minimize recompilation. And I'm assuming the initial subsystems are developed in a mocked unit tested environment and then in within a very narrow scope, so interface changes are minimized until the system test phase is reached. The compilation argument would make sense if they were talking about javascript replacement, but it's a system language that I assume the code requires code review and regression testing before deployment, so to have it emphasized is strange. - todd
Sure, but you still have to define the abstract base class (interface) in a header file somewhere, and individual .cc files end up depending upon a large number of these in practice, so that any change to one of them tends to force you to recompile a lot of object files. As you say, there are some ways of reducing this effect, but in practice large C++ systems end up taking forever and a day to compile (try compiling WebKit; a lot of Google code has this problem as well). - Joel Webber
C++ templates are also implemented badly, which makes compilation slow. - Piaw Na
Only if you don't compose your system well Joel. I've worked very comfortably on systems that took 12 hours to compile across a cluster of 32 build machines. I'm not saying I don't want a language where you don't have to go through all these hoops, but to say it's inevitable in C++ is not so, you just have to beat make into submission and not create a big ball of mud, which is good practice anyway. - todd
@Todd: Fair enough -- I'm definitely not saying you're wrong, and I have also worked on fairly large C++ code bases (mostly games) without everything going to hell in a handbasket. But you have to admit that it would be nice if you didn't have to wait many hours (or use a Google-sized build cluster) for compiling your code :) - Joel Webber
I've worked "comfortably" on projects where the full rebuild time was a few hours on my local machine, but I can't say that I was ever working optimally. Even in the instant-on environment I'm working in now, there are occasionally changes that I have to wait a full build/deploy cycle to test and it almost always takes me 2-5x as long to solve problems in that case. You can multitask while you wait, but it's just not the same (IMHO, of course). - Matt Mastracci
I think 12 hours to compile across 32 build machines is unacceptable. I want instant compilation. You know, the kind that Turbo Pascal used to have. - Piaw Na
I think that there's a dramatic improvement in developer productivity when the compile-link-run cycle time goes from a minute to a second. - Gary Burd
Piaw before you say what is or is not unacceptable you might want to take the trouble to know what problem is being solved. Turbo Pascal to a real deployed product like a unicycle is to the 5th fleet. - todd
But any, good, modern IDE compiles incrementally and continuously so there's no noticeable compilation step. Compilation shouldn't be a _highlight_ of a new language. It's nice and the ease of building developer tools is a benefit to uptake but, in the end, the language has to be something developers _want_ to read and write since we have to look at it so much. Syntax matters. It's why so much sugar is added to languages. - nicerobot
As stated before, modern IDEs don't scale to google-sized code bases. Go is not designed for your tiny projects that fit in main memory. It's designed for large scale development projects. - Piaw Na
@piaw You seem to assume that Google doesn't organize it's code. Any good project, regardless of size, especially for large projects, should be modularized. If Google has to load every piece of code into the IDE, they have more serious problems than Go will resolve. Trust me, I work on a project with tens of millions of lines of Java code and i've been responsible for analysis and extraction of intelligence from massive amounts of code, resolving dependency issues throughout, ... I'm very familiar with massive software scale. Yet we still build iteratively/incrementally. In fact, part of the Go FAQ mentions that Go will be integrated into IDEs so it actually seems to be part of the design. - nicerobot
Well, Piaw actually did write a fair amount of the code at Google, so I'd give him a little more credit :) I know plenty of people at Google who *do* use Eclipse/IntelliJ on Google's code base (myself included), but you do have to break it into manageable chunks to make it work. That's sometimes easier said than done, to be fair. - Joel Webber
When I worked for a large company in the internet advertising business, I found that dependency creep was a constant problem. I spent more time than I would have liked trying to get fast compilation time in Eclipse/IntelliJ. I welcome a tool that helps with this problem. - Gary Burd
I think that time spent pruning and organizing your code and library is best instead spent working on better tools that make your development environment super fast and capable of scaling. That's the way Go was designed. - Piaw Na
If you want fast turnaround, eliminate compiles all together. There's no reason why a language can't support a double or triple hybrid model. Look at a language like Factor, image based like Smalltalk, you write a function, and can patch it into the live running app instantaneously, where it will run interpreted in combination with compiled code, until the runtime gets around to compiling it. Sure, image-based systems have problems, but you can get most of these benefits with a fairly well designed interpreter/compiler hybrid. - Ray Cromwell
Smalltalk had a massive sharing problem --- you couldn't ever replicate what was in your Smalltalk image on someone else's machine. Eliminating compiles would be nice, but again, if you're solving problems at a massive scale, interpretation would be an order of magnitude loss in execution speed that you can't afford. That said, a Go interpreter would not be out of the question, or even hard to build. - Piaw Na
@Piaw - was just reading "Coders at Work" this week and Ingalls (http://www.codersatwork.com/dan-ingalls.html) was saying the exact opposite. He said he pauses his Mac machine and sends his Smalltalk system state over to a Windows developer and they start right up, debug, and fix. - Daniel J. Pritchett
The point is not to have the production version run in interpretation, the point is to increase developer productivity by allowing a fast edit-run cycle, production builds can take as long as necessary. When you're in development mode, you often don't need full execution speed, you are checking for correctness. Take GWT for example. You can make changes to Java source, hit reload, and see the change in 1 second in many cases. But if you want to build an optimal binary for 200+ locales, it's going to take hours. - Ray Cromwell
What does production mean? An experiment that processes a large number of records so you can decide how to proceed with your line of research is hardly production, but it nevertheless has to execute fast over large amounts of data. You might think that it doesn't matter how quickly that runs, but the difference between 10 minutes and 100 minutes is huge in terms of productivity. - Piaw Na