Continuations


#1

Qualcuno di voi usa davvero le continuations?
è qualcosa che semplicemente non mi viene da usare…

mi piacerebbe vedere alcuni esempi concreti in cui semplificano la
soluzione
ad un problema…


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/


#2

Beh, c’è l’articolo di Gabriele di un anno e mezzo addietro, molto ben
fatto:
http://www.siforge.org/articles/2004/09/20-la_magia_di_callcc.html

E poi prendi borges, dovresti trovare parecchi esempi, tutorial, ecc.
Ciao
Giuliano


#3

Il giorno mar, 09/05/2006 alle 22.11 -0400, Piergiuliano B. ha
scritto:

Beh, c’è l’articolo di Gabriele di un anno e mezzo addietro, molto ben
fatto: http://www.siforge.org/articles/2004/09/20-la_magia_di_callcc.html

E poi prendi borges, dovresti trovare parecchi esempi, tutorial, ecc.
Ciao
Giuliano

Le continuasetions potrebbero essere utilizzate per realizzare in
maniera semplice sistemi transazionali? O sto dicendo fesserie?

Giovanni

#4

— Piergiuliano B. removed_email_address@domain.invalid ha scritto:

Beh, c’è l’articolo di Gabriele di un anno e mezzo
addietro, molto ben
fatto:

http://www.siforge.org/articles/2004/09/20-la_magia_di_callcc.html

grazie per il “ben fatto”, non me lo merito :slight_smile:

E poi prendi borges, dovresti trovare parecchi
esempi, tutorial, ecc.

più che borges direi “Wee” che è più
funzionale/funzionante.
Ma l’esempio attualmente più usato è la libreria
“breakpoint”, credo.

Detto questo, concordo che anche io non uso
praticamente mai callcc ma mi fa piacere sapere che è
li per i casi di necessità, peccato sia leeeeento.

Esempio: tempo fa avevo scritto un programmino per
calcolare i decimali di pigreco[1], cosa che si può
fare iterativamente in modo emplice. Solo che ogni
dieci decimali c’era la necessità di stampare la loro
posizione dopo la virgola, e quindi di interrompere la
computazione per un secondo. Ottimo uso per callcc, ma
ho dovuto cambiare approccio perché era troppo lento
:frowning:

[1] http://shootout.alioth.debian.org/gp4/ruby.php


icq: #69488917
blog: http://riffraff.blogsome.com

Chiacchiera con i tuoi amici in tempo reale!
http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com


#5

Qualcuno riesce a farmi vedere come può pensare diversamente a un problema
sapendo che esistono le continuations? è questo salto di percezione che
ancora mi manca.

Pensavo a qualche problema di domain semplice semplice… dal
solito Person/Employee a Book/Library e Breakfast Recipes piuttosto che
siti
web e funzioni matematiche.

PS: vero molto ben fatto il tutorial di Gabriele. Non riesco a credere
che
mi abbia fatto capire le cc usando l’assembly!

On 5/10/06, gabriele renzi removed_email_address@domain.invalid wrote:

Detto questo, concordo che anche io non uso

Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/


#6

Questo è un punto di vista interessante. In pratica mi stai dicendo che le
puoi utilizzare per aumentare la cohesion di una serie di eventi
distanti
nel tempo ma logicamente legati ?

On 5/10/06, Massimiliano M.
Mi sembra che le applicazioni pratiche delle continuazioni vadano a
braccetto con questo pattern di prendere pezzi di un processo
disseminati nel tempo e farli apparire sequenziali. Il modello


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/


#7

On 5/9/06, chiaro scuro kiaroskuro-at-… |ruby-it.org|
<…> wrote:

Qualcuno di voi usa davvero le continuations?
è qualcosa che semplicemente non mi viene da usare…

mi piacerebbe vedere alcuni esempi concreti in cui semplificano la soluzione
ad un problema…

Non è Ruby né sono continuazioni first-class, ma su
http://blog.hyperstruct.net/articles/2006/03/06/finite-state-machines-vs-multithread-cps-to-the-rescue
ho cercato di descrivere passo-passo come le ho simulate in Javascript
con sole lambda per far apparire sequenziale del codice che in realtà
è basato su eventi asincroni. (In Ruby avrei fatto con la
manipolazione esplicita di Thread.) Mi ricordo anche di un post di
Gabriele su un Python wiki dove si chiedevano esempi di Ruby e si
mostrava come farli in Python, e lui proponeva un’implementazione di
Amb. Chissà se poi hanno risposto. :slight_smile:

Mi sembra che le applicazioni pratiche delle continuazioni vadano a
braccetto con questo pattern di prendere pezzi di un processo
disseminati nel tempo e farli apparire sequenziali. Il modello
richiesta/risposta dell’HTTP può star stretto e infatti hanno cercato
di astrarre con i citati Wee e Borges, Seaside (evoluzione di Borges
in Smalltalk), UCW (Common Lisp), SISCWeb (Scheme su JVM)…


#8

On 5/10/06, Massimiliano M. removed_email_address@domain.invalid wrote:

di astrarre con i citati Wee e Borges, Seaside (evoluzione di Borges
in Smalltalk), UCW (Common Lisp), SISCWeb (Scheme su JVM)…

ANATEMA! Borges ha tratto ispirazione da Seaside e non viceversa.
Seaside 2
per la precisione.
Bisogna dare a Cesare (smalltalk/Borges) cio’ che e’ di Cesare.
E se vogliamo dirla tutta le continuations sono state introdotte in
Scheme
negli anni '70. :slight_smile:

Ciao
Giuliano


#9

Questo è un punto di vista interessante. In pratica mi stai dicendo che le
puoi utilizzare per aumentare la cohesion di una serie di eventi distanti
nel tempo ma logicamente legati ?

Sì. Un altro punto di vista è che la sequenza logica e quella
temporale sono molto legate nella maggior parte delle applicazioni ed
entrambe vengono direttamente riflessi nel codice, ma in alcune non è
così, come quelle in cui hai tempi lunghi tra una domanda e una
risposta, e conviene fare altro piuttosto che aspettare mentre una
risposta arriva (il caso tipico di applicazioni stateful via rete),
foss’anche solo serializzare il proprio stato e andare a dormire
lasciando tempo processore agli altri.

In quei casi o decidi che la sequenza temporale regna, e organizzi
quella logica in pezzi che stiano ciascuno in un breve frammento
sequenziale temporalmente (come un ciclo request/response in HTTP),
oppure che la sequenza logica regna, e organizzi quella temporale in
modo che nasconda i “vuoti” tra un’operazione e la successiva.

Scusa se sono un po’ nebuloso. :-/


#10

di astrarre con i citati Wee e Borges, Seaside (evoluzione di Borges
in Smalltalk), UCW (Common Lisp), SISCWeb (Scheme su JVM)…
ANATEMA!

Esagerato. :slight_smile:

Borges ha tratto ispirazione da Seaside e non viceversa. Seaside 2
per la precisione.
Bisogna dare a Cesare (smalltalk/Borges) cio’ che e’ di Cesare.

Sì, mi sono semplicemente confuso con Iowa, che Avi sviluppava in Ruby
prima che passasse a Squeak.

E se vogliamo dirla tutta le continuations sono state introdotte in Scheme
negli anni '70. :slight_smile:

Non penso che i meriti di Mr Sussman e Mr Steele siano stati messi in
discussione nel thread. :slight_smile:


#11

On 5/10/06, Massimiliano M. removed_email_address@domain.invalid wrote:

Sì, mi sono semplicemente confuso con Iowa, che Avi sviluppava in Ruby
prima che passasse a Squeak.

E se vogliamo dirla tutta le continuations sono state introdotte in
Scheme
negli anni '70. :slight_smile:

Non penso che i meriti di Mr Sussman e Mr Steele siano stati messi in
discussione nel thread. :slight_smile:

No, neanch’io. E’ solo che ogni tanto vengo posseduto dalla mia nemesi
pedante… :wink:

Ciao
Giuliano


#12

Io nel frattempo mi propongo di inventarmi qualche semplice esempio per
rendere chiaro quando usare le continuations.

qualcosa di veramente immediato.

un pò come hanno fatto qui per i patterns:
http://www2.ing.puc.cl/~jnavon/IIC2142/patexamples.htm

guardate il link, è veramente forte.

On 5/10/06, Piergiuliano B. removed_email_address@domain.invalid wrote:


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/