{'fraction_non_alphanumeric': 0.020016012810248198, 'fraction_numerical': 0.0, 'mean_word_length': 6.183908045977011, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
MODULARIZING SCIENTIFIC LIBRARIES WITH ASPECT-ORIENTED AND GENERATIVE PROGRAMMING TECHNIQUES

Scientific computing libraries represent complex software that are often difficult to understand, evolve, and maintain. As systems become larger and more complex with additional requirements, they are subject to decay over a period of time, making it increasingly difficult to address changing stakeholder requirements. New approaches for software engineering and programming language design, such as aspect-oriented software development and generative programming, have been investigated recently as effective techniques for improving modularization of software. In particular, aspects have the potential to interact with many different kinds of language constructs in order to modularize crosscutting concerns. This paper presents an analysis of Blitz++, which is a well-known C++ class library for scientific computing. The analysis demonstrates through various examples how aspectoriented and generative programming techniques can be applied in modularizing crosscutting concerns that have been identified in Blitz++. This improves software maintainability by reducing code size and de-coupling crosscutting concerns to enable easier change evolution.