DSL and GIO may be good enough, but in a perfect world we compile parts of our program into SPIR-V. Those parts would be the lambdas in GFunctions and all other code they use.
I am not sure if that is feasible, macro annotations will definitely help. Some features will need to be left out and throw errors.