Abstract
Fusion is a program transformation that combines adjacent computations, flattening structure and improving efficiency at the cost of clarity. Fission is the same transformation, in reverse: creating structure, ex nihilo. We explore the use of fission for program comprehension, that is, for reconstructing the design of a program from its implementation. We illustrate through rational reconstructions of the designs for three different C programs that count the words in a text file.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
References
Raymond, E.S. (ed.): The New Hacker’s Dictionary. MIT Press, Cambridge (1991)
Eastwood, A.: It’s a hard sell—and hard work too (software re-engineering). Computing Canada 18(22), 35 (1992)
Bird, R.S.: The promotion and accumulation strategies in transformational programming. ACM Trans. on Program. Lang. and Syst. 6(4), 487–504 (1984); Addendum in 7(3), 490–492 (1985)
Bird, R.S., Wadler, P.L.: An Introduction to Functional Programming. Prentice Hall, Englewood Cliffs (1988)
Meertens, L.: Paramorphisms. Formal Aspects of Comput. 4(5), 413–424 (1992)
Meijer, E., Fokkinga, M., Paterson, R.: Functional programming with bananas, lenses, envelopes and barbed wire. In: Hughes, J. (ed.) FPCA 1991. LNCS, vol. 523, pp. 124–144. Springer, Heidelberg (1991)
Swierstra, S.D., de Moor, O.: Virtual data structures. In: Möller, B., Schuman, S., Partsch, H. (eds.) Formal Program Development. LNCS, vol. 755, pp. 355–371. Springer, Heidelberg (1993)
Wadler, P.: Deforestation: Transforming programs to eliminate trees. Theor. Comput. Sci. 73, 231–248 (1990)
Gibbons, J.: Calculating functional programs. In: Blackhouse, R., Crole, R.L., Gibbons, J. (eds.) Algebraic and Coalgebraic Methods in the Mathematics of Program Construction. LNCS, vol. 2297, pp. 149–203. Springer, Heidelberg (2002)
Kernighan, B.W., Ritchie, D.M.: The C Programming Language. Prentice Hall, Englewood Cliffs (1988)
Weiser, M.: Program slicing. IEEE Trans. on Softw. Engin. 10(4), 352–357 (1984)
Villavicencio, G., Oliveira, J.N.: Reverse program calculation supported by code slicing. In: Proc. of 8th Working Conf. on Reverse Engineering, WCRE 2001, pp. 35–48. IEEE, Los Alamitos (2001)
Gibbons, J.: Origami programming. In: Gibbons, J., de Moor, O. (eds.) The Fun of Programming. Cornerstones in Computing, Palgrave, pp. 41–60 (2003)
Gibbons, J., Jones, G.: The under-appreciated unfold. In: Proc. of 3rd ACM SIGPLAN Int. Conf. on Functional Programming, ICFP 1988, pp. 273–279. ACM Press, New York (1998)
Nelson, M.L.: A survey of reverse engineering and program comprehension. Techn. Report cs.SE/0503068, arXiv.org (1996)
Linger, R.C., Mills, H.D., Witt, B.I.: Structured Programming: Theory and Practice. Addison-Wesley, Reading (1979)
Dromey, R.G.: How to Solve It by Computer. Prentice Hall, Englewood Cliffs (1982)
Knuth, D.E.: Literate programming. Computer J. 27(2), 97–111 (1984)
Deimel, L.E., Naveda, J.F.: Reading computer programs: Instructor’s guide and exercises. Techn. Report CMU/SEI-90-EM-3. Software Engineering Inst., Carnegie-Mellon University (1990)
Ward, M.P., Bennett, K.H.: Recursion removal/introduction by formal transformation: An aid to program development and program comprehension. Computer J. 42(8), 650–673 (1999)
Oliveira, J.N.: Bagatelle in C arranged for VDM SoLo. J. of Univ. Comput. Sci. 7(8), 754–781 (2001)
Augusteijn, L.: Sorting morphisms. In: Swierstra, S.D., Oliveira, J.N. (eds.) AFP 1998. LNCS, vol. 1608, pp. 1–27. Springer, Heidelberg (1999)
Gibbons, J.: Patterns in datatype-generic programming. In: Striegnitz, J., Davis, K. (eds.) Multiparadigm Programming 2003: Joint Proc. of 3rd Int. Wksh. on Multiparadigm Programming with Object-Oriented Languages, MPOOL 2003, and 1st Int. Wksh. on Declarative Programming in the Context of Object-Oriented Languages (PD-COOL 2003). NIC Series. John von Neumann Institute for Computing (NIC), vol. 27, pp. 277–289 (2003)
Gibbons, J.: Design patterns as higher-order datatype-generic programs (submitted for publication, 2006)
Johnson, R.: Documenting frameworks using patterns. In: Proc. of 7th Ann. Conf. on Object-Oriented Programming Systems, Languages and Applications, OOPSLA 1992, pp. 63–76. ACM Press, New York (1992)
Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading (1995)
Bobeff, G., Noyé, J.: Molding components using program specialization techniques. In: Bosch, J., Szyperski, C., Weck, W. (eds.) Proc. of 8th Int. Wksh. on Component-Oriented Programming, WCOP 2003 (2003)
Gallagher, K.B., Lyle, J.R.: Using program slicing in software maintenance. IEEE Trans. on Softw. Engin. 17(8), 751–761 (1991)
PURe research group: Program understanding and re-engineering: Calculi and applications (1999-2005), Web site: http://wiki.di.uminho.pt/wiki/bin/view/PURe/
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2006 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Gibbons, J. (2006). Fission for Program Comprehension. In: Uustalu, T. (eds) Mathematics of Program Construction. MPC 2006. Lecture Notes in Computer Science, vol 4014. Springer, Berlin, Heidelberg. https://doi.org/10.1007/11783596_12
Download citation
DOI: https://doi.org/10.1007/11783596_12
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-35631-8
Online ISBN: 978-3-540-35632-5
eBook Packages: Computer ScienceComputer Science (R0)