Чем рэкет отличается от схемы?


ракетка является потомком схемы. Чем рэкет отличается от R6RS? Что он добавил, или Отнял, или просто отличается?

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

6 153

6 ответов:

ракетка в конечном счете основана на R5RS, а не R6RS и не является строгим надмножеством. Я не думаю, что это можно назвать "схемой", потому что она не обратно совместима с любым стандартом схемы.

большинство реализаций предлагают расширения, но в остальном обратно совместимы, конечно, компилятор, который поставляется с ракеткой также может работать в режиме R5RS или R6RS. Допустимая схема R5 / 6RS, которая работает в режиме ракетки, может быть отклонена, вызвать ошибки времени выполнения или вести себя иначе, чем она должен. С учетом сказанного, основные моменты, где это не обратно совместимы являются:

  • ракетка имеет set-cdr! и set-car!, а set-mcar! который работает только на парах, специально созданных как изменяемые.
  • что рэкет называет letrec называется letrec* в R6RS и не существует в R5RS, что R5RS и R6RS называют letrec не существует в ракетку.
  • в рэкете много вещей самооценки, которые могли бы вызвать ошибку в R5RS,большинство главное пустой список.
  • ракетка чувствительна к регистру, хотя R6RS также чувствителен к регистру
  • ракетка лечит ( ... ) и [ ... ] как эквивалент, R5RS не делает, но R6RS делает.

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

Он содержит неизменяемые списки, как упоминалось выше. Он также содержит систему структуры, которая немного чище, чем система записи R6RS. Он имеет объектно-ориентированный класс и объектную систему. Оно имеет родную поддержку для конструкции подрядом. Это устройство напоминает системы ML-модуль, а также модуль системы как R6RS модульная система. Я уверен, что я забыл, как много вещей, как я уже упоминал.

Я не уверен, что переименование было полезно, как и все другое чем маркетинговый трюк, но рэкет, безусловно, является отличным диалектом схемы.

обсуждается обоснование смены названия со схемы PLT на Racket на сайте ракетки.

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

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

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

функции в ракетке не реализуются с помощью макросов один:

  • продолжения с разделителями (более общие, чем call/cc)
  • продолжение метками
  • threads
  • мест
  • ffi

модуль и макросистема гораздо более общие, чем спецификация RnRS. Вместе с #lang спецификация reader/language позволяет определять пользовательские языки (с пользовательским синтаксисом) и использовать их с обычными программами ракетки.

В некоторых случаях У ракетки есть конструкции, поведение которых отклоняется от R5R. Самый очевидный из них делает cons построить неизменный пар (mcons создает изменяемую пару). Одним из преимуществ наличия неизменяемых пар является то, что length теперь работает в O(1) амортизированной времени.

для одного большого примера, списки ракетки неизменяемы по умолчанию, тогда как схемы изменчивы. Racket также включает в себя множество стандартных библиотек (например, веб-сервер), которых нет в других схемах.