Про типы. Я говорю про другую типизацию. Не про int или long, и даже не про int или char*.
Я в свою очередь имел в виду не типы. А проверку типов в языке, как таковую. Выше я не на встроенных intergral типах заостряюсь, а на самой истории, откуда это пошло. Типизация пошла-поехала из двух мест: а - от необходимости уже на уровне процессора указать с чем работает команда, с байтом, словом, двойным словом, итд. б - от маттеории типов.
Как выясняется, при очень внимательном и дотошном анализе - самые эффективные программы пишутся с подстановкой типов во время выполнения (уже имеются в виду типы ОО модели).
И дальше - страшное. C++ подстановку типов проверяет только в момент компиляции. Весьма ограниченно. В runtime эту работу язык на себя не берет вообще, если ты её не напишешь. Это общеизвестно и довольно очевидно из самой идеологии "ты не платишь за то что не юзаешь". Но см. выше про типы.
Статическая компиляция для машины и её скорости.
Динамика/runtime - для человека и общей гибкости системы, поскольку "гибкость" это runtme, это не статкомпиляция.
Как например, насчет того чтобы сделать сборный тип прямо во время выполнения программы? И не жестко указать, а по мере обстоятельств, может быть он будет зависеть от того что указал человек по ту сторону океана? А может присобачить нему метод?
И не надо думать что всё бесплатно. За все надо платить.
P.S.
На все остальное
может быть отвечу позже. А может и не быть. Пока что охуел от теорий "Нужно понимать, что в C++ многомерный язык программирования. " или "У голого C нет пространства типов, C -- двухмерный язык программирования."