News for hackers. Stuff that matters.
Re:Generics in Go with Ian Lance Taylor (2019) by erik_seaberg on Tuesday February 18, 2020 @06:56PM (#22361721)
> I would say that if the compiler got 100% slower, that would be a failure.

Still a weird thing to care about. If the compiler were 100x slower, that would still be faster than continually handling boilerplate with human brains.

Re:Generics in Go with Ian Lance Taylor (2019) by com2kid on Tuesday February 18, 2020 @07:05PM (#22361790)
Have you ever worked at a place where builds can take multiple days?

If not, don't speak so hastily about compiler speed not being important.

Slow compilations means work arounds like batching changes together for tests on commits, which means doing binary searches across commits to find out who broke the tests, or just reverting everyone's commit and telling people to resubmit and hope it goes through next time.

Ever waited a week trying to get a single change committed because you kept getting batched with other people's broken code?

Slow compilation times matter, a lot. C++ is the nightmare case scenario for this, I've seen templates that take 10 minutes to compile, and once a team gets sizable, build queues became a thing, and they slow development to a crawl.

A 100x slower compiler has a huge impact on productivity. Copy and pasting code for those instances where you need to use template/generic programming is a huge win over waiting days for any and all changes to compile.

FWIW typically in these situations local rebuilds are faster, from 10 - 30 minutes in my experience, but I've only had the pleasure of working on code bases of such size twice, so who knows how bad it can get.

Re:Generics in Go with Ian Lance Taylor (2019) by hinkley on Tuesday February 18, 2020 @07:21PM (#22361866)
The way I like to describe it from a systems or operations perspective is this:

Slow (or flaky) build processes create gamblers. You don't want people gambling with prod.

When it's expensive (time or attention) to verify your work, people start lying to themselves. They tell themselves they've done enough, or that red test or wrong data on the screen is "just a glitch", and you know they do this because when they get caught breaking stuff they will tell you the same thing they told themselves.

The progression that works is this:

You make the tool.

You make the tool reliable.

You make the tool straightforward.

You make the tool cheap.

You make the tool mandatory.

People keep skipping step 4 and thinking rhetoric (even verbal abuse) will save them. If you meet idiots all day...

Re:Generics in Go with Ian Lance Taylor (2019) by alexhutcheson on Tuesday February 18, 2020 @07:52PM (#22362046)
You also end up writing patterns like Pimpl[1] into your codebase, which are really just contortions to get faster compilation speed at the expense of readability, maintainability, and (some) runtime speed.

[1] https://herbsutter.com/gotw/_100/

Re:Generics in Go with Ian Lance Taylor (2019) by zbentley on Tuesday February 18, 2020 @08:02PM (#22362120)
> A 100x slower compiler has a huge impact on productivity

Very true, but the article didn't mention a 100x slower compiler, they mentioned 100% (2x) slower one.

Technically that's a quantitative difference of degree, but it's so big as to be talking about qualitatively different developer experiences.

Re:Generics in Go with Ian Lance Taylor (2019) by com2kid on Tuesday February 18, 2020 @11:58PM (#22363146)
True, although the poster I was replying to mentioned 100x.

Even at 2x, you can only 2x compile times so many times until things get unmanageable!

Re:Generics in Go with Ian Lance Taylor (2019) by davnicwil on Tuesday February 18, 2020 @07:45PM (#22362008)
What types of software and systems have you worked with that take on the order of days to compile?
Re:Generics in Go with Ian Lance Taylor (2019) by kasey_junk on Tuesday February 18, 2020 @11:39PM (#22363079)
Day long compiles used to be routine. Any c++ project in 2001 had a good chance of taking that long.

I worked on a c# project in 2011 that had 18 hour builds.

Re:Generics in Go with Ian Lance Taylor (2019) by dilyevsky on Wednesday February 19, 2020 @02:32AM (#22363713)
I worked for telecom company and our codebase for embedded board with maaaybe 500k LOC of c/c++ (no tmp or any of that crap) took like 4+ hours. That was 2007ish. Didn’t help that our build machines were Sun garbage boxes
Re:Generics in Go with Ian Lance Taylor (2019) by com2kid on Tuesday February 18, 2020 @11:24PM (#22363025)
1. Windows Mobile.

2. Microsoft Office.

Windows Mobile was pre-ssd, but we were surprised when we did get the first generation of SSDs and they weren't an order of magnitude reduction in compile times. (They helped but not as much as we hoped for!)

Re:Generics in Go with Ian Lance Taylor (2019) by apta on Tuesday February 18, 2020 @08:32PM (#22362309)
Other than C++, and perhaps Rust, all major industry languages compile fairly quickly. As far as I'm aware, this discussion is moot.
Re:Generics in Go with Ian Lance Taylor (2019) by pjmlp on Wednesday February 19, 2020 @01:46AM (#22363554)
All the way back to 16 bit home micros days.
Re:Generics in Go with Ian Lance Taylor (2019) by safety-third on Tuesday February 18, 2020 @08:23PM (#22362247)
Go's compile speed is its raison d'être. It straddles the line between convenient scripting languages and heavy compiled languages.

You deal with boilerplate using either interfaces or code generation. It's not as pleasant as first-class generics, but it's not completely awful either.

Re:Generics in Go with Ian Lance Taylor (2019) by dvirsky on Tuesday February 18, 2020 @07:01PM (#22361759)
Is it though? I work on a system that builds in singe to double digit minutes. The productivity loss from x2 slowing down of the compiler is going to be so painful compared to the gains I'll get by not copying some sorting functions etc.
Re:Generics in Go with Ian Lance Taylor (2019) by geodel on Tuesday February 18, 2020 @06:59PM (#22361742)
Well for that purpose we already have Rust/ Swift and so many other languages. What is Go's USP apart from fast compiler.
Re:Generics in Go with Ian Lance Taylor (2019) by sacado2 on Wednesday February 19, 2020 @04:51AM (#22364238)
Readability. I never ran into go code I couldn't read.
Re:Generics in Go with Ian Lance Taylor (2019) by eikenberry on Tuesday February 18, 2020 @08:53PM (#22362418)
Native CSP? That's what got my initial interest. The tooling really helped it stick though.
Re:Generics in Go with Ian Lance Taylor (2019) by Thaxll on Tuesday February 18, 2020 @07:57PM (#22362082)
Swift is nowhere outside of mobile space, on server side it's pretty much dead.
Re:Generics in Go with Ian Lance Taylor (2019) by jitl on Wednesday February 19, 2020 @12:03AM (#22363169)
Swift and Rust both are known for long build times.
Re:Generics in Go with Ian Lance Taylor (2019) by pjmlp on Wednesday February 19, 2020 @01:47AM (#22363559)
Mostly caused by LLVM.

Other equally expressive languages have multiple implementations, including REPLs, with Go like compilation speeds.

So Swift and Rust just need equally LLVM fat free implementations for the developer loop, leaving the LLVM backend for the blazing execution release builds.

Re:Generics in Go with Ian Lance Taylor (2019) by camgunz on Wednesday February 19, 2020 @04:26PM (#22370267)
LLVM isn't fast, but there are other slow parts of the process unique to Rust [1].

[1]: http://gistpreview.github.io/?74d799739504232991c49607d5ce74...

[dead]
Re:Generics in Go with Ian Lance Taylor (2019) by dang on Tuesday February 18, 2020 @08:06PM (#22362148)
Please don't degrade the community and yourself by posting like this, regardless of how strongly you feel about programming languages.

https://news.ycombinator.com/newsguidelines.html

Re:Generics in Go with Ian Lance Taylor (2019) by monocasa on Tuesday February 18, 2020 @08:29PM (#22362288)
I'm not saying it's a bad thing.
Re:Generics in Go with Ian Lance Taylor (2019) by dang on Tuesday February 18, 2020 @10:21PM (#22362793)
Ok, but it's a bad thing to post like that to HN.
Re:Generics in Go with Ian Lance Taylor (2019) by codr7 on Tuesday February 18, 2020 @07:59PM (#22362093)
Go has its issues, name a language that doesn't.

For a long time I couldn't stand using it because it's so damn opinionated, but it still hits a sweet spot for me.

I like C a lot because of its simplicity, but hate spending days solving trivial problems.

If you really need C, nothing else will do. But if you're willing to trade some flexibility for convenience, Go lets you make that compromise without dragging along a ton of features that you didn't ask for.

It's a tool, if it works it works.

Re:Generics in Go with Ian Lance Taylor (2019) by tptacek on Tuesday February 18, 2020 @08:04PM (#22362134)
The overwhelming majority of Go code isn't written at Google, and just a glance at Github will show you that it isn't being used to "jerk off into template engines" or "increase clickthrough rate by 0.1%". This comment contributes nothing to the discussion.
Re:Generics in Go with Ian Lance Taylor (2019) by monocasa on Tuesday February 18, 2020 @08:36PM (#22362329)
> The overwhelming majority of Go code isn't written at Google

I write go for my day job; I'm quite aware of their process. They control the language's future and new features pretty much single handedly. Also, I'd be very very surprised to find out that the overwhelming majority of code isn't written by google, do you have a stat on that you can quote?

> it isn't being used to"jerk off into template engines".

I'm saying go doesn't do that. You can't build these crazy compile time abstractions in it like you can other languages, and Google doesn't really need it to because they have enough man power to just brute force it. It doesn't want their workforce build abstractions for abstractions sake, and go doesn't really help you do that.

> or "increase clickthrough rate by 0.1%".

It is very much used to do that, I've been told by product and engineering friends at google.

Re:Generics in Go with Ian Lance Taylor (2019) by tptacek on Tuesday February 18, 2020 @09:08PM (#22362484)
I'm sure developers at Google use it to do that, because that is a problem that Google works on. It is not a problem that Cockroachdb works on, or that Docker works on, or that Hashicorp works on, or that Caddy works on, or that Tailscale works on.