News for hackers. Stuff that matters.
Re:Use Your Type System by arrowsmith on Thursday July 24, 2025 @11:33AM (#44671978)
FYI: Ruby is strongly typed, not loosely.

    > 1 + "1"
    (irb):1:in 'Integer#+': String can't be coerced into Integer (TypeError)
     from (irb):1:in '<main>'
     from <internal:kernel>:168:in 'Kernel#loop'
     from /Users/george/.rvm/rubies/ruby-3.4.2/lib/ruby/gems/3.4.0/gems/irb-1.14.3/exe/irb:9:in '<top (required)>'
     from /Users/george/.rvm/rubies/ruby-3.4.2/bin/irb:25:in 'Kernel#load'
     from /Users/george/.rvm/rubies/ruby-3.4.2/bin/irb:25:in '<main>'
Re:Use Your Type System by pclowes on Thursday July 24, 2025 @12:03PM (#44672359)
Oops, I meant weakly typed as in JS or strongly typed as in Ruby. But decided to switch the Ruby example to Elixir and messed up the sentence
Re:Use Your Type System by johnfn on Thursday July 24, 2025 @11:59AM (#44672314)

    irb(main):001:0> a = 1
    => 1
    irb(main):002:0> a = '1'
    => "1"
It doesn't seem that strong to me.
Re:Use Your Type System by dgb23 on Thursday July 24, 2025 @12:05PM (#44672393)
In the dynamic world being able to redefine variables is a feature not a bug (unfortunately JS has broken this), even if they are strongly typed. The point of strong typing is that the language doesn't do implicit conversions and other shenanigans.
Re:Use Your Type System by Spivak on Thursday July 24, 2025 @02:26PM (#44674268)
Well yeah, because variables in what you consider to be a strongly typed language are allocating the storage for those variables. When you say int x you're asking the compiler to give you an int shaped box. When you say x = 1 in Ruby all you're doing is saying is that in this scope the name x now refers to the box holding a 1. You can't actually store a string in the int box, you can only say that from now on the name x refers to the string box.
Re:Use Your Type System by 9rx on Thursday July 24, 2025 @04:11PM (#44675453)
The types are strong. The variables are weak.
Re:Use Your Type System by folkrav on Thursday July 24, 2025 @04:13PM (#44675475)
It would be weak if that was actually mutating the first “a”. That second declaration creates a new variable using the existing name “a”. Rust lets you do the same[1].

[1] https://doc.rust-lang.org/book/ch03-01-variables-and-mutabil...

Re:Use Your Type System by johnfn on Thursday July 24, 2025 @06:45PM (#44677229)
Rust lets you do the same because the static typing keeps you safe. In Rust, treating the second 'a' like a number would be an error. In ruby, it would crash.
Re:Use Your Type System by folkrav on Thursday July 24, 2025 @11:09PM (#44679161)
Let’s rephrase: is naming a variable typing? As for runtime vs. compile errors - isn’t this just a trade off of interpreted languages?
Re:Use Your Type System by 0x457 on Thursday July 24, 2025 @04:33PM (#44675756)
These are two entirely different a's you're storing reference to it in the same variable. You can do the same in rust (we agree it statically and strongly typed, right?):

let a = 1;

let a = '1';

Strongly typing means I can do 1 + '1' variable names and types has nothing to do with it being strongly typed.

Re:Use Your Type System by kitten_mittens_ on Thursday July 24, 2025 @11:43AM (#44672092)
There seem to be two competing nomenclatures around strong/weak typing where people mean static/dynamic instead.
Re:Use Your Type System by josephg on Thursday July 24, 2025 @11:53AM (#44672220)
Some people mistakenly call dynamic typing "weak typing" because they don't know what those words mean. PSA:

Static typing / dynamic typing refers to whether types are checked at compile time or runtime. "Static" = compile time (eg C, C++, Rust). "Dynamic" = runtime (eg Javascript, Ruby, Excel)

Strong / weak typing refers to how "wibbly wobbly" the type system is. x86 assembly language is "weakly typed" because registers don't have types. You can do (more or less) any operation with the value in any register. Like, you can treat a register value as a float in one instruction and then as a pointer during the next instruction.

Ruby is strongly typed because all values in the system have types. Types affects what you can do. If you treat a number like its an array in ruby, you get an error. (But the error happens at runtime because ruby is dynamically typed - thus typechecking only happens at runtime!).

Re:Use Your Type System by 0x457 on Thursday July 24, 2025 @04:26PM (#44675647)
It's strongly typed, but it's also duck typed. Also, in ruby everything is an object, even the class itself, so type checking there is weird.

Sure it stops you from running into "'1' + 2" issues, but won't stop you from yeeting VeryRawUnvalidatedResponseThatMightNotBeAuthorized to a function that takes TotalValidatedRequestCanUseDownstream. You won't even notice an issue until:

- you manually validate

- you call a method that is unavailable on the wrong object.

Re:Use Your Type System by arrowsmith on Friday July 25, 2025 @01:14PM (#44685577)
You just described why I fell out of love with Ruby.
Re:Use Your Type System by 0x457 on Monday July 28, 2025 @02:53PM (#44714025)
Because you wanted to do 1 + '1'?
Re:Use Your Type System by jnpnj on Thursday July 24, 2025 @01:37PM (#44673619)
yes, untyped names != untyped objects
Re:Use Your Type System by ameliaquining on Thursday July 24, 2025 @03:38PM (#44675086)
I recall a type theorist once defined the terms as follows (can't find the source): "A strongly typed language is one whose type system the speaker likes. A weakly typed language is one whose type system the speaker dislikes."

Related Stack Overflow post: https://stackoverflow.com/questions/2690544/what-is-the-diff...

So yeah I think we should just give up these terms as a bad job. If people mean "static" or "dynamic" then they can say that, those terms have basically agreed-upon meanings, and if they mean things like "the type system prohibits [specific runtime behavior]" or "the type system allows [specific kind of coercion]" then it's best to say those things explicitly with the details filled in.

Re:Use Your Type System by dpryden on Thursday July 24, 2025 @06:40PM (#44677180)
I think you might be thinking of https://cdsmith.wordpress.com/2011/01/09/an-old-article-i-wr...

It says:

> I give the following general definitions for strong and weak typing, at least when used as absolutes:

> Strong typing: A type system that I like and feel comfortable with

> Weak typing: A type system that worries me, or makes me feel uncomfortable

Re:Use Your Type System by js2 on Thursday July 24, 2025 @12:56PM (#44673052)
Good luck with this fight. I've had it on HN most recently 7 months ago, but about Python:

https://news.ycombinator.com/item?id=42367644

A month before that:

https://news.ycombinator.com/item?id=41630705

I've given up since then.

Re:Use Your Type System by 9rx on Thursday July 24, 2025 @03:50PM (#44675221)
We've been reading comments like that since the internet was created (and no doubt in books before that). Why give up now?
Re:Use Your Type System by arrowsmith on Thursday July 24, 2025 @03:23PM (#44674940)