First off, the Stack question type is really great! It's been useful in courses we're teaching / developing.
I also would also be interested in the use of extra functions for similar reasons -- I spent a considerable amount of time trying to figure out how to get students to be able to enter binary values (or other bases).
For example, I have a question that covers addition on two's-complement fixed with numbers. The only solution I came up with was to have students enter what I call "deci-binary" numbers -- i.e. if I have an intended value of e.g. "9" in binary form, I convert "9" to the (decimal) value "1001" using
GetBit(x,bit) := mod(floor(x/2^bit),2)*(10^bit);
BinToDeciBin(x) := sum(GetBit(x,i), i, 0, 15);
This means that students can enter "binary" and get the correct answer, but there's no similar way to have them e.g enter hexadecimal values.
Similarly, the lack of string functions means that I wind up having 4 or 5 variants of a question for different bit-width words because I can't easily splice together a string like vfmt: "~5,'0,B" that I would use for printing out decimal values in base-2. I.e. I would like to do
vfmt: sconcat("~", bits, "'0,B");
Based on a comment in the stack documentation, I'm assuming these aren't available because of some security problem that I have yet to understand.
We had someone develop Qengine ( https://academic.systems/qengine ) which uses a variant of the Opaque / Stack question protocol, but I've been using Stack so much and like the feedback it provides that I keep trying to figure out how to use that rather than adopt the new question type.