Skip to content

Commit

Permalink
Reformat Spanish Transformations and fix some typos
Browse files Browse the repository at this point in the history
  • 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.
76 changes: 37 additions & 39 deletions web/doc/es/bytecode-compiler/transformations.markdown
@@ -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.

0 comments on commit 6643f18

Please sign in to comment.