• Cat_Daddy [any, any]@hexbear.net
    link
    fedilink
    English
    arrow-up
    8
    ·
    1 day ago

    Ruby is awesome. Finding out that everything is an object, and because of that you can do things like in your example (10.whatever), is hilarious coming from other languages.

    • Ephera@lemmy.ml
      link
      fedilink
      English
      arrow-up
      5
      ·
      1 day ago

      By the way, it isn’t actually necessary for everything to be an object to make this work. The language just has to define 10.whatever() to be syntactic sugar for whatever(10). Some languages, like Python and Rust, have an explicit self parameter on their methods to help illustrate this.

      But yeah, a bunch of languages decided to special-case their objects instead, for whatever reason.

      • the rizzler@lemmygrad.ml
        link
        fedilink
        arrow-up
        4
        ·
        1 day ago

        this is very true but i gotta defend my object-oriented languages here (real object-oriented, not c+±style object-oriented). there’s a lot of way cooler stuff you can do with ruby or groovy or smalltalk that you just can’t do with rust, for example. objects aren’t special cases, the entire system is supposed to be implementable in itself. obviously the machine code itself can’t be objects but the good languages do their best to mask that.

      • v_krishna@lemmy.ml
        link
        fedilink
        English
        arrow-up
        3
        ·
        1 day ago

        That’s not quite right, the language has defined Int#days and 10 is actually Int(10). 10.days calls the instance method days on an instance of an Int (it has been years since I’ve used ruby so not sure if the stdlib class is actually Int)

        • TrippaSnippa@aussie.zone
          link
          fedilink
          English
          arrow-up
          2
          ·
          edit-2
          14 hours ago

          days is a method on the Numeric class in Rails, and it creates an instance of ActiveSupport::Duration with self passed to the constructor (this is a bit of a simplification, because it actually calls the class method days on Duration which converts the number of days into seconds before creating the Duration instance).

          • v_krishna@lemmy.ml
            link
            fedilink
            English
            arrow-up
            2
            ·
            12 hours ago

            Oh god good ol ActiveSupport. I’m having flashbacks of so many ruby projects trying not to bring it in and basically reinventing it but poorly documented.

            I still would say it was the language I’ve most enjoyed (professionally used most all higher level languages over 20+ years) but it might be nostalgia for a time early 2010s when rails was just freaking magic compared to the ways we used to build web apps.

        • Ephera@lemmy.ml
          link
          fedilink
          English
          arrow-up
          2
          ·
          edit-2
          1 day ago

          Ah, I’m not talking about Ruby, I’m talking about language design in general.

          I’m currently mostly doing Rust, so I can only really name that as an example (even though there’s very likely other languages that allow this, too), but yeah, here’s for example the 64-bit signed integer in Rust: https://doc.rust-lang.org/stable/std/primitive.i64.html

          That is a primitive type, not an object, so it is exactly 64-bits in size and stored on the stack, not the heap. But as you can see in the documentation, Rust allows for associated functions anyways, like for example:

          let my_number: i64 = -3;
          my_number.abs()  //returns the absolute value, so 3
          

          That’s because that last call is just syntactic sugar for calling the same function statically on the type:

          i64::abs(my_number)
          
    • 1rre@discuss.tchncs.de
      link
      fedilink
      arrow-up
      2
      ·
      1 day ago

      C# allows that. Scala allows that. I imagine a bunch of others do too, it’s just that Python is a scripting language so is simpler in terms of features