Раз вспомнили свифт, давайте поговорим про его аспекты, которые откровенно разочаровывают. Без порядка и уровней значимости.
Первое, что приходит в голову, из моего недавнего: key paths не работают со статическими полями.
В свифте есть dynamicMemberLookup, который позволяет строить интересные вещи вокруг lookup pattern: семантические ресурсы на манер android.R; структурированные API; иерархические системы настроек и вообще любой DSL, где пригодилась бы "умная" точка.
Вот только из-за того, что нельзя построить KeyPath на статическое поле или подтип, этот тип T на картинке выше оказывается зачастую изуродован бессмысленными пропертями. А иные интересные вещи и вовсе сделать невозможно
Вообще, на самом деле, кажется что все эти кипасы и прочие попытки сделать first class properties вообще не нужны, и лучше попытаться устранить ложную дихотомию property vs method. Но об этом как-нибудь в другой раз