206 karma · joined August 22, 2016
What I wanted was to work at a coarser package level. For example if you have the modules `foo.a`, `foo.b`, `bar.a`, and `bar.b`, I'd like a rule that `bar` can import from `foo` but not vice versa, without having to list or care about the submodules.
Is that something you'd want to support?
I've usually seen "repeatable builds" used for that.
I was also looking into it to turn normal python functions into some kind of constraints. But as you point out in your article it cannot really work through python imperative statements like conditions and loops, so you either need to find a way to cover all code paths, or only use a subset of Python (like Z3 does to some degree I believe). I still need to try it out further.
For your proof assistant it seems you could indeed use it if you limit yourself to Python expressions. Interesting stuff!
It also overloads other methods to provide kind of symbolic objects.
You indeed need some kind of nix-aware runner (e.g. with a persistent /nix) if you want both the flexibility and performance...
You then want to extend that to the other main parts like the motor or the controllers, so you're not left with a piece of junk when one component fails. Just like for normal bikes.
But with the myriad of fetch* functions maybe it only applies to some.
I'm sure there are languages which do this, I seem to recall seeing it in Mercury
There are different ways to enable it on unmodified applications, e.g. via a wrapper or using eBPF.