Live data from Hacker News

Rob Pike explains why every programmer should know about the array languages

arraycast.com

11–20 of 39 posts

Re: Rob Pike explains why every programmer should know about the array languages

#11

I listened to this. He talks about language diversity but I never heard Rob Pike mention anything about Haskell or ML style languages and his opinions on that. He never commented on functional programming languages and the closest he gets to it is mentioning lisp. The design of Go feels almost as if he doesn't even know about those ML languages and it feels as if he doesn't like FP. Of course he probably does know ab…

The key quote about go for me was that it was designed to stop google engineers trying to be clever, and clever FP/ML stuff was excluded explicitly

Re: Rob Pike explains why every programmer should know about the array languages

#12
post #9

Earlier quoted context omitted.

It's entirely possible for an expert programmer and pl designer to have never heard of ML-based languages or FP as a name for the concept.

Would Haskel or some other functional language be a part of a typical CS curriculum? I remember having a course about programming paradigms which introduced different languages and we wrote a small project based on functional languages.

it's hard to do theoretical CS without functional languages

Re: Rob Pike explains why every programmer should know about the array languages

#13

I listened to this. He talks about language diversity but I never heard Rob Pike mention anything about Haskell or ML style languages and his opinions on that. He never commented on functional programming languages and the closest he gets to it is mentioning lisp. The design of Go feels almost as if he doesn't even know about those ML languages and it feels as if he doesn't like FP. Of course he probably does know ab…

Well, Lisp is just as functional as ML-family languages like OCaml and F#. Haskell's typed/pure FP is a branch off of this. Surely between Pike, Griesemer, and Thompson someone had some ML experience, but this doesn't matter much for the design of Go. More important is that newcomers can't be expected to have ML experience, and a central goal of Go is to be quickly accessible to new programmers. And there was also a…

It's the whole (res, error) error handling thing.

Seems like there's an obvious solution that was avoided or not known about here. It's not even about being clever. Its about being practical.

Re: Rob Pike explains why every programmer should know about the array languages

#14

I listened to this. He talks about language diversity but I never heard Rob Pike mention anything about Haskell or ML style languages and his opinions on that. He never commented on functional programming languages and the closest he gets to it is mentioning lisp. The design of Go feels almost as if he doesn't even know about those ML languages and it feels as if he doesn't like FP. Of course he probably does know ab…

Previously: "[Pike is] hardly the first hard-core hacker to be ignorant of the degree to which type theory has seen dramatic advances since the 1980s." It's a comment on this quote from Pike: https://news.ycombinator.com/item?id=6821389

I think Pike definitely had not, at that point, explored the way types work in ML-style languages.

Re: Rob Pike explains why every programmer should know about the array languages

#15
post #10

Rob Pike, co-creator of the Go language and UTF-8, tells us why every programmer should know about the array languages. Host: Conor Hoekstra Panel: Marshall Lochbaum, Adám Brudzewsky, Stephen Taylor and Bob Therriault.

And then Pike begins by saying he doesn't know much about APL.

That's really weird, since he did implement a calculator that uses a dialect of APL: https://aplwiki.com/wiki/Ivy

Re: Rob Pike explains why every programmer should know about the array languages

#16
post #15
post #10

Earlier quoted context omitted.

And then Pike begins by saying he doesn't know much about APL.

That's really weird, since he did implement a calculator that uses a dialect of APL: https://aplwiki.com/wiki/Ivy

I think he’s sort of being humble and also admitting that he’s not a true expert. It’s clear he has more than a passing familiarity with APL.

Re: Rob Pike explains why every programmer should know about the array languages

#17

Earlier quoted context omitted.

Well, Lisp is just as functional as ML-family languages like OCaml and F#. Haskell's typed/pure FP is a branch off of this. Surely between Pike, Griesemer, and Thompson someone had some ML experience, but this doesn't matter much for the design of Go. More important is that newcomers can't be expected to have ML experience, and a central goal of Go is to be quickly accessible to new programmers. And there was also a…

It's the whole (res, error) error handling thing. Seems like there's an obvious solution that was avoided or not known about here. It's not even about being clever. Its about being practical.

Maybe so. I guess you're talking about option types, although it's not obvious to me that these do any better given the requirement that errors are always explicitly shown in the code. So maybe your problem is with that requirement instead. But why are you listening to a podcast in the hopes the guest will admit his ignorance and tell you something you already know, instead of to learn new things?

Re: Rob Pike explains why every programmer should know about the array languages

#18

Earlier quoted context omitted.

It's the whole (res, error) error handling thing. Seems like there's an obvious solution that was avoided or not known about here. It's not even about being clever. Its about being practical.

Maybe so. I guess you're talking about option types, although it's not obvious to me that these do any better given the requirement that errors are always explicitly shown in the code. So maybe your problem is with that requirement instead. But why are you listening to a podcast in the hopes the guest will admit his ignorance and tell you something you already know, instead of to learn new things?

>I guess you're talking about option types,

I'm talking about a more general concept. A kind of type that can be either one thing or another. For example an Int or an Error.

You have Product types which are types that are two things at the same time an (int and an error) and you have sum types (int or an error).

To illustrate say I have two types that consists of a small finite set of values type A and type B.

   A = 1 | 2 (cardinality = 2, A can be a 1 or a 2)
and another type that consists of 3

   B = '1 | '2 | '3 (cardinality = 3, B can be a '1, '2 or '3)
A product type is like a tuple or a struct containing both A and B: (A, B). The cardinality of (A, B) is the product of the cardinality of the individual types: 2 * 3 = 6

   (1,'1) (1,'2), (1,'3) (2,'1) (2,'2) (2,'3)  
in other words cardinality is the total amount of possible values that can be represented by the type.

A sum type is a type that consists of EITHER A or B: (A | B). The value can be one or the other. The cardinality becomes the sum of the cardinality of the original types 2 + 3 = 5. In this case the sum type of A | B can be one of these values:

   1, 2, '1, '2, '3
   
Go is missing the sum type. It's like the world of math with only multiplication and no addition. You are missing a critical piece of programming.

An option type is simply a Sum type with two possible types. (Any | None)

But it goes far beyond just Options.

For example JSON is not definable as a type in Go. Not without some really awkward stuff (aka reflection lol). You can define it in almost every other modern language:

Python:

   JSONTYPE = None | float | int | str | List[JSONTYPE] | Dict[str, JSONTYPE]
Haskell:

  data JSValue
    = JSNull
    | JSBool     Bool
    | JSRational Float
    | JSString   String
    | JSArray    [JSValue]
    | JSObject   (JSObject JSValue)
Rust:

  #[derive(Debug, PartialEq, Clone)]
  enum JsonValue {
      Null,
      Bool(bool),
      Number(f64),
      String(String),
      Array(Vec),
      Object(HashMap),
  }
You can define a type completely isomorphic to json in almost every language. You can't do that at all with Go. Literally this popular data format cannot defined in go. How the heck is that suppose to be "practical"?

What does go do when it comes to parsing json? I've seen it and it appears to be the ugliest thing I've ever seen. But that's another deep dive.

>But why are you listening to a podcast in the hopes the guest will admit his ignorance and tell you something you already know, instead of to learn new things?

I just got a job that involves golang and its now a big part of my life as it's now my daily driver. I thought due to the popularity of the language it must be great.

What ended up happening was Go feels like a broken language. But maybe I'm wrong. Maybe Rob Pike had a good reason not to include sum types in his language, or maybe he just didn't know about it. Imagine that, my life and the lives of other people defined by the fact Rob Pike didn't know something.

That's what I want to find out. Is the popularity of his language really stemming from him and other people not knowing any better? Or is it me not knowing any better? Have I not seen the light? Or have you not?

Put it this way. If you read my post and you knew about everything I said here and you love golang... Then you know something I don't. If you learned something then maybe you haven't seen the light.

Re: Rob Pike explains why every programmer should know about the array languages

#19
post #6

> whenever something APL related comes up on Hacker News, it's always in the form of arcana you'll laugh at rather than fascinating work being being done by very smart people. I find that offensive, but I'm not going to push back on that. I don't talk on Hacker News. But I've seen a lot of interesting things being posted about it, and the comments are always almost universally, like: "what the hell is that for?". And…

Probably because Matlab is basically an imperative scripting language with a bunch of array features bolted on. It's been pretty successful for numerous reasons although there is definitely a lot i dislike like the crazy high costs (you pay $$$ for the language environment, $$$ for the libraries that you want, and $$$ if you want to create a standalone executable). However, it's worth it to a lot of scientists for valid reasons.

APL is a lot cooler as a language, but is missing a lot of built-ins that Matlab has for numerical computing. The APL community would just tell you to write a few lines of code to implement what you need rather than call out to a massive black-box function. It's certainly a better approach if you have the time/ability, but I often don't. More recently, Dyalog Apl and Kdb+ (the two big commercial Apl or Apl-derived languages) have support to use Python libraries if you need that.

Re: Rob Pike explains why every programmer should know about the array languages

#20

Earlier quoted context omitted.

Maybe so. I guess you're talking about option types, although it's not obvious to me that these do any better given the requirement that errors are always explicitly shown in the code. So maybe your problem is with that requirement instead. But why are you listening to a podcast in the hopes the guest will admit his ignorance and tell you something you already know, instead of to learn new things?

>I guess you're talking about option types, I'm talking about a more general concept. A kind of type that can be either one thing or another. For example an Int or an Error. You have Product types which are types that are two things at the same time an (int and an error) and you have sum types (int or an error). To illustrate say I have two types that consists of a small finite set of values type A and type B. A = 1…

Sure, I've run into this when I went to do some language implementation in Go (dumped at [0]; didn't keep up with it just because I didn't have much reason to do it in the first place). I'd prefer ADTs, but I just frowned a bit and used interfaces. Your strong feelings here aren't because this is objectively inconvenient but because you think it's something you shouldn't have to put up with. If there's a factor you're missing—not saying there is—it's that types aren't supposed to tell the whole story in Go and it's fine to have data that's not fully described by a type.

I don't believe in a single "the light" to be seen. I know something you don't (the ability to create your own array DSL gives you none of the advantages of a particular array DSL developed over decades of hard work), you know something I don't. Go's popular because it got stuff right that other languages in the space like Dart and Swift missed.

[0] https://gist.github.com/mlochbaum/a7c0dcd482bd07f39fffc3332f...

Post reply on HN