Оглавление
- 1 Особенности ракетки
- 1.1 История и цели Racket
- 1.2 Базовая реализация и поддержка
- 1.3 Системный интерфейс и сценарии
- 1.4 Управление ресурсами и “песочница”
- 1.5 Веб- и сетевое программирование
- 1.6 Графика
- 1.7 Программирование с графическим интерфейсом
- 1.8 Слайд-шоу
- 1.9 Внешний функциональный интерфейс
- 1.10 Языковые расширения
- 1.11 Модульная система Racket
- 1.12 Scribble
- 1.13 Typed Racket
- 1.14 Ленивый язык
- 1.15 Логическое программирование
- 1.16 Инструменты обучения
- 1.17 АЛГОЛ
- 1.18 Plai и напечатанный на plai
- 1.19 Создание языков
- 1.20 Полный текст статьи:
- 2 Особенности ракетки
Особенности ракетки
-
История и цели Racket
- Racket активно разрабатывается с середины 1990-х годов.
- Основная цель — создание условий для создания новых языков программирования.
-
Базовая реализация и поддержка
- Racket обладает высокой гибкостью и может функционировать как полнофункциональный скриптовый язык.
- Поддерживает три разных сборщика мусора: Boehm, SenoraGC и 3m.
- Реализует полное исключение конечных вызовов и анализ переменных в реальном времени.
-
Системный интерфейс и сценарии
- Включает асинхронный ввод-вывод, зеленые потоки, каналы синхронизации и другие функции.
- Позволяет создавать мощные скрипты, подобные Perl или Python.
-
Управление ресурсами и “песочница”
- Использует концепцию “хранителя” для управления ресурсами.
- Библиотека racket/sandbox предоставляет изолированные контексты выполнения.
-
Веб- и сетевое программирование
- Включает функции для создания веб-серверов и скребков.
- Поддерживает протоколы, отличные от http.
-
Графика
- Библиотека 2htdp/image для создания изображений.
- Библиотека сюжетов для создания изображений для более зрелой аудитории.
-
Программирование с графическим интерфейсом
- Реализует переносимый графический интерфейс через API Windows, Cocoa и GTK+.
- Включает GUI toolkit и программу GUI designer на PLaneT.
-
Слайд-шоу
- Позволяет создавать презентации на основе слайдов.
- Включает элементы LaTeX и пакеты расширений на PLaneT.
-
Внешний функциональный интерфейс
- Основан на libffi и позволяет писать небезопасный C-подобный код.
- Включает макросы для создания выразительного языка описания интерфейса.
-
Языковые расширения
- Racket позволяет создавать новые языки, зависящие от предметной области и общего назначения.
- Включает гибкую модульную систему, обширную макросистему и богатую систему выполнения.
-
Модульная система Racket
- Позволяет писать код, охватывающий несколько модулей на разных языках
- Широко используется в дистрибутиве Racket и пользовательских библиотеках
-
Scribble
- Система документации Racket, представленная в виде нескольких языков
- Используется для документирования Racket и написания книг и статей
- Включает новый синтаксис для текстуально насыщенного кода
-
Typed Racket
- Статически типизированный вариант Racket
- Включает подтипы, объединения и другие особенности
- Позволяет переносить части программы на типизированный язык
-
Ленивый язык
- Язык с семантикой ленивых вычислений, аналогичный Haskell
- Пример с бесконечным списком, элементы которого вычисляются по мере необходимости
-
Логическое программирование
- Racket поставляется с тремя языками логического программирования: Racklog, Datalog и miniKanren
- Используют новый синтаксис, а не расширение S-выражений
-
Инструменты обучения
- Группа PLT использует уровни владения языком для ограничения новых студентов
- Пример программы с использованием htdp/bsl для начинающих студентов
-
АЛГОЛ
- Racket поставляется с полной реализацией языка ALGOL 60
-
Plai и напечатанный на plai
- Поддерживаемый язык, который может быть набранным или нетипизированным
- Типизированный язык PLAI отличается статической типизацией и новыми конструкциями
-
Создание языков
- Пример реализации нового языка, похожего на racket
- Включает неявное заключение в кавычки неизвестных переменных и использование хэш-таблиц в качестве функций