←back to thread

511 points mootrichard | 8 comments | | HN request time: 0.001s | source | bottom
Show context
burke ◴[] No.23990909[source]
I absolutely hate this.

Separate files for types with no inline annotations possible? What an embarrassing compromise. This is all because Matz explicitly won't allow type signatures in .rb files. I wonder how long it'll be until a hostile fork if he doesn't change his mind.

replies(2): >>23990927 #>>23991103 #
1. amw-zero ◴[] No.23990927[source]
I wouldn’t call it “embarrassing.” What is the actual benefit of having inline type annotations? What is the actual downside of having them in a separate file?
replies(3): >>23990975 #>>23990987 #>>23991500 #
2. burke ◴[] No.23990975[source]
If we're going to add type signatures to code, having them visible alongside their definition site is a sizeable part of the value; and, littering directories with doubled files feels suboptimal to say the least. The comparison to typescript in the article isn't really fair, since typescript supports both modes of operation - projects can choose which they'd like to use.
3. HideousKojima ◴[] No.23990987[source]
The benefit is being able to see what type a variable is without having to open a separate file. Having an option to also have them in a separate file (ala TypeScript) is perfectly fine
replies(1): >>24010612 #
4. mekster ◴[] No.23991500[source]
How hard is it to imagine that you need to keep 2 files in sync, and that you can't type anything inside a method.

I was even hoping to use ruby as a main language having used it before but I'm about to lose any interest in the language when its reality is a bit decoupled from the rest of the world.

replies(1): >>23991861 #
5. amw-zero ◴[] No.23991861[source]
Have you ever worked with a language that has header files (C/C++) or a language that can use them optionally (Ocaml)? In practice, keeping the files in sync isn’t difficult. In fact, it ends up being better (for me) in terms of readability, because I can look up the type definitions in one place, store them as context, and then read code that isn’t littered with type annotations. Type annotations add quite a bit of noise to code. I think that’s what Matz is going for here. You need to be able to keep the readability of Ruby, which he’s dedicated his life to.
replies(1): >>23993290 #
6. Jweb_Guru ◴[] No.23993290{3}[source]
Not to anecdote too hard, but the practice of doing type signatures out-of-line that you are describing is my absolute least favorite part of OCaml, which is otherwise a very lovely language. As for C++, it has enough other stuff going on that I probably can't say the header files are my least favorite feature, but they certainly don't make life easy. I think it makes sense to challenge that decision from an ergonomics standpoint, even if it makes sense within the constraints the Ruby core team has decided upon.
replies(1): >>24010103 #
7. amw-zero ◴[] No.24010103{4}[source]
I very much like Ocaml signature files. Jane street recommends using them, as an example. There’s no other way to communicate the high level contract of a module. With type signatures that are in line with the code, the high level contract gets lost.
8. yawaramin ◴[] No.24010612[source]
Type info on hover in your editor gives you that.