Live data from Hacker News

Russ Cox is stepping down as the Go tech lead

groups.google.com

261–270 of 396 posts

Re: Russ Cox is stepping down as the Go tech lead

#261
post #238
post #231

Earlier quoted context omitted.

I think the fundamental reason behind this behavior is just Go's rejection of the concept of compiler warnings. Unused variables must either be A-ok or trigger an error. They chose the second option for unused variables. Some other code smells are considered A-ok by the compiler and need to be caught by linters.

The problem with such rejection is that every serious project written in Go has invented compiler warnings outside the compiler, with linters.

Is this a problem? Linters are also used with lots of languages that do have compiler warnings. Go just removes the no man’s land between honest-to-goodness compiler errors and linter warnings about code smells. I see no issue with having the latter handled entirely by tools designed for the job.

Re: Russ Cox is stepping down as the Go tech lead

#262
post #5

IMHO Go has been one of the best-managed open source projects ever. Hats off to Google for supporting it.

I did mean to ask: who "owns" Go for all practical purposes?

I suppose in theory it's some independent entity/commitee/whatever, but who pays the majority of the people working on it? Google?

Re: Russ Cox is stepping down as the Go tech lead

#263
post #121

Earlier quoted context omitted.

I'm shameless when using Chat GPT to assist with personal projects. It's just another tool.

[flagged]

I'll put it this way, the same doesn't apply with Rust.

I don't feel ashamed that I didn't manually come up with sorting algorithms. I was able to make a small Golang project and I had fun.

Re: Russ Cox is stepping down as the Go tech lead

#264
post #61

Earlier quoted context omitted.

Well written list of what made Go better language during last years. I'd add iterators, the recent big thing from Russ.

Wow. I haven't followed Go for a while, thanks for that note. Iterators are very nice addition, even with typical Go fashion of quite ugly syntax.

Just last week I've implemented an iterator for my C++ type and lol to your comment. It was fucking nightmare compared to how you (will) implement an iterator in Go.

I didn't study the reason why Go chose this way over others. I do know they've considered other ways of doing it and concluded this one is best, based on complex criteria.

People who make value judgements like this typically ignore those complex consideration, of which playing well with all the past Go design decisions is the most important.

Frankly, you didn't even bother to say which language does it better or provide a concrete example of the supposedly non-ugly alternative.

Re: Russ Cox is stepping down as the Go tech lead

#265
post #235

Please make more Ivy videos

I think you might be thinking of Rob Pike's project, unless Russ has been involved? https://github.com/robpike/ivy

Russ has indeed been involved, he's done various videos solving advent of code using Ivy.

Russ has also got a pull request to add an operator, see https://github.com/robpike/ivy/pull/83

Re: Russ Cox is stepping down as the Go tech lead

#266
post #90

Earlier quoted context omitted.

I'm not intimate with Linux as a project, but this is an attractive argument for it. Unfortunately my main experiences with Torvalds are motivated by his chewing out people on mailing lists for something stupid they said rather than fending off varied interests, which makes him look far more petty than competent.

Only those instances make the news. And then get repeated time and time again. It's a super-biased view not at all representative of his day-to-day behaviour. Also I've never seen Torvalds "chewing out people on mailing lists for something stupid they said", it's always been someone breaking something or something along those lines. That is: doing stupid. And it's also experienced maintainers Torvalds feels should ha…

> it's always been someone breaking something or something along those lines

Not only is this a complete lie, but God forbid there's a process in place to catch these things instead of verbally abusing your coworkers for making mistakes, which Linus has done himself.

> Imagine every outburst you have is public and pointed to for years to come

You may be surprised to learn that the rest of us don't talk to anyone like this.

> but being hung up over a few incidents over a 30-year time period

That's a great way to make it sound old but he actually gets angrier as time goes on. https://lkml.iu.edu/hypermail/linux/kernel/1510.3/02866.html

Re: Russ Cox is stepping down as the Go tech lead

#267

Earlier quoted context omitted.

The semantics are always complex. The same type of question arises for all basic types. For example, what does adding a string to an integer produce? Or do you give up on answering that and simply prevent adding strings and integers? When one wants to add them they can first manually apply an appropriate type conversion. That is certainly a valid way to address your question – i.e. don't allow incrementing said type.…

I think you're confusing the type and value level. The original statement was about a range type , that is something like an integer that is statically constrained to a range of, say, 1..4 (1, 2, 3, 4). To work with this as a type you need to have type level operations, such as adding two ranges (which can yield a disjoint range!), adding elements to the range, and so on, which produce new types. These all have to wo…

A range type could be very simple if it were just used for storage - you couldn’t do anything with it other than passing it around and converting it to something else, and there would be a runtime check when creating it.

But such a thing would be useful mostly for fields in data structures, and the runtime checks would add overhead. (Though, perhaps it would replace an array bounds check somewhere else?)

Re: Russ Cox is stepping down as the Go tech lead

#268
post #156

thanksStr := "thank you rsc" ret, err := sayThanks(thanksStr) if err != nil { return nil, err } return ret, nil

Can anyone familiar with Go explain why not return sayThanks(thanksStr) I've seen this "if err != nil" pattern before, but I can't help thinking that it's not necessary. "return ret, nil" ignores err's value, which is nil anyway. "return nil, err" ignores ret's value, but why? If the caller checks for err before doing anything with ret, it doesn't hurt having ret always passed up. 4 extra lines only to lose the value…

It's not needed if it's just on its own, but Go's error handling makes it necessary when chaining functions, which is why you see it so often.

Imagine in Java or Python or C# or ... many languages that use exceptions to handle errors:

    return a(b(c(arg)));
...where a(), b(), and c() can throw some kind of exception, so you don't have to handle them then and there. In Go there aren't exceptions, all error handling is explicit and handled conventionally by returning an error as the last (sometimes only) return value, which isn't composable, so you get:

    cVal, err := c(arg)
    if err != nil {
        return nil, err
    }
    bVal, err := b(cVal)
    if err != nil {
        return nil, err
    }
    return a(bVal) // the final call can be simpler
That's the minimum verbosity required. Since Go 1.13 (2019), they officially added the concept of "wrapped" errors (aka "cause" in languages with exceptions) so instead of returning err you can return errors.Wrap("error in the a-b-c function calling c", err). But nonetheless, _every_ level of the call chain has to wrap or pass on all errors with explicit code. Go does have panic() and recover() which allow for exception-like error handling but it's not idiomatic to use them for normal error handling, go wants that to be explicit.

As for why "return nil, err" rather than "return ret, err"? Because while the caller _should_ check for errors, sometimes they just don't.

    ret, _ := abc(arg) // just ignore the error
    ret.DoSomethingFun()
You as callee don't want to get the blame if you've _partially_ filled an struct because you returned early with an error, and it's then usable but causes a crash because it was partially initalised, because someone ignored the error they got when creating it. That hides where the problem really was. Better to return an empty value, default value or nil.

Re: Russ Cox is stepping down as the Go tech lead

#269

Earlier quoted context omitted.

Here are some other projects that benefited from BDFLs in my opinion: * Keras * Ruby * Clojure * Zig * OCaml * Vim * Elixir I think all of these have ended up being unusually coherent. I may not agree with their design philosophy, but there clearly is one.

But php, one of the most notoriously chaotic mainstream languages, has a bdfl. And lua, arguably more disciplined than all of the ones you listed, has not.

Rasmus is not the BFDL for PHP.

Re: Russ Cox is stepping down as the Go tech lead

#270
post #216

Earlier quoted context omitted.

False things programmers believe: All reference types should be able to take a null value. It's impossible to write complex and performant programs without null. It's impossible to write complex and performant programs without pointers. References always hold a memory address in a linear address space. (Not even true in C!) Every type is comparable. Every type is printable. Every type should derive from the same comm…

Never met a programmer that thought these things were true.

A few of those myths are stated as fact in the aforementioned thread.
Post reply on HN