web-dev-qa-db-fra.com

Quelle est la différence entre Racket et Scheme?

Racket est un descendant de Scheme. Quelle est la différence entre Racket et R6RS? Qu'a-t-il ajouté, ou enlevé, ou est-il simplement différent?

Je comprends que Racket est plus qu’une langue, c’est une plate-forme pour les langues. Mais je me réfère au dialecte principal Racket.

169
mudge

La raquette est finalement basée sur R5RS, et non sur R6RS et non sur-ensemble strict. Je ne pense pas que cela puisse s'appeler 'Scheme' car il n'est rétrocompatible avec aucune norme Scheme.

La plupart des implémentations offrent des extensions, mais sont par ailleurs compatibles avec les versions antérieures. Bien entendu, le compilateur fourni avec Racket peut également être exécuté en mode R5RS ou R6RS. Un schéma R5/6RS valide fonctionnant en mode raquette peut être rejeté, provoquer des erreurs d’exécution ou se comporter différemment de ce qu’il devrait être. Cela dit, les principaux points pour lesquels il n’est pas compatible avec les versions antérieures sont les suivants:

  • La raquette n'a pas set-cdr! et set-car!, plutôt set-mcar! qui ne fonctionne que sur des paires créées spécifiquement comme mutables.
  • Ce que Racket appelle letrec s'appelle letrec* dans R6RS et n’existe pas dans R5RS, quel appel R5RS et R6RS letrec n’existe pas dans Racket.
  • Dans Racket, beaucoup de choses s'auto-évaluent ce qui pourrait générer une erreur dans R5RS, le plus important de la liste vide.
  • La raquette est sensible à la casse, bien que R6RS soit également sensible à la casse
  • Friandises Racket ( ... ) et [ ... ] en tant qu'équivalent, R5RS pas, mais R6RS.

Il y en a probablement plus, mais sur la plupart des autres parties, la raquette est un sur-ensemble de Scheme.

121
Zorf

Il contient des listes immuables, comme mentionné ci-dessus. Il contient également un système de structure un peu plus propre que le système d’enregistrement R6RS. Il a une classe orientée objet et un système objet. Il a un support natif pour la conception par contrat. Il dispose d'un système d'unités rappelant le système de modules ML, ainsi que d'un système de modules similaire au système de modules R6RS. Je suis sûr d'avoir oublié autant de choses que j'ai mentionnées.

Je ne suis pas sûr que le changement de nom ait été utile autrement que comme un gadget marketing, mais la raquette est un dialecte distinct.

33
deinst

La justification du changement de nom de PLT Scheme à Racket est discutée sur le site Racket .

21
Norman Gray

La raquette inclut beaucoup de constructions de langage vraiment Nice non incluses dans le schéma R6RS, comme "match" .

17
Gautam

La spécification de langage R5RS sur le langage de programmation Scheme est basée sur un consensus entre les multiples implémenteurs de Scheme. Cela implique que le langage est très stable. Cela implique également que de nombreuses fonctionnalités utiles ne font pas partie de la norme R5RS.

La raquette a construit sur R5RS et l'a considérablement étendue. Certaines extensions sont définies comme des macros, mais certaines fonctionnalités nécessitent la prise en charge du système d’exécution.

Fonctionnalités dans Racket non implémentables par les macros seules:

  • continuations délimitées (plus générales que call/cc)
  • marques de continuation
  • les fils
  • des endroits
  • ffi

Le module et le système macro sont beaucoup plus généraux que la spécification RnRS. Ensemble avec #lang lecteur/spécification de langage permet de définir des langages personnalisés (avec une syntaxe personnalisée) et de les utiliser avec des programmes Racket normaux.

Dans quelques cas, Racket a des constructions dont le comportement diffère de celui de R5RS. Le plus évident est de faire en sorte que cons construise une paire immuable (mcons construit une paire mutable). L'un des avantages des paires immuables est que length s'exécute maintenant dans le temps O(1)).

14
soegaard

Par exemple, les listes de raquettes sont immuables par défaut alors que celles de Scheme sont modifiables. Racket inclut également un grand nombre de bibliothèques standard (serveur Web, par exemple), contrairement aux autres modèles.

10
Chuck