[Madrid-pm] Perl 5.10 y el MRO "C3"

Raúl Núñez de Arenas Coronado raul en dervishd.net
Lun Mar 3 11:13:19 PST 2008


Hola Diego :)

On lun, 2008-03-03 at 19:49 +0100, Diego Kuperman wrote:
> Raúl Núñez de Arenas Coronado wrote:
> > En fin, al grano: he visto que a partir de 5.9.algo Perl soporta el
> > Method Ordering Resolution "C3", que es el que usa también Python,
> > Dylan, etc.
> >
> Hombre, la verdad es que hace ya tiempo que se utiliza C3 en perl 5.8.x 
> (quizas inferiores tambien) via Class::C3.

Ya, esa fue la primera referencia que ví, pero me refería a la
integración en el propio lenguaje.

> > He estado buscando un poco sin mucho éxito acerca de los posibles
> > problemas que pueda acarrear esto de "use mro 'c3';" en futuros scripts
> > de Perl. Reconozcámoslo, el soporte de objetos de Perl es "tricky" y he
> > visto más de una vez jerarquías reveladas en la implementación. O para
> > ser más preciso, he visto jerarquías en las que la implementación asumía
> > un orden concreto en la búsqueda de métodos.
> > 
> Bueno, los objetos de perl tienen pocas reglas, y eso ha permitido, 
> ademas de genialidades, muchas cosas raras. Entre ellas los 
> revolucionarios inside-out objects o que exista una clase que implementa 
> C3 :-p

Lo malo es que por cada genialidad (generalmente del Conway), veo cada
burrada que... Lo bueno es lo que tú dices: da igual si el propio
interprete hace algo de forma poco adecuada para una tarea, puedes
cambiar casi cualquier cosa. Simplemente con los source filters ya se
pueden hacer maravillas).

El problema que le veo a que el C3 se implemente en una clase,
especialmente porque esa clase no es un core module, es que al final
algunos modulos usarán el MRO original, otros el C3 y luego están los
que ni siquiera tienen interfaz de objetos, así que pegarlo todo junto
deja unos códigos que dan mala fama al Perl XDDD

En serio, creo que algo así debería estar en el propio interprete. En mi
opinión (y sólo eso, una opinión) es peor que el C3 esté implementado
fuera que el que haya un MRO que pueda hacer cosas raras cuando la
jerarquía es enrevesada: total, cuando una jerarquía es así, simplemente
inicializar los objetos ya requiere de hacer malabares, así que...

> > No es por pinchar, pero en cuestión de objetos Perl está pidiendo a
> > gritos una ruptura de compatibilidad hacia atrás. Por ejemplo, haciendo
> > que la sintáxis estándar para clases y objetos sea la que propone Conway
> > pero no implementada como un core-module, sino en el propio lenguaje.
> > Igual hay que esperar a Perl 6 (u 8) para eso...
> >
> A mi no me gustaria que la rompa la verdad, dependo de cientos de 
> modulos que esperan que no se rompa...

Te entiendo, no es práctica la ruptura, pero sigo pensando que vendría
muy bien. La flexibilidad en el tema de la orientación a objetos en Perl
no está mal, pero es como el resto de Perl: invita a escribir mal
código. A mí no me importaría que se rompiera la compatibilidad, y no sé
cómo se llevará el tema en Perl6 (porque yo, hasta que no lo vea
publicado de forma oficial, prefiero no elucubrar ni opinar sobre lo que
ahora mismo hay hecho). Creo que es buen momento para esa ruptura, pero
soy consciente de la base de código que tiene Perl.

Quizá una solución de compromiso sería añadir un nuevo soporte de
clases, hecho en condiciones: por ejemplo, que todos los objetos sean
inside-out, que las facilidades de los modulos de Conway estén en el
core (¿no se ha hecho ya eso en la 5.10?), etc. Hasta ahora ese método
ha funcionado para otras cosas.

Pero vamos, que son idas de olla, ya se verá qué hacen los
desarrolladores y qué pasa con Perl6.

> Supongo que puedes completar la lectura mirado algo de Moose:
> 
> http://search.cpan.org/dist/Moose/lib/Moose.pm

De hecho, es a algo como esto a lo que me refería, a esto o a los
módulos de Conway, pero meterlos en el core para invitar a que el nuevo
código no reinvente ruedas y a que sea mejor.

Lo dicho, el futuro dirá ;))


Raúl "DervishD" Núñez de Arenas Coronado
-- 
Linux Registered User 88736 | http://www.dervishd.net
It's my PC and I'll cry if I want to... RAmen!
We are waiting for 13 Feb 2009 23:31:30 +0000 ...



Más información sobre la lista de distribución Madrid-pm