¿En qué se diferencia Racket de Scheme?
Racket es descendiente de Scheme. ¿En qué se diferencia Racket del R6RS? ¿Qué añadió, qué quitó o simplemente es diferente?
Entiendo que Racket es más que un idioma, es una plataforma para idiomas. Pero me refiero al dialecto principal de Racket.
En última instancia, Racket se basa en R5RS, no en R6RS ni en un superconjunto estricto de ninguno de los dos. No creo que pueda llamarse 'Scheme' porque no es compatible con ningún estándar de Scheme.
La mayoría de las implementaciones ofrecen extensiones, pero por lo demás son compatibles con versiones anteriores; por supuesto, el compilador que viene con Racket también puede ejecutarse en modo R5RS o R6RS. El esquema R5/6RS válido que se ejecuta en modo raqueta puede rechazarse, causar errores de tiempo de ejecución o comportarse de manera diferente a lo que debería. Dicho esto, los puntos principales en los que no es compatible con versiones anteriores son:
- Racket no tiene
set-cdr!
yset-car!
, sinoset-mcar!
que solo funciona en pares creados específicamente como mutables. - Lo que llama Racket
letrec
se llamaletrec*
en R6RS y no existe en R5RS, lo que llaman R5RS y R6RSletrec
no existe en Racket. - En Racket, muchas cosas se autoevalúan, lo que generaría un error en R5RS,
la más importante es la lista vacía. - Racket distingue entre mayúsculas y minúsculas, aunque R6RS también distingue entre mayúsculas y minúsculas
- Golosinas de raqueta
( ... )
y,[ ... ]
como equivalente, R5RS no, pero R6RS sí.
Probablemente haya más, pero en la mayoría de las otras partes la raqueta es un superconjunto de Scheme.
Contiene listas inmutables, como se mencionó anteriormente. También contiene un sistema de estructura que es un poco más limpio que el sistema de registro R6RS. Tiene una clase orientada a objetos y un sistema de objetos. Tiene soporte nativo para diseño por contrato. Tiene un sistema de unidades que recuerda al sistema de módulos ML, así como un sistema de módulos muy parecido al sistema de módulos R6RS. Estoy seguro de que he olvidado tantas cosas como he mencionado.
No estoy seguro de que el cambio de nombre haya sido útil como algo más que un truco de marketing, pero el escándalo es definitivamente un dialecto distinto del esquema.
El motivo del cambio de nombre de PLT Scheme a Racket se analiza en el sitio de Racket .