4 ms·
The UNIX philosophy’s logical extreme is the NAND gate. Does one thing, does it well, and can be composed into arbitrary applications.
by jl6 3y ago
The UNIX philosophy’s logical extreme is the NAND gate. Does one thing, does it well, and can be composed into arbitrary applications.
- Drakim 3y agoOnly if the NAND gate is expressed as a file
- Waterluvian 3y agoOkay… please… someone implement ‘nand’ and write a script that does something simple using only it.
- deleted 3y ago[deleted]
- jewel 3y agoSure! Here's an implementation of nand and a 2-bit adder that uses it: https://github.com/jewel/nand https://github.com/jewel/nand
- Waterluvian 3y agoHah this is awesome! I’m going to poke around and see how much it would take to stretch this into a basic Turing machine emulator.
- hmcq6 3y agohttps://nandgame.com/ https://nandgame.com/
- thaumasiotes 3y agoGreat find. People who like this might also like http://incredible.pm/ http://incredible.pm/ . I don't know how I feel about the message "This is optimal!" displaying when you use one NAND gate to build an inverter at level 2. Level 1 forces you to build an NAND gate out of (1) an AND gate, plus (2) an inverter. It feels like it'd be more optimal to just reuse that inverter. (And then level 3 is an AND gate, the other primitive† you started with...) † Technically, you start with two primitives, implementing f(a, b) = a ∧ b and g(a,b) = ¬(b ⟶ a). You also get the ability to provide 0 and 1 as fixed inputs, thus ¬a ≡ g(a,1). What you lose after implementing the NAND gate is the ability to provide a fixed 1 input - instead, you are informed that you assume all gates automatically draw from this. Worst of all possible worlds.
- porridgeandrice 3y agohttps://nand2tetris.org https://nand2tetris.org and my implementation of the projects: https://github.com/porridgewithraisins/nand2tetris https://github.com/porridgewithraisins/nand2tetris
- deleted 3y ago[deleted]
- Someone 3y agoOne thing? It does a logical and and then negates the result. The shell doesn’t really let users compose commands this way, but alias NAND="AND | NEG" Also, a NAND command would need to have 2 stdin’s.
- deleted 3y ago[deleted]
- thaumasiotes 3y ago> One thing? It does a logical and and then negates the result. Sorry? Take a second to think about what you're saying. In what conceivable sense is "doing a logical and" one thing while "doing a logical nand" isn't? You can equally claim that x & y is really just (x ↑ y) ↑ (x ↑ y)
- Skgqie1 3y agoNot the person you asked, but the initial point was taking that idea to the extreme. The concept of "one thing" in the NAND case is more extreme (in terms of granularity). No need to be sorry, it's ok.
- thaumasiotes 3y agoRight, the person I asked is claiming that NAND is two things. You appear to have responded as if you disagree with my comment while not actually disagreeing with any part of it. What did you think I meant by this question? >> In what conceivable sense is "doing a logical and" one thing while "doing a logical nand" isn't?
- Skgqie1 3y agoSorry, I will try to make it more clear. NAND is more complex than AND, in the sense that it is more expressive than AND (having functional completeness which AND does not). Similarly, it can be built from other less complex operators (AND and NAND). If you're taking "One thing" to the extreme, in terms of the granularity or complexity of that "one thing", NAND is not as granular or simple as AND - and therefore isn't taking it to as far "to the extreme".