• lime!@feddit.nu
    link
    fedilink
    arrow-up
    81
    arrow-down
    4
    ·
    1 day ago

    arrays don’t have indices. lists have indices. arrays have offsets.

    • bitchkat@lemmy.world
      link
      fedilink
      English
      arrow-up
      4
      ·
      6 hours ago

      I think you got that backwards sport. Index implies direct access but offset implies traversal.

      • lime!@feddit.nu
        link
        fedilink
        arrow-up
        1
        ·
        6 hours ago

        no? an offset is just a number that you add to an address to get a new number. and index in a generic position marker.

    • turdas@suppo.fi
      link
      fedilink
      arrow-up
      17
      ·
      1 day ago

      §6.7.9 of the C11 standard says they have elements with indices:

      If an array of unknown size is initialized, its size is determined by the largest indexed element with an explicit initializer. The array type is completed at the end of its initializer list.

      • lime!@feddit.nu
        link
        fedilink
        arrow-up
        6
        arrow-down
        2
        ·
        1 day ago

        it also states in section 6.7.7 (“type names”) that

        If the pointer operand points to an element of an array object, and the array is large enough, the result points to an element offset from the original element such that the difference of the subscripts of the resulting and original array elements equals the integer expression.

        note also that your example is the only occurrence of the word “index” in the entire document that isn’t just referring to the actual index at the end.

    • SorryQuick@lemmy.ca
      link
      fedilink
      arrow-up
      3
      ·
      1 day ago

      Says who?

      By definition, an index is

      a number or symbol or expression (such as an exponent) associated with another to indicate a mathematical operation to be performed or to indicate use or position in an arrangement

      Since the arrays offsets alao tell us about the items’s position in the array, is it not then an index?

      People take these terms way too seriously. Hell, many languages have their “list” implemented as an array. What then do you call the index/offset?

      • lime!@feddit.nu
        link
        fedilink
        arrow-up
        2
        arrow-down
        1
        ·
        edit-2
        1 day ago

        if you want my opinion (<- see now you can’t tell me i’m wrong, it’s an opinion) then the difference is that an array is by definition a memory address that’s designated as the beginning of an array, and it’s got an offset because the first element is at that specific address and further items are offset from that address. so you add the offset to the address to get the nth item. a list, meanwhile, can be basically any implementation under the hood, but it’s commonly a linked list. the way you get the nth index there is you count up from the first position. since the implementation is opaque and may be spread out in memory you can’t arithmetic your way to an index, you need to follow the pointers.

        java’s arraylist is a list backed by an array. java’s vector is a list backed by a linked list.

        • SorryQuick@lemmy.ca
          link
          fedilink
          arrow-up
          2
          ·
          1 day ago

          That doesn’t really address what you call it. Names only really just exist to get your point across. Inexperienced devs may not know what an offset means (or why we use that), so index does the job. An experience dev knows how it works anyway, so whether you say index or offset won’t matter. By virtue of the common denominator, I simply use index everywhere.

          • lime!@feddit.nu
            link
            fedilink
            arrow-up
            1
            ·
            18 hours ago

            depends on the area you’re working in. it’s a pretty important distinction in embedded software.

            • SorryQuick@lemmy.ca
              link
              fedilink
              arrow-up
              2
              ·
              9 hours ago

              Why? I’ve worked as an embedded dev for a few years and nobody in my team cared what it was called.

              • lime!@feddit.nu
                link
                fedilink
                arrow-up
                1
                ·
                8 hours ago

                because making sure offsets are correct come up a lot when you’re memory-mapping IO.

                • SorryQuick@lemmy.ca
                  link
                  fedilink
                  arrow-up
                  2
                  ·
                  6 hours ago

                  Right but whether they’re correct or not doesn’t depend on the name you use. Every programmer worth his name knows arrays start at offset zero even if you don’t call it that.

      • lime!@feddit.nu
        link
        fedilink
        arrow-up
        5
        arrow-down
        1
        ·
        1 day ago

        javascript doesn’t have arrays. the backing data structure is a doubly-linked list.

        • qprimed@lemmy.ml
          link
          fedilink
          English
          arrow-up
          6
          ·
          1 day ago

          and the backing for that is linear or page addressed MOS transistors, spinning rust or flippy-round magnets.

          do you have a source that indicates mainstream JS engines internally uses a list structure for arrays? I can’t find one.

          • lime!@feddit.nu
            link
            fedilink
            arrow-up
            5
            arrow-down
            1
            ·
            1 day ago

            skipped a few steps there i think.

            anyway, good question. led me to some cursed code.

            the ArrayObject in spidermonkey is an interface to either a TypedArrayObject or a SharedArrayObject. those both have an inner ArrayBuffer object, which is a view into ArrayBufferObjectMaybeShared, which contains a refcounted vector of uint8 pointers, regardless of the datatype. soooo all arrays in javascript are… strings?

            • thebestaquaman@lemmy.world
              link
              fedilink
              arrow-up
              1
              ·
              14 hours ago

              If I’m understanding you correctly, they’re basically doing the same thing as Python under the hood and using a heap-allocated array (vector) of pointers? If so, that should still be orders of magnitude faster than a linked list.

              If their implementation is actually a linked list, colour me shocked. My impression was that JavaScript is “decently fast”. I’ve never even considered writing high-performance code in it, but I’ve heard that the compiler can optimise extremely aggressively, and it’s used so widely that I couldn’t imagine that it had glaring performance issues like what I would expect to see if every array was actually a linked list under the hood.

              • lime!@feddit.nu
                link
                fedilink
                arrow-up
                1
                ·
                12 hours ago

                can’t a jit move things around enough that a linked list could be transformed into a memory-backed array if the access pattern requires it.

                • thebestaquaman@lemmy.world
                  link
                  fedilink
                  arrow-up
                  1
                  ·
                  10 hours ago

                  Sure it can, as long as it retains behaviour according to whatever standard it needs to comply to. My point was rather that I would be very surprised if the actual implementation (at memory level) was a linked list.

            • qprimed@lemmy.ml
              link
              fedilink
              English
              arrow-up
              4
              ·
              1 day ago

              skipped a few steps there i think.

              thanks for the considered reply. didn’t mean to jump all the way down to electrons and sound so flippant.

              my claim is that JavaScript arrays are arrays because the spec defines their behavior as such. the implementation details are absolutely interesting from a performance perspective and I was genuinely curious how an internally linked list implementation would actually work, real-world. regardless… almost every interaction I have ever had with a JS programmer has ended in “its strings all the way down”… so… I mean… yes-ish?

              loved your poking of the hornets nest in this thread :-)

              • lime!@feddit.nu
                link
                fedilink
                arrow-up
                3
                ·
                1 day ago

                i was thinking between the linked list and the transistors :)

                also, i mean… what you might call an array i might call a vector. js arrays allow elements of different types, so they are by definition not arrays in the traditional sense. them being chars internally does make sense in a gross way.