Мне влом писать много, так что объяснения в следующий раз. Может быть. Сейчас просто двумя абзацами. (Не думаю, что кто-то поймёт, но это не важно.)
Строгая типизация - она для записи решённой задачи, не строгая (которую называют динамической, но лучше бы называть её контекстной) - она для поиска решения.
Цена строгой типизации оправдывается для познанных задач предотвращением мелких ошибок. Но чем меньше мы понимаем в решении, тем больше она прекращает быть защитой и становится веригами, цементируя ошибочные предпосылки. Впрочем, это я уже упоминал.
То есть, где-то между крайними точками экономия ресурсов становится ниже потерь.
Интересно, что причина нечёткости лежит не в нашем несовершенстве и слабых аналитических способностях, а в самой природе систем вокруг создаваемого решения, требующих переосмысления элементов данных в зависимости от источника или целей использования.
Строгая типизация - она для записи решённой задачи, не строгая (которую называют динамической, но лучше бы называть её контекстной) - она для поиска решения.
Цена строгой типизации оправдывается для познанных задач предотвращением мелких ошибок. Но чем меньше мы понимаем в решении, тем больше она прекращает быть защитой и становится веригами, цементируя ошибочные предпосылки. Впрочем, это я уже упоминал.
То есть, где-то между крайними точками экономия ресурсов становится ниже потерь.
Интересно, что причина нечёткости лежит не в нашем несовершенстве и слабых аналитических способностях, а в самой природе систем вокруг создаваемого решения, требующих переосмысления элементов данных в зависимости от источника или целей использования.
no subject
Date: 2013-06-29 12:10 am (UTC)no subject
Date: 2013-06-29 12:11 am (UTC)no subject
Date: 2013-06-29 04:58 am (UTC)Так что imho засилье динамической типизации в скриптинге связано в основном с "простотой в реализации", да экспоненциальным ростом производительности железа. Щас, кстати, imho обратный процесс пошел - по крайней мере Go мне уже рекламировали как "питон, только статически типизированный и быстрый". Возможно потому, что процессоры перестали убыстряться, а всякое распараллеливание с типизацией проще.
Что любопытно - совершенно не популярны "смешанные" языки типа cecil - где типизация есть, но опциональна (стирание всей информации о типах семантику программы не меняет)
no subject
Date: 2013-06-29 05:26 am (UTC)Ещё полиморфизм. Скажем, я не понимаю, как можно реализовать тот же grep, когда результат работы программы - поток объектов - a' list.
Собственно, попробуйте сделать sed который будет заменять поле 25:int на поле 88:int в произвольном выводе любой команды. Но со статической типизацией.
Т.е. к вам на вход этого статически типизированного sed'а может придти
float * int * float list или string * float list или просто int list.
Соответственно, если вы сидите на статической типизации, вам придётся задавать структуру данных, передаваемых на вход grep или sed.
no subject
Date: 2013-06-29 05:47 am (UTC)no subject
Date: 2013-06-29 05:48 am (UTC)no subject
Date: 2013-06-29 05:49 am (UTC)no subject
Date: 2013-06-29 06:52 am (UTC)Но опять же - типизация куда более простой способ поднятия перформанса, чем распараллеливание - потому с нее начать логичнее.
no subject
Date: 2013-06-29 06:54 am (UTC)Конкретно для грепа нужно иметь сравнение на равенство как минимум.
Eq => ...
Тот же Haskell это сам скорее всего выведет.
no subject
Date: 2013-06-29 07:20 am (UTC)no subject
Date: 2013-06-29 08:05 am (UTC)no subject
Date: 2013-06-29 08:16 am (UTC)Некоторые в базу данных строку таблицы пишут как текстовую строку через запятые, а потом парсят.
no subject
Date: 2013-06-29 08:17 am (UTC)no subject
Date: 2013-06-29 08:31 am (UTC)Это определяется только по ощущениям и теоретическим измышлениям. На полный цикл в реале эти параметры никто не измерял.
no subject
Date: 2013-06-29 08:34 am (UTC)Чем дальше, тем их меньше. Плюс старые интерфейсы древних систем плохо расширяются и диктуют развитие нынешних.
no subject
Date: 2013-06-29 08:36 am (UTC)В большинстве случаев - не знаем. Потому что "эти идиоты" или не задукоментировали, или описали не правильно. Единственный способ - попытаться и получить ошибку.
no subject
Date: 2013-06-29 08:37 am (UTC)no subject
Date: 2013-06-29 08:41 am (UTC)Естественно, всё имеет свою цену. И везде нужна правильная организация процессов, чтобы бороться со специфическим хаосом.
top-down - это замечательно, но возможно только в чистом поле. В реале слишком много мелочей задано окружением и часть из них не известна. У меня сейчас всё больше задач второго типа и всё меньше первого.
no subject
Date: 2013-06-29 08:42 am (UTC)no subject
Date: 2013-06-29 08:49 am (UTC)no subject
Date: 2013-06-29 08:54 am (UTC)это никогда не приведёт к грамотно структурированному законченному решению
Это только в том случае, если мы не проверяем адекватность структуры и не перестраиваем её в соответствии с изменениями. ("Перестраиваем" тут в смысле дизайна, а не латания)
no subject
Date: 2013-06-29 09:04 am (UTC)Да, но для этого нужно иметь в голове чёткое представление о том, какую конечную цель мы преследуем. Я же о том, что ad-hoc решения отнюдь не способствуют формированию этой цели-- "оно же и так всё работает", "строгая типизация- это же не гибко", "зачем нам тратить время на какой-то там анализ и проектирование, когда мы за пять минут можем наложить любой новый патч?!" и т.д.
no subject
Date: 2013-06-29 09:12 am (UTC)no subject
Date: 2013-06-29 09:13 am (UTC)Top-down активно используется мной в реальной практике уже года четыре, наверное. Я уже и забыл, как писать по-другому.
no subject
Date: 2013-06-29 09:15 am (UTC)