DSL vs API

Il giorno ven, 03/11/2006 alle 05.14 +0100, Matteo V. ha scritto:

No, quello che voglio dire è che se tu da qualche parte hai una
chiamata x.pippo, non potrai mai sapere di che classe sia l’oggetto x
a runtime. Siccome a “x” non è associato nessun tipo (è una
variabile) potrebbe essere istanziata di volta in volta con un’oggetto
di qualsiasi tipo, purché risponda al messaggio “pippo”.

Beh, puoi applicare alcuni trucchi, tipo andare a vedere quali sono i
sender di #foo e vedere se in quel contesto si riesce a determinare
quale sia il tipo che avrà x. Perch+ se hai almeno una chiamata del tipo

bar.foo(Disney.new)

o che possa essere ricondotta ad una chiamata di questo tipo, allora sai
che x.pippo dovrà diventare x.pluto . Ma questo è (relativamente) facile
in un sistema ad immagine tipo Smalltalk, meno in un sistema come Ruby.

E non cambia
lavorare sull’albero sintattico o sul file di testo. E allora se io
dico che voglio rinominare il metodo Foobar#pippo in Foobar#pluto,
dovrò andare a esaminare tutte le chiamate a pippo in tutto il
programma.

Questo non mi è chiaro. Non dovresti farlo in ogni caso?

E poi devo vedere se ci sono altre classi che implementano
un metodo “pippo” e chiedermi se anche in quelle classi “pippo” va
rinominato.

Non c’è che dire, Rename Method in Ruby è un bel casino da implementare.

Sul fatto che sia meno semplice da implementare rispetto a linguaggi a
tipizzazione statica manifesta, siamo d’accordo.

Giovanni

Il giorno gio, 02/11/2006 alle 21.29 +0100, Matteo V. ha scritto:

dentro foo? E se questa chiamata a “pippo” servisse anche per una
terza classe che ha anche lei un metodo “pippo”? Il duck typing mi
impedisce di sapere di preciso tutti i posti dove il metodo pippo
potrebbe essere usato. :frowning:

Se lavori sul file di testo, sicuro. Ma se lavori sull’AST, tramite type
inference puoi determinare la classe degli oggetti. E così salvi papera,
capra e cavoli :wink:

Giovanni