orient ed ▁languages ▁are ▁usually ▁accessed ▁by ▁a ▁reference ▁whose ▁static ▁target ▁type ▁( or ▁manifest ▁type ) ▁is ▁equal ▁to ▁either ▁the ▁object ' s ▁run - time ▁type ▁( its ▁lat ent ▁type ) ▁or ▁a ▁super type ▁there of . ▁This ▁is ▁conform ant ▁with ▁the ▁L isk ov ▁substitution ▁principle , ▁which ▁states ▁that ▁all ▁operations ▁performed ▁on ▁an ▁instance ▁of ▁a ▁given ▁type ▁can ▁also ▁be ▁performed ▁on ▁an ▁instance ▁of ▁a ▁sub type . ▁This ▁concept ▁is ▁also ▁known ▁as ▁sub sum ption ▁or ▁sub type ▁polym orphism . ▁In ▁some ▁languages ▁sub types ▁may ▁also ▁possess ▁cov ari ant ▁or ▁cont rav ari ant ▁return ▁types ▁and ▁argument ▁types ▁respectively . ▁ ▁C ertain ▁languages , ▁for ▁example ▁Clo jure , ▁Common ▁L isp , ▁or ▁C ython ▁are ▁dynamically ▁type - checked ▁by ▁default , ▁but ▁allow ▁programs ▁to ▁opt ▁into ▁static ▁type ▁checking ▁by ▁providing ▁optional ▁annotations . ▁One ▁reason ▁to ▁use ▁such ▁hints ▁would ▁be ▁to ▁optimize ▁the ▁performance ▁of ▁critical ▁sections ▁of ▁a ▁program . ▁This ▁is ▁formal ized ▁by ▁grad ual ▁typing . ▁The ▁programming ▁environment ▁Dr R ack et , ▁a ▁ped agog ic ▁environment ▁based ▁on ▁L isp , ▁and ▁a ▁prec ursor ▁of ▁the ▁language ▁R ack et ▁is ▁also ▁soft - ty ped . ▁ ▁Con vers ely , ▁as ▁of ▁version ▁ 4 . 0 , ▁the ▁C # ▁language ▁provides ▁a ▁way ▁to ▁indicate ▁that ▁a ▁variable ▁should ▁not ▁be ▁stat ically ▁type - checked