I map D&D alignments to type systems.
|Lawful (static)||Neutral (none)||Chaotic (dynamic)|
|Good (strong)||C, Java, the ML/Haskell family: every object has a type, and it must be correct at compile time||Lisp: every object has a type, but variables don’t have static compile-time types. All the checking happens at runtime. The type cannot change or be implicitly coerced.|
|Neutral (none)||No types!|
|Strongly typed||Operations strictly require conforming types|
|Weakly typed||Operations may coerce (or cast) types from one to another|
|Statically typed||Types are checked by the compiler|
|Dynamically typed||Types are checked by the runtime|
P.S. I’ve tried several times to classify Perl5 and Perl6 on this list (in v6, everything is an object). The difficulty is that things are often either scalars, arrays, hashes, or references to one of those; however, there is a lot of implicit conversion. They might fit the Static/Weak (Lawful Evil) axis, but I’m not sure: the compiler may or may not enforce the types of operations (though the runtime does, in a way).