TLDR; do you know of any general purpose languages that can also compile a function to some representation of AND/OR gates (or NAND gates, or whatever)?

Yes, a A LOT of additional info is needed, like defining how input/output works at the circuit level, and I am interested in how those would be specified. I’m not interested in printing an actual circuit, just the boolean-logic level. And I’m mostly asking because I feel like most compilers can’t generate a clean/mathematical representation from their AST. There’s hard-coded optimizations, and then there’s hard-coded mappings from the IR to assembly, but at no point (AFAIK) is the code turned into a algebraic/logical system where something like De Morgan’s Law can be applied. And that seems really sad to me.

So you could say my real question is: what compilers have a strong logical/algebraic internal representation of their own AST?

Maybe something like Haskell or Prolog do this. The Wolfram Language almost certainly does but it’s closed source.

  • chaotic_disorganizer@feddit.de
    link
    fedilink
    arrow-up
    0
    ·
    11 months ago

    You will need a hardware description language (HDL). Verilog and VHDL are two very established ones but they are tricky. A newcomer is Bluespec, which is now open source so if you wanna go down that rabbit hole, I’d recommend this one.

    • jeffhykin@lemm.eeOP
      link
      fedilink
      arrow-up
      0
      ·
      edit-2
      11 months ago

      Sorry, I meant a general language rather than one that is described as a “hardware description language”. I went ahead and edited the post to be more clear about that.

      Thanks for the info though as others might still be interested in it!

  • kakes@sh.itjust.works
    link
    fedilink
    arrow-up
    0
    ·
    11 months ago

    Another problem I see is that for some machine instructions, the boolean output would be absolutely massive (not to mention redundant). Take something like a fetch from RAM for example - which happens at least once on every machine instruction. The binary description would be huge, especially if you include every “false” check.

    If you haven’t seen it, I highly recommend Ben Eater’s Breadboard Computer series. His videos take you from logic gates up to a simple functioning computer.

    If you could create/find a C compiler for this simple-as-possible computer, then in theory you could use these videos to get the full boolean logic of each instruction. Not something I would do, but I think that would be the easiest way to do it.

    • jeffhykin@lemm.eeOP
      link
      fedilink
      arrow-up
      0
      ·
      11 months ago

      This is a really good point. If a complicated pure function is straightforward-ly converted into a boolean expression; at some point the the best way to simplify it would be making a Turing machine INSIDE the expression itself.

      I was mostly thinking of small scale functions or sections of really hot/real-time code. Maybe using it for analysis for potential new/helpful instructions for an assembly language or as a foundation for highly advanced bit-level optimizations like the inverse square root hack for Quake (but automated and generic).

      I’ll check out that link! In my undergrad one of the classes had us make our own machine language starting from logic gates, muxers, building registers, memory, adders, ALU’s, etc all the way up to a our own custom assembly language. It was probably the most helpful class in my entire undergraduate.