One thing that I did not see mentioned in this thread is," what is ILE?" Well my understanding is it is an Integrated Language Environment. That is you can write programs, procedures, and modules in any language supported by the platform. It allows you to tie routines together that otherwise may not be available to the language you are currently using. For instance I do not know C but I needed to communicate via TCP/IP to other systems. The ILE allowed me to use the TCP/IP functions written in C with in my language of choice, RPGIV.
I found that one software package we purchased already had a service program with the BASE64 module I needed to send images to a 3rd party Did not have to write it or understand what BASE64 was, just how to use the procedure. I have a bunch of string manipulation routines on my system that were written in C and I use them in my RPGIV programs.
Sure I could write all of those in RPGIV myself, but why reinvent the wheel. The ILE allows me to use what I find on the internet, (Midrange.com mostly), regardless of the language the developer choose to work with. Some languages are better for communication or string manipulation than others. It does not matter as with ILE can use them all in my RPGIV program.
Another bonus is local variables within the functions, procedures, and service programs. Have you ever copied code into your program to reuse what another programmer already wrote, only to find out your define counter variable, X is defined as 3s0 in your code and the copied code has the same variable name but as a long integer? Now you have to decide if you want to change your usage or the copied code usage of the variable. What a pain. Or worse, the same variable name and definition but two different usages and "why is my counter changing that value?"
I like the fact that I have service programs that hold the repetitive code so I don't have to re-code it all over the place. It allows me to concentrate on the business at hand and not worry about the details of a function that has been written and debugged already.
But if you do not document and index these service programs, functions, and procedures, who will know they exist or how to use them. That to me is the most important part of creating a true ILE system. (Also the hardest to keep up to date and get the programmers to do. :) )
ILE also introduces other advanced features such as activation groups. For the most part I use the default of QILE as the base activation group. I had one instance where a sub-procedure was not able to find a record in a file. This was before we had the SQL precompiler and used OPNQRYFILE to select a subset of records. However we had to chain back to the same file to read a record that was related but not within the subset of records. I knew the record was in the file, chaining by unique key, but kept getting record not found. Once I changed the sub-procedure to run in a new activation group, it did not pick up the shared open data path and started finding the related records. With out activation groups I would have had to create a logical file based on the same key as we already had, just so I could reference a different file in the sub-procedure.
ILE = Integrated Language Environment.
Director of Information Services