Gary Kumfert Center for Applied Scientific Computing phone: 925-424-2580 Lawrence Livermore National Laboratory fax: 925-424-2477 P.O. Box 808, L-661 Livermore, CA 94551-0808 Divorcing Language Dependencies from a Scientific Software Library Scott Kohn, *Gary Kumfert*, Jeff Painter, Cal Ribbens Computational scientists developing large simulation codes often face difficulties due to language incompatibilities among various software libraries. Scientific software libraries are written in a variety of programming languages, including Fortran 77 and 90, C, C++, or a scripting language such as Python. Language differences often force software developers to generate mediating "glue" code by hand. In the worst case, computational scientists may need to re-write a particular library from scratch or not use it at all. For maximum portability across different languages, library developers sometimes implement their software in C; however, this approach either ignores advanced software techniques such as object-oriented development or forces library developers to generate and maintain low-level object-oriented support code by hand. Babel addresses the language interoperability problem using Interface Definition Language (IDL) techniques. An IDL is a special language used to describe the calling interface (but not the implementation) of a particular software library. IDL tools use this interface description to generate "glue code" that allows the software library to be called from any supported language. IDL approaches are common in industry component architectures such as CORBA or COM. However, these IDLs are primarily targeted for business applications. We have designed a Scientific Interface Definition Language (SIDL) that addresses the particular needs of parallel scientific computing. SIDL supports complex numbers and dynamic multi-dimensional arrays as well as parallelization attributes and communication directives that are required for general parallel distributed data structures. SIDL also provides other features that are generally useful but not necessarily related to scientific computing, such as an object-oriented inheritance model similar to Java, name space management, and interface versioning.