Scheme - мультипарадигмный язык, поддерживает функциональную и процедурную парадигмы программирования. Словарь языка можно расширять средствами самого языка. Существуют расширения, которые добавляют поддержку объектно-ориентированного, декларативной и других парадигм программирования. Является диалектом языка программирования Лисп.
История создания
Первое описание Scheme написано в 1975 году. Творцами языка является Гай Стил (англ. Guy L. Steele) и Джеральд Сассмен (англ. Gerald Jay Sussman) с Массачусетского технологического института. В 1981 и 1982 годах начались три различных проекта по использованию Scheme для учебного процесса в университетах США.
Язык программирования Scheme определяется двумя стандартами: стандартом де-юре в редакции IEEE, и стандартом де-факто. Текущая версия описание стандарта де-факто носит название «Revised 5 Report on the Algorithmic Language Scheme». 28 августа, 2007 года была утверждена следующая редакция: R 6 RS.
Основное внимание, при создании диалекта, было уделено элегантности и концептуальной завершенности языка. Как следствие, полная спецификация языка программирования Scheme уместилась в 50 страниц, в то время как спецификация Common Lisp имеет размер 1300 страниц.
Краткое описание
Как и в Алгол, области видимости в Scheme статические, каждое использование переменной соответствует лексически видимому значению этой переменной.
Типы ассоциируются со значениями (объектами), а не с переменными. Иными словами, Scheme - язык программирования с динамической типизацией. Однако, существуют диалекты Scheme со статической типизацией.
Все объекты, которые создаются во время выполнения программы, включая процедуры и продолжения, существуют до ее завершения. Ни один из объектов не уничтожается. Однако, интерпретаторам и компиляторам Scheme разрешается освобождать место, занятое объектом в случае, если они могут доказать что этот объект в программе больше не используется. Эту задачу освобождения места в памяти от неиспользуемых объектов выполняет уборщик мусора.
Процедуры в Scheme являются полноценными объектами. Процедуры можно создавать во время выполнения программы, сохранять в структурах данных, возвращать как результат работы других процедур, и так далее.
Одной из отличительных особенностей Scheme является то, что продолжения также имеют статус обычных объектов. Продолжения полезны для реализации многих сложных конструкций управления, включая нелокальные выходы (non-local exits), обратное выполнение (backtracking), и копрограммы(coroutines).
Аргументы всегда передаются в процедуры по значению. Это значит, что все значения аргументов вычисляются до того, как будет передано управление в порядке, несмотря на то, используются ли эти аргументы во время выполнения процедуры. Это отличается от семантики ленивого вычисления языка программирования Haskell, или семантики вызова по имени Algol 60, в которой значение выражения аргумента вычисляется только в случае использования в процедуре.
Модель арифметики Scheme разрабатывалась таким образом, чтобы оставаться как можно более независимой от представления чисел в компьютере. В Scheme, каждое целое является рациональным числом, каждое рациональное является действительным, а каждое действительное - комплексное. Поэтому, разница между арифметикой действительных и комплексных чисел, которая присутствует в других языках программирования, для Scheme не возникает. Вместо этого различается точная арифметика (которая соответствует математическим идеалам), и приближена (основанная на аппроксимации). Как и в Common Lisp, точная арифметика не ограничивается операциями с целыми числами.
В Scheme имеющиеся операторы циклов. Еще одним способом организации цикличности выполнения определенного блока является использование рекурсивных процедур. Все реализации Scheme должны выполнять правильную оптимизацию хвостовой рекурсии.
Интерпретаторы и компиляторы
Для языка программирования Scheme существует большое количество интерпретаторов и компиляторов. Некоторые интерпретаторы используются в других программах для написания макросов и расширения функциональности (например, в графическом редакторе GIMP используется интерпретатор Guile). Для полного перечня, смотрите соответствующую страницу.
Средства разработки
Для Scheme, также существует большое количество вспомогательных средств разработки, интегрированных сред . К интегрированным средам принадлежит Dr. Scheme. Для GNU Emacs и XEmacs существует специальный основной режим: scheme-mode.