A Common Development Platform for Static Source-Code Analysis of Generic Software Libraries
Zusammenfassung der Projektergebnisse
Generic programming is an umbrella term for all programming disciplines that are based on some variant of parameteric programming. Compared to object-oriented programming or other paradigms, only few source-code analyses exist and therefore only little tool support at source-code level. Particularly, it is necessary to develop each analysis anew for each generic programming language. This project introduces the idea of component-based mechanization, which allows defining language syntax, language semantics, and analyses in a uniform way: analyses are implemented in terms of (generic-programming) components and their combination, and are thus reusable across families and languages. The application of an analysis is at the same time safe: since components can enforce correctness of the combination they take part of, analyses can enforce their applicability by specifying their suitable component combinations. Lastly, both component combinations and the analyses to apply remain extensible, which is important for generic libraries, i.e., libraries developed for or with generic programming. For specifying the requirements on the architecture of a platform of components (for syntax, semantic, and analysis), the project defines the expression compatibility problem (ECP). ECP is formulated as an extension of the well-known Expression Problem (EP), which refers to a fundamental problem in the development of extensible software in object-oriented and functional programming languages. Yet, ECP goes beyond EP by including stricter requirements on modularity, soundness, and compatibility. The project introduces a specification language, γΦC0 , a new language definitional framework that allows specifying components, families, and clients (including client analyses) and solves the expression compatibility problem at the same time. Both the static and dynamic semantics are formally defined so that the language can serve as formal model for component-based mechanization. An embedding of γΦC0 in the general-purpose language Scala is worked out and available online: http://www.sts.tuhh.de/people/hossein/ecp.html. The component-based approach has been implemented in Scala and tested with a handful of research languages, a particular style of semantic formalism (“big step”), and a number of small foundational analyses and expression-level optimizations. The codebase in Scala along with the API is available online: http://www.sts.tuhh.de/˜hossein/compatibility and http://www.sts.tuhh.de/˜hossein/api.
Projektbezogene Publikationen (Auswahl)
- Functional Metaprogramming in C++ and Cross-Lingual Development with Haskell, Tech. report, Uni. Kansas, Oct 2011, Draft Proc. 23rd Symposium Implementation and Application of Functional Languages., ITTC-FY2012-TR-29952012-01
S. H. Haeri and S. Schupp
- Using Functional Languages to Facilitate C++ Metaprogramming, Proc. 8th ACM SIGPLAN Workshop Generic Programming, September 2012, pp. 33–44
S. H. Haeri, J. Hüser, and S. Schupp
- A New Operational Semantics for Distributed Lazy Evaluation, Technical Report TR2013-1, Institute for Software Systems, Hamburg University of Technology, April 2013
S. H. Haeri
- Reusable Components for Lightweight Mechanisation of Programming Languages, Proc. 12th International Conference on Software Composition, (W. Binder, E. Bodden, and W. Löwe, eds.), Lecture Notes in Computer Science, vol. 8088, Springer, June 2013, pp. 1–16
S. H. Haeri and S. Schupp
- Some Properties of Syntactic Compatibility/Incompatibility, Technical Report TR2013-2, Institute for Software Systems, Hamburg University of Technology, June 2013
S. H. Haeri
- Component-Based Mechanisation of Programming Languages in Embedded Settings, Ph.D. thesis, Institute for Software Systems, Hamburg University of Technology, Hamburg, Germany, December 2014
S. H. Haeri
- Distributed Lazy Evaluation: A Big-Step Mechanised Semantics, 22nd IEEE Euromicro International Conference on Parallel, Distributed, & Network-Based Processing, February 2014, pp. 751–755
S. H. Haeri and S. Schupp
(Siehe online unter https://doi.org/10.1109/PDP.2014.43)