Changes between Version 21 and Version 22 of Variante2


Ignore:
Timestamp:
Sep 29, 2006, 10:33:55 AM (18 years ago)
Author:
soujak
Comment:

Interpreter visitor: commenti sulle definizioni e sulle gerarchie di ambienti

Legend:

Unmodified
Added
Removed
Modified
  • Variante2

    v21 v22  
    8585nostri ''visitor'': `Interpreter` e `PrettyPrinter`.
    8686
     8720060926-1355 [[BR]]
     88L'eterogeneita' dell'albero rispetto al modello (inteso come espressioni) pone
     89problemi rilevanti, apparentemente non risolvibili se non a spese dell'eleganza
     90progettuale finora perseguita.
     91La soluzione scelta e' la creazione di un supertipo di ogni entita' del modello,
     92il che si traduce nella creazione dell'interfaccia `SchemeEntity`. Si e' inoltre
     93pensato di aggiungere anche una classe astratta `SchemeEntityAbstract` che
     94permette un'implementazione di default.
     95
     96
    8797=== API di manipolazione generica ===
    8898
     
    118128una lista che li contiene?
    119129 
     13020060927-1813 [[BR]]
     131Le API di manipolazione del modello (''getters'' e ''setters'') soffrono della
     132stessa incoerenza di Java riguardo ai tipi: i valori di tipo
     133`Scheme[Expression | Value][Int | Bool]` mantengono campi interni sotto forma di
     134tipi primitivi mentre il resto del modello sfrutta oggetti. Tale eterogeneita'
     135si manifesta in una strategia di passaggio/ritorno dei parametri che e',
     136rispettivamente, per valore e per riferimento.
     137
     138
    120139
    121140=== API di manipolazione specifica ===
     
    213232Rimane insoluta una questione: come innescare la valutazione, ora che il metodo
    214233`applyTo()` e' da considerarsi deprecato? Qualora si abbia il tempo di rendere
    215 utilizzabile l'intero sistema sara' necesario elaborare una soluzione.
     234utilizzabile l'intero sistema sara' necessario elaborare una soluzione.
     235
     23620060927 [[BR]]
     237Invece di mantenere traccia dei vari ambienti locali (in caso di gerarchie di
     238ambienti locali) sfruttando l'annidamento delle chiamate di `visit()`, si
     239potrebbe guadagnare in eleganza utilizzando una cara e vecchia ... pila.
     24020060928-1736 [[BR]]
     241La profondita' della gerarchia degli ambienti e' troppo bassa da giustificare un
     242aumento della complessita' del codice.
     243
     24420060928-1910 [[BR]]
     245L'`interpreter` portebbe essere arricchito con un metodo che, preso in input un
     246programma (inteso come lista di definizioni), faccia partire la valutazione.
     247Il che significa iterare su tale lista arricchendo l'ambiente globale per poi
     248innescare la valutazione di ogni applicazione di funzione `ExpressionApply`.
     249
     25020060929-0830 [SoujaK] [[BR]]
     251Riguardo a `declare()` e `define()`, esse sono, in realta' parte del meccanismo
     252di valutazione, dal momento che, di fatto, si preoccupano della chiamata
     253`accept()` sull'espressione parte della definizione. Considerando inoltre che
     254l'ambiente e' parte non marginale del processo di valutazione, reputo utile lo
     255spostamento dei due metodi all'interno del ''visitor''. [NB: e' necessario
     256chiarire se l'accorpamento dei due metodi non precluda l'applicazione di qualche
     257strategia (si pensi ai doppi declare... )]
     258La proposta e'da inserire nella lista degli enhancment a bassa priorita'.
     259
    216260
    217261=== Iterator ===
    218262
    219 200606??-???? [[BR]]
     263200606?? [[BR]]
    220264Gli iterator sono da intendersi come esterni.
    221265
     
    230274  gerarchia di espressioni.
    231275
    232 
    23327620060927-2126 [[BR]]
    234277In merito alla questione iteratori infine si e' deciso di optare per la seconda
     
    241284utilizzando gli iteratori sulle entita' pur ignorandone la struttura.
    242285
    243 
    244286== Operazioni aggiunte: `contrib` ==
    245287