News for hackers. Stuff that matters.
Re:Error Handling in Go (2016) by johan_larson on Friday April 05, 2019 @08:35PM (#19588380)
I don't know. I've worked in three different languages for years on end, and they all have different pain points. C++ is too complicated, and generics are part of that complexity. Java has an ok basic language, but the ecosystem is weird and fad-prone, jumping from beans to patterns to annotations to injection, searching for the One True Way. Go is a little too simple, which sometimes leads to rewriting fairly straightforward stuff that a few clever general mechanisms would let us write once.

This experience makes me suspect that there will always be some pain point with the language. We'll never be happy; that's impossible. The only thing we can do is choose what type of unhappiness we are willing to live with.

The thing I love about Go is its fundamental clarity. It's very upfront and literal. I find it easy to understand what is happening in any particular bit of code. And I suspect that whatever complexities we add would compromise this clarity in the name of brevity. I'd spend less time being bored, and more time being puzzled or incredulous. And fundamentally, I'd rather be bored.

Re:Error Handling in Go (2016) by piano on Saturday April 06, 2019 @11:55AM (#19591357)
> The thing I love about Go is its fundamental clarity. It's very upfront and literal. I find it easy to understand what is happening in any particular bit of code.

When reading Go codebase I'm not familiar with, I'm very often having a hard time figuring which interfaces go with which structs. As in "Oh, this function accepts interface Foo, which is implemented by which structures?" and then I have go on a adventure throughout the codebase to figure out what structures go in there. Really annoying.

In a language whose intention is to be explicit and easy to read (as opposed to write) I can't understand for the life of me why the authors chose to make interface implementations implicit. It seems like a decision that pretty much only has downsides and which is contrary to the overall aim. I just don't get it.

Re:Error Handling in Go (2016) by johan_larson on Sunday April 07, 2019 @06:42AM (#19595997)
The one reason that comes to mind is that doing it implicitly lets you use structures in terms of interfaces even when those structures come from codebases you don't control .

Suppose Bob's codebase has a structure implA that implements interface A, and you want to use in terms of its interface. If the language requires Bob to declare implA as an implementation of A, you have to persuade him to do so in his codebase. But if implicit implementation is enough, then you can just use implA directly as an A with no changes by Bob.

But yes, this is a sore point. It would be convenient to be able to declare structures as implementations of particular interfaces, even if the current implicit behavior were preserved.

Re:Error Handling in Go (2016) by piano on Sunday April 07, 2019 @02:57PM (#19599086)
> Suppose Bob's codebase has a structure implA that implements interface A, and you want to use in terms of its interface. If the language requires Bob to declare implA as an implementation of A, you have to persuade him to do so in his codebase.

Not necessarily, in some lanugages you can add an interface to type even if the type is foreign and you only control the interface. I believe this can be done in Swift, Rust, F# and quite likely some others...

Re:Error Handling in Go (2016) by tracker1 on Saturday April 06, 2019 @01:17AM (#19589385)
I'm a fan of doing the first pass for most things in a scripted language. I mean, it may not be the least bytes or fastest code, but the time to done seems to be a lot better, and usually performs well enough a second pass isn't needed.

I really appreciate what I've seen of both Rust and Go myself. They both feel more approachable than the C/C++ legacies imho. Though I haven't gone much farther than general tutorials with either.

Re:Error Handling in Go (2016) by paulddraper on Friday April 05, 2019 @09:20PM (#19588538)
> the ecosystem is weird and fad-prone

Won't dispute that but did that materially affect your chosen paradigms and patterns?

Re:Error Handling in Go (2016) by johan_larson on Friday April 05, 2019 @09:32PM (#19588576)
When I had the opportunity to choose, I felt I could find useful ways of doing things. The problem was that I often had to accommodate myself to someone else's choices that had been made years before, and I had to understand what the heck they had done before I could make useful upgrades. And with many ways of doing things, some of which are hugely reliant on really non-obvious behavior controlled by cryptic settings in control files or annotations, that can be hard.
Re:Error Handling in Go (2016) by snarfy on Friday April 05, 2019 @09:32PM (#19588578)
Have you tried C#?
Re:Error Handling in Go (2016) by NateDad on Friday April 05, 2019 @10:04PM (#19588705)
C# has the feature-bloat of C++, except with a garbage collector. (I wrote C# for 9 years and even when writing it 40 hours a week, I still had trouble keeping up with all the features that continually came out)
Re:Error Handling in Go (2016) by int_19h on Saturday April 06, 2019 @12:45AM (#19589299)
It has nowhere near the feature bloat of C++. A C++ language lawyer can eat C# ones for breakfast.

If you compared modern C# to C++03, then maybe (although even then I would argue that templates alone are more complicated still).

Re:Error Handling in Go (2016) by tluyben2 on Saturday April 06, 2019 @04:03AM (#19589796)
> I still had trouble keeping up with all the features that continually came out)

Not that I ever had this sentiment but even if so: why would you try to do that? Most new features are tiny enhancements you can live without and the big changes (generics, Linq) you cannot do without so you they are forced anyway. ‘Trouble’ sounds like you were actually bothered by it which seems a bit over the top?

Re:Error Handling in Go (2016) by GenericsMotors on Saturday April 06, 2019 @02:10PM (#19592147)
But maybe you weren't also a C++ developer, because if you were you'd not made such a ridiculous comparison.
Re:Error Handling in Go (2016) by tonyedgecombe on Saturday April 06, 2019 @05:02AM (#19589936)
C# has become quite a big language although it manages to hide the complexity quite well compared to C++. There is very little in the language that will trip you up, unlike C++.

The only problem I have with it is it is still really Windows only, hopefully that will improve with .Net Core 3.

Re:Error Handling in Go (2016) by tluyben2 on Saturday April 06, 2019 @07:55AM (#19590334)
I have been writing stable and robust C# software on Linux and Mac OS X for many years now, so not sure what you mean. Starting with Mono and now solely .NET Core 2 & 3. I know many people who do that as well. And our deployments (all our prod/test/staging servers) went from Windows-only 15 years ago to Linux-only since 4 years.

Maybe you are talking WPF / Desktop only; there are other options for Mono but yes, there you would be right. However the trend is, unfortunately, toward browser interfaces (Electron etc) and those you can do on Linux/Mac already with .NET Core.

Re:Error Handling in Go (2016) by tonyedgecombe on Saturday April 06, 2019 @09:22AM (#19590583)
My experience with .Net Core 1 and 2 was that it felt unfinished. I am planning to take another look when 3.0 is released because I do really like C#.

I wasn't thinking of Desktop although I would love to see something strong emerge there (other than Avalon).

Re:Error Handling in Go (2016) by tluyben2 on Saturday April 06, 2019 @09:49AM (#19590703)
> My experience with .Net Core 1 and 2 was that it felt unfinished

Ah, curious what made you feel that. We ported massive code bases of ASP.NET and commandline tooling over to .NET Core since the 1 and had not many issues. It's a much better experience now but it never felt unfinished to me.

I have to admit that I have been writing software for a long time and one of the things I automatically do is abstract (not too far, just far enough) the underlying implementation of whatever I make/made. So our old ASP.NET code was very easy to port for that reason; I never use internals directly and still do not. For instance MVC looks more or less the same anywhere so I just use plain old C# classes as controllers so they can be reused by apps, other (non ASP.NET) frameworks, commandline, tests etc. It adds a thin layer below them so they work but it saves a lot of time and with the coming of .NET Core it proved smart once again.

Re:Error Handling in Go (2016) by recursive on Saturday April 06, 2019 @12:28PM (#19591531)
In the early days, my impression was that the build tools were totally overhauled every few months, and not always in compatible ways. JSON projects, xml projects, dotnet-cli.
Re:Error Handling in Go (2016) by Coincoin on Saturday April 06, 2019 @10:10AM (#19590792)
>The only problem I have with it is it is still really Windows only, hopefully that will improve with .Net Core 3.

I've been writing games in C# that run on Windows, Linux, OSX, iOS, Android, Windows Phone, UWP, AppleTV, Nintendo Switch and more for years now.

Ironically, the most compatibility issues we had was with Windows Phone and UWP.

Re:Error Handling in Go (2016) by zvrba on Saturday April 06, 2019 @08:37AM (#19590437)
> The only problem I have with it is it is still really Windows only, hopefully that will improve with .Net Core 3.

I'm developing a C# application on Windows (netcore 2.1) and it deploys and runs on OSX without a glitch.

Re:Error Handling in Go (2016) by johan_larson on Friday April 05, 2019 @09:35PM (#19588595)
No. Based on what I've read, it seems to be Slightly Different Java. Is there some important difference?
Re:Error Handling in Go (2016) by damian2000 on Friday April 05, 2019 @10:06PM (#19588709)
There's a number of differences, including generics done well. The team behind C# seem really engaged and transparent. The latest C#8 brings non nullable reference types, similar to how Kotlin does it.
Re:Error Handling in Go (2016) by snarfy on Friday April 05, 2019 @10:59PM (#19588907)
I wouldn't call its ecosystem weird and fad prone.