To name a few, Oberon has extensible types which enables object oriented programming (and makes discriminated unions superfluous). It supports modular programming. It also has so called open arrays which allows passing arrays of any length to a procedure.