If gates are functions and their inputs are like function inputs and composing gates is like function composition, then how is this different from a normal programming language ?
It's mostly systems programming research (IMO, at its best, given the poor state of the art nowadays), but at that intersection area with programming languages.