Все про Scheme

Автор: Алексей Десятник
Опубликовано: 21 июля 2001 г.
Версия текста: 2.0a
Введение
Что такое Схема?
Cтатьи и переводы
Тексты программ на Схеме
Реализации Схемы
Другие источники информации

Введение

Этот документ - вариант моей страницы "Все про Scheme", переработанный под дизайн RSDN. Здесь я поместил кое-какую вводную информацию, мои переводы статей про Схему, ссылки на дополнительные ресурсы и обзор некоторых реализаций Схемы.

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

Что такое Схема?

В процессе разработки находится подробная вводная статья для начинающих. Сейчас же расскажу вкратце.

Итак, что такое Scheme? (Правильно произносится "скиим", но мне больше нравится "Схема".) Схема- это простой, но в то же время очень мощный язык программирования. Появился он еще в конце семидесятых, но в силу вошел лишь к девяностым. Это диалект Лиспа, поэтому раньше программы на Схеме были громоздкими и очень медленными. Однако вот уже более десяти лет разработаны и отлажены технологии компиляции программ на Лиспе (и Схеме) в эффективный байт-код и в машинный код, а также перевода программ на более распространенный язык. На настоящий момент существует несколько десятков реализаций Схемы всех видов: интерпретаторы, компиляторы и "переводчики", обычно на ANSI C. Подробнее о реализациях Схемы - ниже, а сейчас я расскажу о самом языке.

Итак, чем же хороша Схема, чего в ней есть такого, что заставит забыть о Си, Паскале, Дельфи и прочих Бейсиках :) ? Перечислю основные на мой взгляд достоинства Схемы:

Список достоинств можно продолжать бесконечно, однако... Лучше возьмите мой перевод статьи "Язык программирования Scheme", скачайте какую-нибудь реализацию (см. ниже список) и попробуйте в действии. Если же вы только начали учиться программированию... что ж, эта статья вам мало подойдет. Пока что у меня нет статей для начинающих программистов, однако работаю над переводом хорошей книжки "Учитесь программировать" (выйдет в этом году в Штатах, перевод будет готов тоже в этом году, где-то к октябрю).

Cтатьи и переводы

Язык программирования Scheme: краткий обзор
Перевод все еще кривоватый; но офомление уже сделал в стиле RSDN.
Лисп (и Схема) как альтернатива Java
Еще не переведена. Хотя полезно даже просто посмотреть на картинки. Сравнивается скороть выполнения программ, занимаемая память и время на разработку (Lisp/Scheme, C++, Java). Сразу говорю: результаты - не в пользу Java и (что самое удивительное) C++ не везде первый по скороти выполнения программ (!)
Это еще не конец... :)

Тексты программ на Схеме

Эти исходники предназначены в том числе и для обучения, поэтому свои работы я постарался оформить в чистом функциональном стиле (в Схеме для этого достаточно не использовать деструктивные операторы).

Преобразование символов из КОИ-8/CP866/ISO-8859-5 в CP-1251(стандартная Схема)
Название говорит само за себя: это просто библиотечная функция. Таблицы взял из XCode 1.0, качество особо не проверял, но вроде нормально работает.
Преобразование "обычной" записи матем. формул (т.е. как в Си, Паскале, Бейсике) в обратную польскую запись, а потом - в выражение Схемы, одновременно создавая список используемых переменных. (стандартная Схема)
Показана работа со списком как со стеком, с потоком и с ассоциативной памятью, а также использование пар и списков в функциях, возвращающих несколько значений.
SLIB 2c1
Де факто стандартная библиотека функций. Подходит, правда, не ко всем реализациям, но к большинству известных мне (в т.ч. DrScheme). Многие исходники в Сети требуют эту библиотеку. Да и вообще штука полезная. Правда, на перевод документации (входит в комплект) времени ну совсем нету :(

У меня накоплены еще исходники, но я решил их не выкладывать без анализа кода и перевода комментариев на русский язык. В разделе ссылок вы сможете найти места, где я брал наиболее интересные из них.

Реализации Схемы

DrScheme (~3Mb) (компилятор байт-кода + переводчик на Си)
IMHO одна из самых серьезных реализаций Схемы, которая подходит и для обучения, и для работы. Строго говоря, эта реализация Схемы называется MzScheme, а DrScheme - это MzScheme + куча библиотек + полновесная справка и текст 5-го стандарта + удобная среда разработки.
Интересные возможности библиотек из дистрибутива: многопоточность, работа в сети, работа с протоколами Интернет и HTML/XML, объектно-ориентированное программирование, создание самостоятельных запускаемых файлов, а главное - создание кроссплатформенного графического интерфейса пользователя (в стиле Tcl/Tk, но мощнее). Наиболее интересные библиотеки, не вошедшие в дистрибутив: StPersist (интерфейс к ODBC для Win32/Unix), MysterX (работа с ActiveX в Win32), GUI-builder (устанавливается как библиотека; визуальный редактор интерфейса).
К числу недостатков можно отнести плохую поддержку макросов, а также отсутствие поддержки русского языка (и всех кодировок, отличных от Latin-1) в версии для X windows.
В ДИСТРИБУТИВ ВХОДИТ НЕ ВСЯ ДОКУМЕНТАЦИЯ, ЧАСТЬ НАДО СКАЧИВАТЬ ОТДЕЛЬНО!
MIT Scheme (~3Mb) (компилятор байт-кода, вроде бы не умеет делать отдельно работающие модули)
Тоже оччень неплохая реализация, даже ближе к стандарту. Огорчает лишь отсутствие среды разработки (во всяком случае в моей Linux-версии, которая не скачивалась отсюда, а была в дистрибутиве Линуха). Также и библиотек поменьше...
Chez Scheme (~4Mb) (интерпретатор)
Мощная коммерческая реализация Схемы. В полной версии есть компилятор в машинный код, а в урезанной бесплатной (Petite) - только интерпретатор. Есть дополнительная библиотека графического интерфейса, правда, с русским языком не хочет работать
Scheme48 (<1Mb) (в руках не держал; наверное, интерпретатор)
Вроде популярная реализация, но сам не пользовал, поэтому объяснить причины популярности не могу :( Знаю только, достаточно близко соответствует стандарту и легко переносима.
STk (~1Mb) (интерпретатор)
Весьма интересная реализация: гибрид Схемы и Tcl/Tk (собственно, без Tcl!). К сожалению, даже в Win32-версии проблемы с русским языком; кроме того, отдельно работающие программы делать нелегко.
Kali Scheme
Попытка использования Схемы для распределенных вычислений. Пока еще не знаю, насколько удачная.
Kawa
Нетипичный подход: компилятор в байт-код для Java VM. По идее, эта реализация должна производить вполне переносимый код, может быть с графическим интерфейсом
По мере апробирования буду добавлять еще реализации и уточнять информацию о перечисленных. Постараюсь дать более точную информацию о Kawa, Scheme48, UMB-Scheme, MIT Scheme, Scheme->C, Kali Scheme

Другие источники информации

www.schemers.org
Ну что говорить? Де факто главный неофициальный сайт Схемы; много ссылок на реализации, документацию и исходники.
www.scheme.org
Примерно то же самое, но несколько отставший от жизни.
XML and Scheme
Сборник ссылок на статьи и библиотеки обработки XML
Scheme repository at Indiana University
Библиотека статей и исходников разного уровня. Здесь я нашел такие интересные вещи, как примеры по генетическому программированию, работе с матрицами, библиотека стандартных регулярных выражений для обработки строк (в стиле Perl). Здесь же лежит Jacal - система символьной математики (вроде Maple, но попроще; работоспособность еще толком не проверял).
Scheme repository at CMU
То же самое, с сильным перекрытием
Colleges and secondary schools using Scheme
Название говорит само за себя :)


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