|
|
|
|
|
by yjftsjthsd-h
2208 days ago
|
|
> Looking at the code, I don't see any advantage of using imperative language here. All the conditions used there are already available and don't change during the execution of that code. So the conditionals would be nearly identical in functional language. Yes, except that I can read this and I can't read nix. That's probably based on background, but more people are familiar with imperative than functional languages. > Nix advantage here would be that is lazily evaluated, so there would be an additional benefit that only conditionals that are used are evaluated. Agreed, although that's unlikely to be unique to nix? > Functional benefit of Nix would be that Nix would know that a package doesn't need to be rebuilt if no inputs changed. As would anything that can compare hashes. Or heck, make(1) can do as much. |
|
Of course, language like Python is Turing Complete so you could implement the same functionality . You could also add functions that behave and perform operations lazily.
But you're missing the point though, those are properties that Nix provides natively that are tuned to what is required for this domain. Because the only side effect in nix is a derivation, and because language is lazily evaluated it is made for this purpose.
If you would use for example Python, you would need to write wrappers that would provide that behavior and it no longer would be Python, it would be some kind of DSL written in Python at that point and the risk then would be that it would be very easy to introduce iterative code that's not functional and not lazily evaluated (kind of like it happens with Chef recipes).
The Nix Language actually is not the problem here, the language is fairly simple, the biggest difficulty is actually nixpkgs which is huge and poorly documented. You often have to look at its code to understand what's going on. If it was written in Python you would have the same issues.
There is one thing that Nix Language could do better, a lot of people wish it was a typed language, because if it was typed it would be much easier to find a definitions, and wouldn't require as much of greping the code. But python again wouldn't help here.