3 ms·
Looping and branching are conflated by design to eliminate logic from the template. That doesn't eliminate logic, it just makes it annoying and obtuse. You ca
by stevelosh 15y ago
Looping and branching are conflated by design to eliminate logic from the template.
That doesn't eliminate logic, it just makes it annoying and obtuse.
You can still branch in mustache templates, and you can still loop. No particular kind of logic has been eliminated. But now you need to know what a particular item happens to be in order to know what the magic branch/loop operator is going to do.
About the only thing it prevents is saying "show this if X is truthy", but only prevents it when X is a list! Removing the ability to do something for some arbitrary objects doesn't make the language clean and logic-free, it makes it annoying and complicated.
- bascule 15y agoExcept there's no logic in the language itself, from the perspective of Mustache what you're doing is purely declarative. Adding an explicit "if" operator does introduce logic into the language, and may very well make the language sufficiently expressive to be Turing complete.
- true_religion 15y agoIt wouldn't make it turning complete because while the template could read the hypothetical infinite tape, and write infinitely to another tape---it can't write what its written so its prohibited from being turing complete. It's basically a finite state machine. Now you can do a whole lot with a FSM---and lo, some people will claim that our current brand of machines are only realistically as powerful as FSMs because of the lack of infinite memory.
- bascule 15y agoThe proposed changes, particularly tail recursion, an if operator, and a zip operator in effect give you a functional language with immutable state. While you can't "write" to the Turing tape as a side effect as the language is immutable, you can create a new "tape" from previous states which is a modified version of the old tape.
- riffraff 15y agoI don't understand the idea that mustache is logicless. Why is something that shows a message "only if person has a truthy value": {{#person}} Hi {{name}}! {{/person}} different from an `if` (except it becomes a `for` depending on the value of the argument)? As long as you use values consistently it is never the case that a single person object referred by a variable "person" transforms into a set of people.