|ePolyglot: Examination and development of multilanguage programming using Eiffel, Python, and Haskell|
I feel that "polyglot programming" can offer a great deal to the software developer, allowing them to use the right tool for the job rather than forcing them to spread a single language across an entire application domain. Furthermore, tools exist for each of my candidate languages to call C, the lowest-common-denominator system programming language. Through these tools and an intermediate C interface, it should be possible for any of the four languages to call any other, leveraging the strengths of each against each other.
However, that's not the end of the story. For developers to actually do this, and do it in practice rather than as an exercise, we have to go somewhat further than a simple interface to C. The ePolyglot project, the subject of this independent study, must attempt to do the following:
Identify the free tools necessary to develop multilingual software on a Linux system.
Identify and refine the interfaces between languages--not just between the candidate languages and C, but between each candidate language if possible.
Develop tools to automatically create interfaces between the languages as appropriate. These will leverage existing tools to the maximum extent possible--for example, a tool to create an interface so that a Python program could use an Eiffel class should examine the Eiffel class, automatically create a Cecil file for accessing that class from C, use the SmallEiffel compiler to create a C header file to access those functions, and use SWIG to create a Python class for using the exported C functions. Ideally, the tool will go a touch further to simplify use of the class, but that possibility will be explored after the basic functionality is provided. Because of the text-based nature of these tools, they will probably be developed in Python.
Finally, develop a sample application using all four languages at once. The sample application here is a "toy" application, problem number 4a in the Software Engineering Institute's "Personal Software Process" program: read a series of paired numbers from a file, and calculate the basic Beta-0 and Beta-1 linear regression parameters for the two sets. Although a simple problem, it works well and leverages each language's strengths (although Eiffel's "large scale construction" features will not be taken full advantage of).