{'fraction_non_alphanumeric': 0.040156709108716944, 'fraction_numerical': 0.005876591576885406, 'mean_word_length': 5.308641975308642, '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}}
CS 4110 – Programming Languages and Logics Lecture #31: Featherweight Java Properties and Object Encodings

One way to model the features of an object-oriented languages is to encode it using standard type structure. This leads to so-called object encodings. A different (and arguably simpler) way is to model these features directly. This lecture considers a core calculus for Java developed by Igarashi, Pierce, and Wadler called Featherweight Java. Featherweight Java is small by design. It reduces Java to its essential features including classes, inheritance, constructors, fields, methods, and casts, and omits everything else. In particular, the language does not include interfaces, assignment, concurrency, overloading, exceptions, or the public, private, and protected modifiers. Because the language is so simple, its proof of type soundness is short. It is also easy to extend—indeed, in the original paper on Featherweight Java, the authors present an extension with parametric polymorphism (i.e., generics).