Bob Smith, an IBMer and developer of LE/370, talked about the organization of his product. LE/370 is the new consolidated runtime package intended for use in all IBM's high-level languages. Already LE/370 is supported by new releases of COBOL and C, and more languages are coming. Soon there will be only one runtime library to worry about (an LE/370 equivalent is being integrated into the AS/400 operating system).
LE/370 is split into a common kernel and language specific routines. An advantage to this organization is that each language enjoys some isolation, and the runtime library can be tailored to each supported language. The major disadvantage is that there is considerable duplication of code, and code sharing opportunities for the LE/370 architects are limited.
IBM has stated many times that all future functional extensions to languages will be through new "callable services" rather than to changes in the languages themselves. This will allow systems to be more portable between platforms.
Each LE/370 service provides a 96-bit feedback area as a return code. By inspecting this feedback area, you can determine the specific error that occurred (if any), and the component id of the service you called. This feedback definition is uniform across languages and platforms.
You provide a feedback area each time you call an LE/370 service. If you don't provide a feedback area and an error occurs, then the default action is to call a default condition handler. This condition handler behaves similarly on all SAA platforms, i.e. it resumes execution if the error was of low severity, and it terminates execution with an appropriate nastygram if the error is high severity.
LE/370 implements common dope vectors across all languages. This means, for example, that character strings can be passed between programs written in different languages. This is a nontrivial deal; all the languages represent character strings differently. In PL/I, a character string is a halfword length followed by a variable-length byte string. In COBOL, you can only pass a fixed-length string. In C, you can only pass variable-length strings delimited by a single byte containing X'00'. None of these languages formerly talked to the other very well, but the new compilers in concert with LE/370 make this kind of subroutine design possible.
One problem not solved by LE/370 is the "floating-point dichotomy". There are two floating-point standards in place in the IBM world, the ubiquitous and well-established IEEE floating-point standard, and the S/370 standard. They are not compatible, and LE/370 doesn't address this much.