{'fraction_non_alphanumeric': 0.017318159327065808, 'fraction_numerical': 0.0, 'mean_word_length': 4.964601769911504, '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}}
Types for Systems Design : A Position Paper

There is a enormous gulf between the design principles governing a software system and its implementation. Designs are expressed in many forms, from blackboard drawings, informal analogoies, box-and-pointer diagrams, state transition systems, and, perhaps most importantly, an unstated understanding among a team of developers. The role of the design description is normative: it determines not only what should be done, but also what should not be done. Even if an initial implementation coheres well with its design, over time it inevitably diverges from it. The code becomes its own design specification, and the design loses its normative role and becomes a mere description of the code. The result is a morass for both the developer and the end user. For the developers it becomes increasingly difficult to understand what is going on with the program, and increasingly risky to modify and extend it. For the users the program becomes increasingly idiosyncratic, because there is no clear model of how it is “supposed” to behave. To avoid this it is necessary that the design live with the code in a form that must evolve with the code and which permits enforcing compliance of the code base with the design. In principle a design description should include everything from the end-user conceptual model to the specification of the behavior of individual program components and their interaction with one another. But this is not just a matter of documentation strings! The design description must have computational content in the sense that it determines verifiable properties of the execution behavior of the executable code. Most importantly, the verification must be performed whenever the code is modified. Only then can we be certain that designs make computational sense and that computations conform to a sensible design. Research on type systems addresses the problem of how to integrate system descriptions with system implementations in such a way that coher-