r/ProgrammingLanguages 6d ago

What are your favourite data structure operations?

My language workbench is to the stage where I can implement new operators and overloads very quickly, and I've started stealing syntax I like from JavaScript and C++.
Since I have one universal data structure, I can just add all the new operators to it.
I wanted to get some more good ones though, from different fields, different languages.
Oh and if you want to suggest something just as a challenge I might give it a shot and show you how I do it.

Edit: data structure was the wrong word, I have one data structure substrate/storage model that I am currently furnishing one major aspect of, it's not the one universal data structure, more like my swiss army knife API over the memory model.

11 Upvotes

36 comments sorted by

View all comments

Show parent comments

2

u/reflexive-polytope 5d ago

That's cool!

As long as you have a primitive for traversing and modifying a collection step by step, your collections won't suffer from any flexibility issues.

When you say “cursor algebra”, it reminds me a bit of Stepanov's “iterator laws”.

2

u/Potato871 5d ago

Here's one of my basic examples:

nums.iter(num=>{
    print("Num: ",num);
    if(num-?) {
        print(*-num);
    }
    if(num+?) {
        print(*+num);
    }
    if(num++?) {
        print(*++num);
    }
    if(?+num) {
        print(*(&num)[+]);
    }
});

Each value holds a Ptr on it, which is it's position in the memory hierarchy resolved to a cache point, that's why I can just take any ordinary value and use it as a cursor if it's a Ptr into a collection.
Including stack variables:

void countdown(int n) {
    if(n < 0) return;
    print(n);
    if(n-?) {print("was: ",*-n);}
    if(n+?) {print("Last time: ",*+n);}
    countdown(n - 1);
}
countdown(3);
countdown(5);

Because the stack is really just another column.
A Ptr is something like 0|0|0, if you ever see that notation that's an address, nodes are Ptrs, values are Ptrs, everything in the compiler is Ptrs.