News for hackers. Stuff that matters.
Re:I love building a startup in Rust. I wouldn't pick it again by jjnoakes on Friday February 17, 2023 @03:24PM (#34840047)
I love Rust but I am still looking for the perfect blend of the two camps.

One the one hand, Go/Node/Python/etc doesn't scratch my itch for the strong type system (sum types/tagged enums mostly) and on the other hand even though I like prototyping in Rust I really miss things like a REPL, more terse syntax, and a bit more expressiveness.

I think O'Caml is closer to my ideal but the ecosystem isn't quite there. Maybe all it needs is time.

Re:I love building a startup in Rust. I wouldn't pick it again by baby on Friday February 17, 2023 @03:27PM (#34840076)
Yeah I would have recommended OCaml, the language seriously need more developers to contribute to the ecosystem. It could be much nicer.
Re:I love building a startup in Rust. I wouldn't pick it again by jdlshore on Friday February 17, 2023 @04:06PM (#34840588)
Have you looked at Node + TypeScript? I'm just starting to dig into TS, but its type system is one of the better ones I've seen. And Node is nice and mature with good async capabilities.
Re:I love building a startup in Rust. I wouldn't pick it again by jjnoakes on Friday February 17, 2023 @05:16PM (#34841362)
I'd prefer something with a more sound type system, and something that makes cleaning up resources easier and more ergonomic.

This might help with cleanup: https://github.com/tc39/proposal-explicit-resource-managemen...

But I'm not sure anything will help with the type system. For example, this drives me absolutely insane: https://www.typescriptlang.org/play#code/MYewdgziA2CmB00QHMA...

Re:I love building a startup in Rust. I wouldn't pick it again by jdlshore on Friday February 17, 2023 @06:51PM (#34842211)
> makes cleaning up resources easier

I've never really had a problem with it, but I isolate such resources behind a wrapper, which makes cleanup easy. I just create a little higher-order function:

  function doSomethingThatNeedsCleanup(fn) {
    const thing = createTheThing();
    try {
      return fn(thing);
    }
    finally {
      cleanUpTheThing(thing);
    }
  }
> this drives me absolutely insane (console.log(["10", "10", "10"].map(parseInt) outputs [10, NaN, 2])

That's not really an issue with the type system, that's just coincidence and bad luck.

The signature of parseInt is:

  parseInt(string: string, radix?: number | undefined): number
And Array<string>.map(fn) takes a function with the signature:

  fn(element: string, index?: number | undefined, array?: string[] | undefined): any
So parseInt coincidentally matches the signature Array<string>.map() is looking for.

I'm not sure what you expect the type system to do here. It works just fine at catching an actual type error, such as this:

  console.log([10, 10, 10].map(parseInt)
...which correctly complains:

  Argument of type '(string: string, radix?: number | undefined) => number' is not assignable to parameter of type '(value: number, index: number, array: number[]) => number'.
    Types of parameters 'string' and 'value' are incompatible.
      Type 'number' is not assignable to type 'string'.
(As I'm sure you know, this is the correct code: `console.log(["10", "10", "10"].map(s => parseInt(s))` .)
Re:I love building a startup in Rust. I wouldn't pick it again by jjnoakes on Friday February 17, 2023 @07:51PM (#34842694)
> So parseInt coincidentally matches the signature Array<string>.map() is looking for.

If that were true I'd not mind quite as much... but actually, parseInt takes two parameters and map passes three.

Re:I love building a startup in Rust. I wouldn't pick it again by jdlshore on Friday February 17, 2023 @08:52PM (#34843057)
Map’s second and third parameters are optional. Your functions aren’t required to implement them, which is good, because most of the time you don’t need them.

Again, this isn’t a type system issue. It’s both an API design issue and a poor programming hygiene issue. (Don’t pass bare functions if you don’t know what the parameters are.)

Re:I love building a startup in Rust. I wouldn't pick it again by jjnoakes on Friday February 17, 2023 @09:06PM (#34843118)
> Map’s second and third parameters are optional.

I mean, map always passes them in, so in that sense they aren't optional. Mixing that with functions that take in optional parameters, but aren't usually called with them, gives you a ticking time bomb, IMO. And double that danger when the language's type system allows you to call a function with more parameters than it could ever take.

> Don’t pass bare functions if you don’t know what the parameters are.

This is exactly the kind of thing I want my programming language's type system to catch for me, if I'm working in a language with a static type system like TS.

And even in dynamic languages, this is exactly the kind of thing I want my programming language to catch for me at runtime. Python does, for example.

Stuff like this - while it might fit JS and TS and make sense to some - makes absolutely no sense to me, and is why I simply look to other languages to fit my needs.

Re:I love building a startup in Rust. I wouldn't pick it again by Mapsmithy on Friday February 17, 2023 @11:09PM (#34843805)
How would you change the Type System to fix this particular issue?

>> Don’t pass bare functions if you don’t know what the parameters are.

> This is exactly the kind of thing I want my programming language's type system to catch for me, if I'm working in a language with a static type system like TS.

Hows your compiler supposed to know you don't know what the parameters are?

Re:I love building a startup in Rust. I wouldn't pick it again by jjnoakes on Saturday February 18, 2023 @12:04AM (#34844075)
> How would you change the Type System to fix this particular issue?

In TS you really can't (that's my point and why I prefer to avoid the language) because of JS and API baggage. But just about every other static language that I've worked in can complain for this kind of thing.

> Hows your compiler supposed to know you don't know what the parameters are?

Why does the compiler care about what I know? The compiler itself knows what the function's parameters are and it can tell me that something seems wrong because I'm asking it to call a function that maxes out at 2 parameters with 3 parameters.

TS does catch this kind of thing in a lot of places. It just intentionally decides not to do it for these kinds of callbacks because of the same JS and API baggage.

Re:I love building a startup in Rust. I wouldn't pick it again by doodlesdev on Friday February 17, 2023 @07:10PM (#34842396)

  > But I'm not sure anything will help with the type system. For example, this drives me absolutely insane: https://www.typescriptlang.org/play#code/MYewdgziA2CmB00QHMA...
You just gave me CPTSD, thank you. This motivated me enough so that I will leave JavaScript and TypeScript for good now.
Re:I love building a startup in Rust. I wouldn't pick it again by dragonwriter on Friday February 17, 2023 @07:15PM (#34842431)
Oh, god, the “you can call it with one arg, but it really has more, and then you tried to use map, you poor fool” trap.
Re:I love building a startup in Rust. I wouldn't pick it again by tekkk on Friday February 17, 2023 @04:17PM (#34840691)
Pick a problem, not a tool first. Unless you're more interested in the tool than the problem, then it's fine. I don't love Rust, but I can get by. TS+NodeJS is okay. But I'm more interested in the problems that I'm solving so I just use whatever is the most suited.
Re:I love building a startup in Rust. I wouldn't pick it again by hot_gril on Friday February 17, 2023 @04:43PM (#34840996)
Yes. I cringe a little getting emails from startup recruiters saying "join a Rust startup." As if the success of their business hinges on which language they use.

I've found that the basic NodeJS or Python works for most problems I've chosen. Not even with strong typing.

Re:I love building a startup in Rust. I wouldn't pick it again by jjnoakes on Friday February 17, 2023 @05:17PM (#34841373)
I do that today, but I believe there is still a lot of opportunity for languages to approach my ideal, and I think I share my ideal with others. And if a language like that did exist, or could be made, I'd love to use it - changing languages every project is workable, but you'd probably agree (I hope?) that NOT changing languages every project would be even better.
Re:I love building a startup in Rust. I wouldn't pick it again by cultofmetatron on Friday February 17, 2023 @05:19PM (#34841399)
its older than rust. its had plenty of time. what ocaml needs is a renaissance and new blood. sadly it doesn't have the momentum of being new but I agree its a compelling language. I see it as a better, typed alternative to go.
Re:I love building a startup in Rust. I wouldn't pick it again by 12345hn6789 on Friday February 17, 2023 @06:33PM (#34842049)
If you don't need bare metal something like Scala or koitlin will fit. Scala is extremely expressful and does CRUD very well
Re:I love building a startup in Rust. I wouldn't pick it again by jjnoakes on Friday February 17, 2023 @08:24PM (#34842879)
Scala is on my list of languages to try. I'm usually not a fan of large runtimes or too many abstractions from the OS, but I do want to give it a fair shake. F# too.
Re:I love building a startup in Rust. I wouldn't pick it again by jmaker on Saturday February 18, 2023 @03:23AM (#34845093)
Scala is amazing but the community has been shrinking for the past few years, ever so fewer libraries maintained.
Re:I love building a startup in Rust. I wouldn't pick it again by Zababa on Friday February 17, 2023 @08:35PM (#34842941)
OCaml with tooling and an ecosystem from the size of Go would be an ideal. Java and C# can more and more be written like MLs too.
Re:I love building a startup in Rust. I wouldn't pick it again by jjnoakes on Saturday February 18, 2023 @01:48PM (#34849774)
I think I would love an ML-like language built on the go runtime and standard library and ecosystem.