Надо для начала понять критерии, на которые опираемся. Я как-то рассказывал, что после того, как начал изучать тему формальной верификации или доказательства программ, стал немного по-другому смотреть на многие вещи в языках программирования: начал обдумывать это с той точки зрения, а возможна ли формальная верификация программ, которые используют эту фичу. С точки зрения этого критерия многие фичи языков программирования являются плохими, так как не понятно, как возможно это верифицировать, соответственно, это делает верификацию реальных программ, где хотя бы раз встретилась такая фича практически невозможной, то есть можно проверить остальной код, но все вместе на 100% доказать нельзя. И по данному критерию отсеивается очень большое количество остроумных фич, которые кто-то придумал для какого-то языка, и где-то кем-то для чего-то это даже используется. Можно, конечно, сказать, что мало кто формально доказывает программы. Но, как мне кажется, доказываемость и понимаемость программ программистом коррелируют. То есть делая возможным доказательство, мы тем самым и упрощаем программу для программиста, соответственно, будет меньше ошибок и так далее.