Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Reformat Spanish Transformations and fix some typos
- Loading branch information
Josep M. Bach
committed
Mar 24, 2012
1 parent
204fcfe
commit 6643f18
Showing
1 changed file
with
37 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -1,55 +1,53 @@ | |||
--- | --- | ||
layout: doc_es | layout: doc_es | ||
title: Transformaciones | title: Transformaciones | ||
previous: Compilador | previous: Etapa de Escritura | ||
previous_url: bytecode-compiler/compiler | previous_url: bytecode-compiler/writer | ||
next: Generador | next: Personalizando las etapas | ||
next_url: bytecode-compiler/generator | next_url: bytecode-compiler/customization | ||
--- | --- | ||
|
|
||
El compilador a bytecode tiene un mecanismo simple de transformación | El compilador a bytecode tiene un mecanismo simple de transformación de | ||
de árboles AST que reconoce ciertas formas AST y las remplaza. Las | árboles AST que reconoce ciertas formas AST y las reemplaza. Las formas | ||
formas remplazadas emiten un bytecode diferente del que sería emitido | reemplazadas emiten un bytecode diferente del que sería emitido por las formas | ||
por las formas originales. El código fuente para los transformadores | originales. El código fuente para las transformacionesse encuentra en | ||
se encuentra en lib/compiler/ast/transforms.rb. | lib/compiler/ast/transforms.rb. | ||
|
|
||
TODO: Documentar la arquitectura de plugins del compilador. | |||
|
|
||
TODO: Documentar la arquitectura plugin del compilador. | |||
|
|
||
### Transformación de matemáticas seguras | |||
|
|
||
### Transformación de matemáticas seguras. | Debido a que las bibliotecas del núcleo estan construidas con los mismos | ||
|
elementos que cualquier otro código Ruby y debido a que Ruby es un lenguaje | ||
Debido a que las bibliotecas del núcleo estan construidas con los | dinámico con clases abiertas y late-binding, es posible cambiar clases | ||
mísmos elementos que cualquier otro código Ruby y debido a que Ruby es | fundamentales como Fixnum en formas que podrían violar el comportamiento del | ||
un lenguaje dinámico con clases abiertas y late-binding, es posible | que dependen algunas otras clases. Por ejemplo, imagine que hicieramos lo | ||
cambiar clases fundamentales como Fixnum en formas que podrían violar | siguiente: | ||
el comportamiento del que dependen algunas otras clases. Por ejemplo, | |||
imagine que hicieramos lo siguiente: | |||
|
|
||
class Fixnum | class Fixnum | ||
def +(other) | def +(other) | ||
(self + other) % 5 | (self + other) % 5 | ||
end | end | ||
end | end | ||
|
|
||
Si bien es cierto que es posible redefinir el operador aritmético de | Si bien es cierto que es posible redefinir el operador aritmético de suma para | ||
suma para que realice una operación módulo 5, hacerlo, sin duda | que realice una operación módulo 5, hacerlo sin duda causaría que algunas | ||
causaría que algunas clases como Array no pudiesen calcular siquiera la | clases como Array no pudiesen calcular siquiera la longitud correcta cuando lo | ||
longitud correcta cuando lo necesite. La naturaleza dinámica de Ruby | necesiten. La naturaleza dinámica de Ruby es uno de sus rasgos más apreciados, | ||
es uno de sus rasgos más apreciados, pero también es una verdadera | pero también es una verdadera arma de doble filo en algunos aspectos. | ||
arma de doble filo en algunos aspectos. |
|
||
|
En la biblioteca estándar, 'mathn' redefine Fixnum#/ de una manera peligrosa e | ||
En la biblioteca estándar, 'mathn' redefine Fixnum#/ de una manera | insegura. La biblioteca crea un alias de Fixnum#/ a Fixnum#quo, que devuelve | ||
peligrosa e insegura. La biblioteca crea un alias de Fixnum#/ a | un Float de forma predeterminada. | ||
Fixnum#quo, que regresa un Float de forma predeterminada. |
|
||
|
Debido a esto existe un plugin especial para el compilador que emite métodos | ||
Debido a esto existe un plugin especial para el compilador que emite | con nombre diferente cuando se encuentra con el método #/. El compilador emite | ||
métodos con nombre diferente cuando se encuentra con el método #/. El | \#divide en vez de #/. Las clases numéricas Fixnum, Bignum, Float, y Numeric, | ||
compilador emite #divide en vez de #/. Las clases numéricas Fixnum, | todas definen este método. | ||
Bignum, Float, y Numeric, todas definen este método. |
|
||
|
Las transformaciones para matemáticas seguras estan habilitadas durante la | ||
Las transformaciones para matemáticas seguras estan habilitadas | compilación de las bibliotecas del núcleo. Durante la compilación de 'código | ||
durante la compilación de las bibliotecas del núcleo. Durante la | de usuario' regular, el plugin es deshabilitado. Esto nos permite soportar | ||
compilación de 'código de usuario' regular, el plugin es | mathn sin alterar las bibliotecas del núcleo o forzar prácticas | ||
deshabilitado. Esto nos permite soportar mathn sin alterar las | inconvenientes. | ||
bibliotecas del núcleo o forzar a prácticas inconvenientes. |