Getting nice, clean layers is a tricky business.
# of-end-user-programming
w
Getting nice, clean layers is a tricky business.
💯 1
f
I believe that creating the "right" layers of abstraction is almost impossible on the first try. Instead, abstractions should be created and refined iteratively. A key point to support this is to make updating existing uses of an old abstraction easy and safe.
👍 2
w
What if we had a good way handle / work with / model this whole process: going from fundamentally flawed drafts to refined abstractions?
f
That'd be huge! In many current systems, it's either "stay with flawed drafts" (e.g. c++'s backwards compatibility) or "refined abstractions that break everything" (e.g. Python 2 / 3). I'm daydreaming of a system that is stable as it's first priority (think pinned dependencies) but allows to easily update (e.g. using code transformation tools). Rust's editions and
cargo fix
are interesting too (and have worked perfectly for me until now). Program representations have a big impact on how effective code transformation / stability guarantees can be. So yeah, our "text files in folders" abstraction for representing programs might have to be changed first. I'm currently thinking of a graph-like / hash-based program representation. Using such a representation, transforming programs based on their semantics could be much easier and a lot of "breaking changes" (e.g. renaming a function, changing the order of parameters, ...) wouldn't be "breaking" anymore and therefore safe to perform frequently.