Limiting API Entry Points in Favor of Exchanging Strings

There are some conveniences I think people might want to define--even just in their own files, e.g.:

#define rebFunction(...)  rebValue("function", __VA_ARGS__)

Value* f1 = rebFunction("[x y] [if x > y [return x] return y]"); 

This is 6 characters briefer than having to write it out the long way:

Value* f2 = rebValue("function [x y] [if x > y [return x] return y]");

(Not a huge savings, but how much you'd care really depends how many times you're calling it.)

I've previously had a convention about their name hinted they weren't actually part of the API:

#define rebFunctionX(...)  rebValue("function", __VA_ARGS__)

Value* f1 = rebFunctionX("[x y] [if x > y [return x] return y]"); 

Maybe that's helpful, maybe it isn't. Maybe rebxFunction() is better. The idea here is that you don't want to get in trouble by putting things in the API's "namespace" that may eventually become an API itself. But also, the behavior of APIs is supposed to not change based on the definition of words...and here we're dealing with something that would change if the meaning of "function" changed.

:thinking:


In any case... I chose this particular example to point out a contention in naming with the implemented-with-a-CFunction* rebFunction() API entry point.

So perhaps that should be called rebNative() or rebNativeFunction() instead? (Probably just rebNative() would be fine.)