Programming languages provide an interface for developing increasingly complex models in science. However, as computer models grow more complex, it is increasingly difficult to deliver on core requirements such as verifiability, maintainability, understandability, validity, and portability.
Managing software complexity more effectively has been a focus of programming language research for many years, yet we see little adoption of new approaches in the natural sciences. Instead we see scientists continually striving to evolve their software to more complex models, or bigger data sets or novel execution architectures.
At the University of Cambridge we are running an multidisciplinary project involving computer scientists and natural scientists to understand how state-of-the-art programming language research can be leveraged for more effective programming in the sciences.
Our recent position paper: A computational science agenda for programming language research (to appear at the International Conference on Computational Science, ICCS'14) outlines our research hypothesis and possible approaches:
CamFort is a tool under development providing:
- analyses for gathering data on the programming patterns common in scientific models;
- automatic refactoring for improving the code quality of existing models.
The first part provides data to inform future language designs to better support the scientific process and to understand the limits of best-practice automatic program analysis.
The second part automatically refactors deprecated or dangerous programming patterns, with the goal of helping to meet the core quality requirements outlined above, such as maintainability. For example, our tool eliminates EQUIVALENCE and COMMON blocks. The tool also helps to expose any programming bugs arising from bad programming practices.
Try CamFort online
You can now try CamFort out on your own code-base via our CamFort live interface.
We are working on a number of extension to the functional language Haskell for better support of computational science programming.
This is currently in an early state. Included is an automatic discretising memoizer for recursive, finite-functions (see array-memoize github project). This allows programmers to write simple recursive definitions of real-valued functions (in the style of recurrence relations) which are then compiled to high-performance, discrete array implementations.
Get in touch / collaborate
We are seeking collaborations with computational scientists and computer scientists interested in improving programming in science.
Please get in touch if you have any comments or would like to collaborate: