Подтвердить что ты не робот

Почему большинство языков S-Expression динамически типизируются?

Почему большинство Lisps и Schemes динамически типизируются? Статическая типизация не смешивается с некоторыми из их общих функций?

4b9b3361

Ответ 1

Ввод текста и s-выражения могут быть объединены, см. типизированная схема.

Отчасти это историческое совпадение, что языки s-expression динамически типизируются. Эти языки в большей степени полагаются на макросы, а простота синтаксического анализа и сопоставления шаблонов в s-выражениях значительно упрощает макрообработку. Большинство исследований сложных макросов происходит на языках s-expression.

Типизированные Гигиенические Макрос являются трудными.

Ответ 2

Когда Lisp был изобретен в период с 1958 по 1960 год, он представил множество функций как языка, так и реализации (сборка мусора, собственный хостинг-компилятор...). Некоторые функции были унаследованы (с некоторыми улучшениями) с других языков (обработка списка,...). Язык реализовал вычисление с помощью функций. S-выражения были скорее деталью реализации (в то время), чем языковой функцией. Система типов не была частью языка. Использование языка в интерактивном режиме также было ранней реализацией.

В то время еще не были изобретены полезные системы типов для функциональных языков. Еще до сегодняшнего дня также довольно сложно использовать статически типизированные языки интерактивным способом. Существует множество реализаций статически типизированных языков, которые также предоставляют некоторый интерактивный интерфейс, но в основном они не предлагают такой же уровень поддержки интерактивного использования, как типичная система Lisp. Программирование в интерактивной системе Lisp означает, что многие вещи могут быть изменены "на лету", и это может быть проблематично, если изменения типа должны были распространяться через целые программы и данные в такой интерактивной системе Lisp. обратите внимание, что некоторые Schemers имеют другое представление об этих вещах. R6RS - это, в основном, пакетный язык, как правило, не так много в духе Lisp...

Функциональные языки, которые позже были изобретены в системах статического типа, также получили синтаксис не-s-выражений - они не предлагали поддержку макросов или связанных функций. позже некоторые из этих языков/реализаций использовали препроцессор для синтаксических расширений.

Ответ 3

Статическая типизация является лексической, это означает, что вся информация о типах может быть выведена из исходного кода чтения без оценки каких-либо выражений или вычисления каких-либо вещей, причем здесь наиболее важны условия. Статически типизированный язык разработан таким образом, что это может произойти, лучший термин будет "лексически типизирован", как в, компилятор может доказать, что только чтение источника не вызывает ошибок типа.

В случае lisp это неловко отличается от того, что сам исходный код lisp не является статическим, lisp является гомо-знаковым, он использует данные как код и может в какой-то степени динамически редактировать собственный источник работы.

Lisp был первым динамически типизированным языком, и, вероятно, по этой причине сам программный код больше не лексический в Lisp.

Edit: гораздо более мощная причина, в случае статической типизации вам придется вводить списки. Вы можете либо иметь чрезвычайно сложные типы для каждого списка, который учитывает все элементы, так и требовать, чтобы каждый элемент имел тот же тип и набирал его как список. Первый вариант приведет к созданию списка списков. Последний вариант требует, чтобы исходный код содержал только один и тот же тип для каждого элемента данных, это означает, что вы даже не можете создавать выражения, поскольку список в любом случае отличается от целого числа.

Поэтому я осмелюсь сказать, что полностью и совершенно невозможно понять.