2012-04-28 8 views
9

He notado que las personas a menudo actúan como si Scheme y Racket fueran lo mismo aquí en Stack Overflow (y también en otras partes de la web. Por ejemplo, las preguntas sobre Scheme suelen generar soluciones en Racket. Si le das un vistazo a las preguntas etiquetadas , verá que la mitad de sus respuestas comienzan con #lang racket.¿El esquema y la raqueta son diferentes? ¿Si es así, cómo?

son estos dos idiomas realmente tan similares que pueden ser considerados como iguales? ¿Es la raqueta sólo una extensión del esquema (es decir, código de Scheme siempre correr en un intérprete de Raqueta)?

Quiero subrayar el hecho de que esto no es una polémica, solo una pregunta de alguien que estudia el lenguaje de programación Scheme.

+0

@Lord Torgamus: realmente gracias por su edición :) ¡Cómo es lo que me gustaría decir! – Aslan986

+2

[¿En qué se diferencia Racket Than Scheme?] (Http://stackoverflow.com/questions/3345397/how-is-racket-different-than-scheme) –

Respuesta

14

Racket está muy cerca de Scheme, y de hecho hasta hace dos años se llamaba PLT Scheme.

Sin embargo, el idioma predeterminado que se utiliza en Racket difiere de Scheme en algunos lugares (sobre todo tiene pares inmutables). Esto no es algo nuevo: tenía diferencias similares cuando se llamaba PLT Scheme. Tampoco es algo exclusivo de Racket: el (los) estándar (s) de Scheme son tan minimalistas que el lenguaje que definen no es práctico, lo que significa que todas las implementaciones de esquemas agregan sus propias extensiones. Otro punto importante en el caso Racket es que definir nuevos dialectos es muy fácil, y Racket implementa un dialecto R5RS estricto (el hecho de que es estricto significa que no es muy útil) y también implementa un dialecto R6RS.

+0

Además, tenga en cuenta que la naturaleza misma de Scheme significa que la diferencia "extensiones de idioma" y "bibliotecas de conveniencia adicionales" es muy borrosa, con macros de sintaxis y todo. – user54609

6

No, no son iguales. Sin embargo, la implementación de Racket puede ejecutar el código Scheme estándar. El esquema está definido por un estándar. Raqueta no es. Si desea portabilidad, puede escribir código R6RS y ejecutarlo usando Racket.

Racket no es un superconjunto o subconjunto de Scheme.

+1

"Intérprete" es falso, en varios niveles diferentes. –

+1

@EliBarzilay ¿qué palabra preferirías ver? –

+3

Racket es un compilador. Compila código de Racket a bytecode, y luego compila bytecode a código de máquina con un compilador JIT. Sin embargo, la distinción entre "intérprete" y "compilador" es algo que no tiene mucho sentido en estos días. –

Cuestiones relacionadas