I know JavaScript is a very special boi but c’mon, you’re embarrassing me in front of the wizards.

  • melfie@lemy.lol
    link
    fedilink
    arrow-up
    15
    ·
    4 days ago

    So a Reduced Instruction Set Computer with a superfluous instruction that even x86_64 doesn’t have? 🤔

  • bitcrafter
    link
    fedilink
    arrow-up
    38
    arrow-down
    2
    ·
    5 days ago

    If only we had built the web on top of a language that did not have such insane handling of its numbers in the first place…

    • arty@feddit.org
      link
      fedilink
      English
      arrow-up
      4
      ·
      4 days ago

      Could you recommend a language with a sane handling of 64b-NaN-to-32b-int conversion?

      • bitcrafter
        link
        fedilink
        arrow-up
        19
        ·
        4 days ago

        There are tons of languages that let you represent integers directly as integers rather than having everything be a float so that you do not have to worry about this problem at all.

          • BatmanAoD
            link
            fedilink
            arrow-up
            19
            ·
            4 days ago

            Yes. Types are good. Numeric operations have specific hardware behavior that depends on whether you’re using floating-point or not. Having exclusively floating-point semantics is wildly wrong for a programming language.

            • Steve Holden@freeradical.zone
              link
              fedilink
              arrow-up
              3
              ·
              4 days ago

              @BatmanAoD IMHO both JavaScript and PHP were hacks. When introduced they were indeed excellent hacks, making difficult things possible for the first time. In as sane world they would have been discarded as prototypes, but once human greed enters the picture (and in the capitalist world that is ALL the time) sense goes out of the window and the gold rush begins. This is far from a new story (cf. California 1849).

              A collage of images relating to the California gold rush of 1849. https://www.britannica.com/topic/California-Gold-Rush

              • BatmanAoD
                link
                fedilink
                arrow-up
                2
                ·
                3 days ago

                I have managed to mostly avoid needing to code in either language, but my strong inclination is to agree that they are indeed hacks.

            • arty@feddit.org
              link
              fedilink
              English
              arrow-up
              1
              arrow-down
              7
              ·
              4 days ago

              Types are good

              Opinions vary on this topic, apparently. There’s a proliferation of untyped languages.

              • BatmanAoD
                link
                fedilink
                arrow-up
                2
                ·
                3 days ago

                There’s a proliferation of dynamically and/or softly typed languages. There are very few, if any, truly untyped languages. (POSIX shells come close, though internally they have at least two types, strings and string-arrays, even if the array type isn’t directly usable without non-POSIX features.)

                • FizzyOrange
                  link
                  fedilink
                  arrow-up
                  2
                  ·
                  2 days ago

                  TCL & CMake are fully stringly typed. Both pretty terrible languages (though TCL can at least claim to be a clever hack that was taken far too seriously).

                • bitcrafter
                  link
                  fedilink
                  arrow-up
                  2
                  ·
                  3 days ago

                  Forth is arguably an example of a truly untyped language.

          • FizzyOrange
            link
            fedilink
            arrow-up
            9
            ·
            4 days ago

            Yeah. I think the smallest number of number types you can reasonably have is two - f64 and arbitrary precision integers types. One of the few good decisions Python made.

            • arty@feddit.org
              link
              fedilink
              English
              arrow-up
              1
              arrow-down
              9
              ·
              4 days ago

              Well, I think I’m happy to never have to choose a number type in JS. I also think that insanity is how C and Intel handle NaN conversions.

              • bitcrafter
                link
                fedilink
                arrow-up
                7
                arrow-down
                1
                ·
                4 days ago

                What does it mean to access the element at index π of an array?

                • arty@feddit.org
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  arrow-down
                  7
                  ·
                  4 days ago

                  What does it mean to access the 0th element of an array?

              • FizzyOrange
                link
                fedilink
                arrow-up
                5
                ·
                4 days ago

                Try interacting with anything that uses u64 and you’ll be a lot less happy!

                Anyway JavaScript does have BigInt so technically you are choosing.

                that insanity is how C and Intel handle NaN conversions.

                It’s not actually quite as bad as the article says. While it’s UB for C, and it can return garbage. The actual x86 conversion instruction will never return garbage. Unfortunately the value it returns is 0x8000… whereas JS apparently wants 0. And it sets a floating point exception flag, so you still need extra instructions to handle it. Probably not many though.

                Also in practice on a modern JS engine it won’t actually need to do this operation very often anyway.

                • arty@feddit.org
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  arrow-down
                  4
                  ·
                  4 days ago

                  Try interacting with anything that uses u64 and you’ll be a lot less happy!

                  I’m sorry you had to experience this, but in all my years of development I hadn’t.

                  …not actually quite as bad… While it’s UB for C, and it can return garbage. … the value it returns is 0x8000

                  0x8000 is garbage. Insane.

          • bitcrafter
            link
            fedilink
            arrow-up
            8
            arrow-down
            1
            ·
            4 days ago

            The whole reason why an entire instruction was added to ARM to facilitate conversion to integers is because people need integer semantics from their numbers and so the language has to support this efficiently. Thus, in practice there already two number types, it’s just that they have been merged together in this incredibly messy way so that you have the worst of both worlds.

            • arty@feddit.org
              link
              fedilink
              English
              arrow-up
              1
              arrow-down
              6
              ·
              4 days ago

              JS just implicitly does what you, typed language developer, would have to do explicitly

              • lad
                link
                fedilink
                English
                arrow-up
                4
                arrow-down
                1
                ·
                4 days ago

                JS just implicitly does what

                …it wants, also sometimes it’s far from what you want or even could expect

    • CombatWombatEsq@lemmy.worldOP
      link
      fedilink
      arrow-up
      2
      ·
      5 days ago

      I’d definitely read a blog post about this, so if you decide to look into it you should write something up and post it. Maybe it’s standards based?

      • arty@feddit.org
        link
        fedilink
        English
        arrow-up
        6
        ·
        4 days ago

        I don’t think I’ll dive deeper than quoting Wikipedia:

        Most fixed-size integer formats cannot explicitly indicate invalid data. In such a case, when converting NaN to an integer type, the IEEE 754 standard requires that the invalid-operation exception be signaled.

        For example in Java, such operations throw instances of java.lang.ArithmeticException.

        In C, they lead to undefined behavior, but if annex F is supported, the operation yields an “invalid” floating-point exception (as required by the IEEE standard) and an unspecified value.

        In the R language, the minimal signed value (i.e. 0x80000000) of integers is reserved for NA (Not available).[citation needed] Conversions from NaN (or double NA) to integers then yield a NA integer.

        Perl’s Math::BigInt package uses “NaN” for the result of strings that do not represent valid integers.