I see we hit a hot button here.
Thanks. That is exactly the info we were looking for.
I prefer to write code one time and call it when I need it.
I agree with this without question - to the point that we are willing to sacrifice performance to a considerable degree to attain it.
Here is more detail for you:
6-7 years ago we were unable to use global function calls in paging screens because of performance. That is not the case now (and we were using PRO-ISAM then and are using SQL Server now). I know P4 is not caching functions but it must have been tweaked enough to improve performance noticeably. What we do which works quite well, especially in paging screens, is to have a memory file which contains all the variables we need for the screen, but have them built from a global function. If the memory record does not exist, the global function is called which loads the memory variables. If it does, the variables we need are available by virtue of the memory file read. This reduces the number of times global functions are called, and once the variables are loaded, improves overall screen performance. The only issue you have is the first presentation of the paging data is not as fast as we would like (but not bad). After that, it is all driven from memory so it is lightening fast. Where this is applicable and appropriate, it works well.
We have converted all our old SL non global functions into VIP global functions. We are happy with performance but have not tested with more than 50 users.
Regarding cached functions: Last I heard, this was complete and implemented on the mainframe but nowhere else.