Racket (язык программирования)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 22:19, 8 июня 2016.
Racket
Файл:Racket logo.png
250px
DrRacket on Ubuntu GNU/Linux
Парадигма Мультипарадигмальный: функциональный, процедурный, модульный, объекто-ориентированный, логический, метапрограммируемый
Спроектировано PLT Inc.
Разработчики PLT Inc.
Стабильная версия 6.4[1] / 8 February 2016 года; 4 years ago (2016-02-08)
Печать дисциплины Динамическая, строгая, статическая
Платформа x86, PowerPC, SPARC, MIPS, ARM
Лицензия LGPL
Расширение файла .rkt, .rktl, .rktd, .scrbl, .plt, .ss, .scm
Портал: racket-lang.org
Диалект
Typed Racket, Lazy Racket, Scribble, FrTime, more
Влияние
Scheme,[2] Rust,[3][4] Clojure

Racket (ранее назывался 'PLT Scheme' ) является языком программирования общего назначения, мультипарадигмальным языком программирования в Lisp - Scheme семье. Это язык программирования полного спектра. Он выходит за рамки Lisp и Scheme с диалектами, которые поддерживают объекты, типы и многое другое. Racket позволяет программистам связывать компоненты, написанные на разных диалектах, и это дает возможность программистам создавать новые, специфические для проекта диалекты. Библиотеки Racket поддерживают разработку веб-серверов и баз данных, GUI и диаграмм.

Быстрый старт

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

#lang slideshow

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

Если вы использовали DrRacket раньше, возможно, потребуется переустановить DrRacket с выбором используемого языка, объявленный в источнике с помощью Language|Choose Language... в меню установки перед нажатием Run.

При вводе выражения после > в окне взаимодействий и нажатия Enter, DrRacket вычисляет выражение и печатает его результат. Выражением может быть только текст, например, номер 5 или строка "художественная галерея":

> 5
5
> "художественная галерея"
"художественная галерея"

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

> (circle 10)

Результатом функции круга является картина, которая печатается как результат выражения таким же образом, как числа или текст. Аргумент окружности определяет размер окружности в пикселях. Как вы можете догадаться, есть функция прямоугольник, которая принимает два аргумента вместо одного:

> (rectangle 10 20)

Давайте попробуем ввести неправильное количество аргументов у круга и посмотрим, что произойдёт:

> (circle 10 20)
circle: arity mismatch;
 the expected number of arguments does not match the given
number
  expected: 1 plus optional arguments with keywords
#:border-color and #:border-width
  given: 2
  arguments...:
   10
   20

Обратите внимание, что DrRacket окрашивает в розовые цвета строки, которые вызвали ошибку (к сожалению, в данной статье розовая подсветка отсутствует).

В дополнение к основным конструкторам изображений, например кругу и прямоугольнику, есть функция Нс-Append, которая комбинирует изображения. Запуск таких составных функций в Racket, выглядит следующим образом:

> (circle 10 20)
> (hc-append (circle 10) (rectangle 10 20))

Дефис в названии "hc-append" является лишь частью идентификатора; это не "hc" минус "append". Имя функции начинается с "h" потому, что она сочетает в себе изображения по горизонтали, а далее следует буква "c", потому, что изображения центрируются по вертикали.

Если вам интересно, какие ещё существуют функции, чтобы складывать снимки вертикально и выравнивать их по левому краю, то переместите текстовую каретку к hc-append и нажмите клавишу F1 в DrRacket. Окно браузера откроется, и вам выдадут ссылку на документацию для hc-append. Откройте эту ссылку и вы увидите много других функций.

Определение фигур

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

#lang slideshow
(define c (circle 10))
(define r (rectangle 10 20))

Как вы можете видеть, функция Нс-Append принимает необязательный числовой аргумент, и она принимает любое количество аргументов изображений. Когда необязательный аргумент записан, функция определяет по нему расстояние между объектами.

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

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

define (square n)
  ; Так обозначаются комментарии
  ; Ниже находится тело функции
  (filled-rectangle n n))

Синтаксис определения аналогичен синтаксису вызова функции:

> (square 10)

Таким же образом, как определения могут быть включены в области взаимодействия, выражения могут быть включены в область определения. При запуске программы, результаты выражений из области определения приводятся в области взаимодействия.

Среда программирования

Языковая платформа обеспечивает IDE, графический пользовательский интерфейс и другие инструменты. Racket также является жизнеспособным инструментом сценариев и может быть использован для сценариев оболочки Unix. Можно парсить аргументы командной строки, запускать внешние инструменты. Так же Racket включать в себя библиотеки, как и другие языки сценариев.

Ребрендинг и обновления

7 июня 2010 г. PLT Scheme был переименован в Racket. Смена названия совпала с выпуском версии 5.0. Впоследствии GUI бэкенд был переписан в Racket из C++ в версии 5.1 с использованием собственных Widget Toolkit на всех платформах.В версии 5.2 включен фоновый инструмент статического анализа кода, новая библиотека рисования, библиотека базы данных, а также новый расширенный REPL. Version 5.3 - включена новая функция - подмодуль для опционально загруженных модулей, новые инструменты программной оптимизации, JSON библиотека и другие возможности. Версия 5.3.1 внесла значительные улучшения в DrRacket: фоновая проверки синтаксиса была включена по умолчанию, и была добавлена новый инструмент документации для предварительного просмотра.

В версии 6.0 Racket выкатил свою систему управления пакетами второго поколения. В рамках этого основной репозиторий DrRacket и Racket был реорганизован и разделен на большой набор небольших пакетов, что позволяет установить "минимальную ракетку" и установить только те пакеты, которые необходимы.

Внешние ссылки

Литература

  1. Racket blog
  2. Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; et al. (August 2007). "Revised6 Report on the Algorithmic Language Scheme (R6RS)". Scheme Steering Committee. Retrieved 2011-09-13. 
  3. "Planet2 questions". 
  4. "Rust Bibliography".