Если мы рассматриваем фразы «статически типизированные» и «динамически типизированные» как жаргон, ссылаясь на то, что язык проверяет правильность операций против типов, то я считаю справедливым характеризовать Mathematica с использованием жаргона «нетипизированный» - в том смысле, что он «никогда» не проверяет, действительна ли операция для типа.
Мне нравится использование Велизария термина «тип-агностик». Я говорю это потому, что, хотя почти вся проверка типов на языке является идиоматической (т.реализованный программистом, а не языком), так и концепция применения оператора к типизированным операндам!
Рассмотрите «бессмысленный» пример 1 + "foo"
. Я считаю справедливым сказать, что значительная часть (приближающаяся к единству) всех пользователей Mathematica путешествует по таким случаям, когда они впервые изучают язык. Проблема особенно очевидна, когда вы пишете код, например, в стиле C. В кругах Mathematica много дискуссий о том, как справляться с такими ситуациями.
С другой стороны, эта слабость также является самой большой силой Математики. Mathematica оптимизирован для создания новых обозначений. Многие, многие обозначения имеют понятие +
, которое ведет себя очень похоже на добавление в элементарной арифметике. При построении таких обозначений было бы очень неудобно, если бы Mathematica вмешалась и пожаловалась, что операнды до +
не были цифрами. В таком более высокоуровневом применении Mathematica «бессмысленный» пример не только «чувственный», но и в действительности имеет решающее значение.
Итак, имея в виду, вопрос типа часто бывает спорным. Следовательно, мне нравится Belisarius «тип-агностик». Upvote его, я сделал;)
Редактировать
Постараюсь пояснить, что я имел в виду, когда различие между «нетипизированным» и «тип-агностика».
Прочитав различные ответы и комментарии, я попытался выяснить, какая разница между Mathematica и LISP. Последнее, как правило, удерживается в качестве примера «динамически типизированного», хотя основной оценщик LISP очень похож на Mathematica с почти никакой проверкой типов. Ошибки типа, которые мы видим в программах LISP, в основном выдаются жестко запрограммированными проверками в (обычно встроенных) функциях. +
, например, будет принимать только числовые аргументы, даже если сам оценщик не может заботиться о том, так или иначе. Сказав это, «чувство» программирования в LISP сильно отличается от «чувства» Mathematica (для меня, по крайней мере). Пример 1 + "foo"
действительно отражает эту разницу.
Хотя я в целом согласен с «нетипизированным» как характеристикой Mathematica, я все еще чувствовал, что чего-то не хватает. Ассемблер кажется мне неотображенным, как и предыдущий FORTRAN и pre-ANSI C. В этих случаях бит-аргумент аргументов был всем, что имело значение, и программы продолжались бы беспечно, если бы я передал строковый аргумент, где было нужно целое число. Mathematica, безусловно, разделяет это нетипизированное поведение. Но есть разница: в ассемблере и FORTRAN и C это крайне редко, потому что отсутствие контроля типов приводит к хорошему результату. Как я уже упоминал выше, в Mathematica можно, а иногда и вообще полагаться на такое поведение.
Введите «тип-агностик». Мне понравилась его позиция без фиксации, звучащая менее резко, чем «нетипизированная». Я чувствовал, что это отражает принципиально нетипизированный характер Mathematica, но оставил некоторое пространство для маневра для тех языковых функций, которые легко поддерживают идиоматическую проверку типов в LISP, динамический стиль (то есть «голова» идиома и поддерживающая функциональность).
Итак, я считаю, что Mathematica наводит на то, чтобы быть полностью нетипизированным и динамически типизированным. «Тип-агностик» воспринял это настроение для меня. YMMV :)
Я с готовностью признаюсь, что никто, вероятно, не восстановит все, что я написал в этом ответе, просто проверяя фразы «нетипизированные» и «тип-агностик». Снова я подчеркиваю, что я считаю, что «нетипизированный» - это справедливая характеристика Mathematica, но мне также нравится тот факт, что «тип-агностик» задает много вопросов, на которые обращаются различные ответы на этот вопрос SO.
@ Ярослав Булатов: Сообщение, которое вы цитируете, касается производительности Mathematica. Этот вопрос о переполнении стека не имеет ничего общего с производительностью Mathematica. Речь идет о классификации системы типа Mathematica. –
вопрос кажется субъективным –
@ Ярослав Булатов: Как так? –