Quote:
Originariamente inviato da PGI-Bis
Circa l'asino io sarei stato un po più cauto  .
|
Perdona l'asino, non era rivolto a te ;-)
Quote:
Originariamente inviato da PGI-Bis
Sottolinerei ancora una volta, ad uso degli ascoltatori, che la questione è poco pratica: a me interessa e per curiosità personale e per amore delle opinioni altrui.
|
Forse è proprio per questo che finora tu abbia un unico interlocutore, guarda caso me
Quote:
Originariamente inviato da PGI-Bis
Dopo aver esaminato i sorgenti e preso le decisioni che deve prendere, APT lancia javac.
|
Comportamento di default, ma disattivabile tramite un'opzione da riga di comando. A me sembra di aver capito che APT non fa altro che processare le annotazioni e creare nuovi file sorgenti. Poi, per comodità, nel caso più comune chiama javac facendolo puntare ai file sorgenti generati. Ma fa parte del suo essere 'processore-programmabile'. Se invocasse javac dialogando con esso in maniera diretta (parlo sempre della piattaforma 1.5, non conosco la 1.6) e non tramite i nuovi *.java generati, allora sarei d'accordo con te nel dichiararlo un 'pre-processore programmabile', secondo le tue seguenti definizioni.
Quote:
Originariamente inviato da PGI-Bis
Il preprocessore di C fa la stessa cosa: esamina i sorgenti, esegue le macro e passa il prodotto al compilatore.
Dopo aver esaminato i sorgenti e preso le decisioni che deve prendere, javac 1.5 finisce il suo lavoro.
E' vero che il prodotto di javac è in qualche modo destinato alla JVM. Ma nel sistema javac non esiste alcun collegamento con la JVM. Detto altrimenti, javac non offre i propri dati in uscita come dati in entrata per la JVM. E' la JVM che deve prenderseli in via autonoma.
|
Ecco secondo me anche javac deve prendere in via autonoma i file generati da APT. Quest'ultimo non fa altro che far partire il processo javac con gli opportuni parametri.
Quote:
Originariamente inviato da PGI-Bis
Dire allora che un processore è qualsiasi programma che riceva dei dati in entrata, li trasformi (ricordo che anche l'identità è una trasformazione) e restituisca il prodotto della trasformazione, in qualsiasi forma.
Un preprocessore è qualsiasi processore che affidi il prodotto della propria trasformazione ad un altro processore.
Intenderei "affidare il prodotto" nel senso di "A avvia B usando come input di B il proprio output".
Per rispondere alla tua domanda, le proprietà essenziali di un processore sono:
1. riceve dei dati
2. li trasforma
3. restituisce il prodotto della trasformazione
Le caratteristiche distinguenti di un preprocessore, restando nella colonna dell'essenza, sarebbero:
4. usa il prodotto della trasformazione come input di un diverso processore
La faccenda comunque diventa intricata perchè occorrerebbe stabilire cosa di intenda per "diverso processore". Su questo non saprei cosa dire.
Ciao.
|
Dulcis in fundo i punti 3 e 4 mi sembrano ancora deboli: apparentemente il punto 4 è in contraddizione col punto 3, se nel punto 3 si sottintende che il processore 'restituisca' il prodotto della trasformazione alla stessa entità che gli fornisce l'input.