Peter Almazov писал(а):
Comdiv (или еще кто-нибудь), если не затруднит, приведите, пож, наглядный пример, когда динамическая типизация имеет ощутимое преимущество перед статикой.
У меня есть пример. Он связан не со schema-free (это блажь и goto-шничество в сфере данных, я так считаю).
А с той возможностью динамической сборки класса, которой пока нет в статически типизированных языках.
Для скриптового языка естественная возможность, когда какой-то третий компонент (позже подгрузившийся скрипт, например), добавляет какое-то поле к уже существующему модулю/структуре. Например, новый метод.
Это позволяет делать такую декомпозицию, которая невозможна в стандартных class-oriented-языках - да и в Go с его утиной типизацией тоже. Когда мне нужно, как бы, многомерно декомпоновать функциональность (по измерению "тип объекта" и по измерению "тип функциональности", и ещё по какому-нибудь измерению типа "примесь" или "аспект"). Если это декомпонировать, вводя композиции классических объектов, то происходит взрыв количества типов и громоздкости.
Конкретный пример: есть промышленный объект и SCADA. Есть иерархическая модель объекта (да хоть представьте её как иерархию RECORD/struct).
Базовые модули содержат описания всех разновидностей узлов объекта, структуру их компоновки.
А потом возникает задача на других уровнях дополнять эту структуру объекта - полями, методами. Например, тегами ввода-вывода и операциями рабочего цикла. Полями графического состояния и операциями визуализации. Модуль автоматической прокладки маршрута должен добавить свои поля и методы, необходимые для графовых алгоритмов.
Реально обычно в SCADA-системах всё это уже делается не на языковом уровне, а на уровне некоей модели конфигурационных данных и интерпретаторов на них.
Вот здесь я рассказывал и показывал пример кода, где такое вот динамически склеиваемое ООП у меня:
https://youtu.be/v71zsKrF60Y?t=872Про это же, в принципе, такое направление, как аспектно-ориентированное программирование.