Dynamic arrays

Support for dynamic arrays differs between I4GL and Genero BDL.

Both IBM® Informix® 4GL (I4GL) and Genero Business Development Language (BDL) implement static arrays with a fixed size. Static arrays cannot be extended:
DEFINE arr ARRAY[100] OF RECORD LIKE customer.*
I4GL introduced dynamic arrays in version 7.32. Unlike Genero BDL, I4GL requires explicitly to associate memory storage with a dynamic array by using the ALLOCATE ARRAY statement, and memory must be freed with DEALLOCATE ARRAY. I4GL dynamic arrays can be resized with the RESIZE ARRAY statement. I4GL dynamic arrays cannot be used in a interactive instructions such as DISPLAY ARRAY.
DEFINE arr DYNAMIC ARRAY OF RECORD LIKE customer.*
ALLOCATE ARRAY arr[10]
RESIZE ARRAY arr[100]
LET arr[50].cust_name = "Smith"
DEALLOCATE ARRAY arr
Genero BDL supports dynamic arrays in a slightly different way than I4GL. There are no allocation, resizing, or deallocation instructions, because the memory for element storage is automatically allocated when needed. Furthermore, you can use dynamic arrays with interactive instructions, making a DISPLAY ARRAY or INPUT ARRAY unlimited.
DEFINE arr DYNAMIC ARRAY OF RECORD LIKE customer.*
LET arr[50].cust_name = "Smith"
DISPLAY ARRAY arr TO sr.*

In Genero BDL, the main difference between static arrays and dynamic arrays is the memory usage; when you use dynamic arrays, elements are allocated on demand. With static arrays, memory is allocated for the complete array when the variable is created.

Important: The semantics of dynamic arrays is very similar to static arrays, but there are some small differences. Keep in mind that the runtime system automatically allocates a new element for a dynamic array when needed. For example, when a DISPLAY arr[100].* is executed with a dynamic array, the element at index 100 is automatically created if does not exist.