Newsgroup: it.comp.giochi.avventure.testuali
Titolo: Falcon è tornato...

Buonasera,
E' da un po' che non mi faccio sentire, nemmeno negli ambienti più intimi di
Terra d'IF e Mondi Confinanti. 
Il motivo di cotanta prolungata assenza è il progetto che ho portato avanti
per molto tempo, per quanto il mio lavoro e le mie possibilità me lo
abbiano consentito.
Finalmente, ho una versione sufficientemente affidabile da costituire la
base di sviluppo per diversi tipi di applicazione. Tra cui l'IF.
In questi giorni, sto impacchettando una release multipiattaforma per
windows e linux; sto già usando Falcon sul lavoro per scopi diversi, e pare
che non vi siano particolari problemi sul codice scritto fino ad ora.
Questo week-end produrrò alcuni pacchetti per i sistemi windows e linux. Per
i più curiosi e coloro che sono in grado di usare un compilatore e un
server CVS, il CVS pubblico è disponibile. Sono forniti progetti per
Kdevelop, Blodshed Dev-C++ e Visual Studio 6, oltre ovviamente al sistema
configure/make per GNU. Chiunque volesse aggiungere altre piattaforme,
ambienti di sviluppo o compilatori è il benvenuto.
Il sito di riferimento è
http://www.falconpl.org
Sto finendo di aggiornare le pagine, ma la nuova "survival guide",
aggiornata, con gli esempi testati, e con le nuove features spiegate in
dettaglio, è già disponibile.
Il CVS comprende una testsuite con oltre 130 programmi che, oltre a servire
da piattaforma automatica di testing, forniscono degli esempi aggiuntivi
rispetto al manuale. Vi è inoltre una directory samples che contiene alcuni
dimostrativi che richiedono un minimo di interattività.
--------------
Per quanto riguarda le features che più ci interessano, nell'anno circa che
ho impiegato a completare la macchina virtuale (in realtà meno, ma come
sempre, la vita si mette in mezzo a rovinare le cose serie), sono riuscito
a aggiungere funzionalità interessanti e innovative, che possono
consentire, fra l'altro un'agevole sviluppo di un world model adatto a
supportare l'IF.
Innanzi tutto, i tipi opachi sono ora affiancati da tipi ibridi oggetti
falcon/oggetti esterni, che possono servire ad esempio come handle di
oggetti multimediali.
Il modello degli attributi, prima costanti di compilazione, ora non richiede
alcun include; tutti gli attributi sono forniti da moduli falcon o C++, da
caricare via macchina virtuale. Niente più sporcizia da include.
Gli oggetti stand-alone, quelli alla inform per intenderci, si inizializzano
durante il link della macchina virtuale. Questo significa che sono, ad
esempio, in grado di auto-registrarsi a un "mondo" predefinito, o di
inizializzare variamente il modulo nel quale si trovano, oltre a loro
stessi. Se opportunamente derivati da una classe base pre-esistente, questa
operazione avviene in modo totalmente trasparente.
La semantica delle coroutine è stata ulteriormente potenziata, per fornire
un parallelismo leggero che consente, ad esempio, di gestire eventi in
background mentre il motore dell'IF gira senza interruzioni.
Il modello di serializzazione è stato ulteriormente esteso e rinforzato,
permettendo una completa serializzazione degli oggetti, incluse eventuali
modifiche effettuate sui metodi (i.e. tecnica del cambio di metodo per
variare il comportamento di un oggetto). Questo consente di serializzare e
deserializzare lo stato di un programma mantenendo il controllo delle fasi
di serializzazione/deserializzazione a livello di script.
------------
Molte cose non troveranno spazio in questa release pre-beta. Ad esempio, le
routine di pretty-print, le routine di internazionalizzazione e le
espressioni regolari saranno rimandate alla beta, così come le routine di
output avanzato (per ora solo input e print...) e le routine di interfaccia
grafica (una specie di AWT). Ma quello che c'è ora dovrebbe essere
sufficiente per creare un world model completo e un parser flessibile /
internazionalizzabile.
Ma... non posso fare tutto da solo. Per gli ardimentosi che desiderano
cimentarsi in questa impresa, la porta è aperta.
Cordiali saluti,
Giancarlo Niccolai.

Giancarlo, perche' non proponi queste cose, penso soprattutto gli
aspetti di internazionalizzazione, al gruppo rakontointeraktiva?
Rob

Premesso che sono in grado di comprendere solo parzialmente le cose che
elenchi (Ad esempio sono fuori dalla mia portata frasi come: "i tipi
opachi sono ora affiancati da tipi ibridi oggetti che possono servire come
handle di oggetti multimediali" ... )
Comunque mi interessava il discorso della macchina virtuale.
Sto appunto studiando l'argomento da qualche tempo. Mi servirebbe per
usarla nei miei progetti di elettronica. I microcontrollori odierni sono
molto potenti ma hanno pochi K di memoria programma. La soluzione e'
quella di interfacciarli con una la classica memorietta flash delle
macchine fotografiche. Molti megabyte a pochi soldi. A quel punto pero' si
ha un disperato bisogno di una macchina virtuale.
Esattamente la tua come funzionerebbe? Hai definito un set di istruzioni
custom tipo p-code a stack? Dove posso trovare maggior info?
Alberto.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

rgrassi wrote:

Scusa la risposta tardiva, sono stato preso...
Volentieri, ma chi sono?
Giancarlo.

 
Esattamente.
L'architettura "virtuale" è CISC, che su un software è vincente rispetto a
RISC. In altre parole, i tipi fondamentali e i PCODE sono molto complessi,
numerosi e potenti, ma questo consente di ridurre il numero di cicli
necessari alla macchina virtuale per "fare qualcosa di utile", spostando
quindi il mix istruzioni virtuali/istruzioni macchina verso queste ultime.
In altre parole; molte macchine virtuali non tipizzate, per sommare, imitano
una CPU fisica: caricano un registro dalla memoria, caricano un altro
registro dalla memoria, quindi effettuano la somma. La mia macchina
virtuale effettua tutto in una operazione (anzi, di più, dereferenzia anche
gli oggetto di tipo referenza). 
Postare altri dettagli qui sarebbe forse eccessivo. Non ho ancora scritto la
guida di riferimento della VM, ma ci sono istruzioni abbastanza dettagliate
nei file
include/falcon/pcode.h - c'è il formato delle istruzioni binare (bytecode) e
la lista dei codici, molti dei quali riccamente annotati.
src/vm/vm_run.cpp - è il codice che esegue i bytecode. Ogni bytecode è
eseguito da una funzione separata, e se hai dei dubbi sul funzionamento o
sul "perché" di qualche PCODE, le operazioni che vengono effettuate in
questo file sono ben commentate.
src/assembler/fasm_parser.yy - è la definizione della grammatica
dell'assembly.
src/flcdisass/* - è il disassemblatore che dal bytecode fornisce un dump
disassemblato, o addirittura un assembly sorgente modificabile e
ri-assemblabile.
Giancarlo.

 dettagliate(...)
Bene, gli daro' senz'altro una letta. Grazie.
Ho provato anche a sfogliare il tuo sito ma mi sono rimaste delle
curiosita' pratiche, molto terra-terra:
-Falcon cos'e'in pratica: un linguaggio o un sistema completo
linguaggio+sistema operativo+macchina virtuale+esecutore?
-ha un file system proprio?
-Vedo che menzioni tools di terzi, tipo il visual studio. Servono come
suite di programmazione, mentre il compilatore e l'esecutore lo fornisci
tu?
-Che scopo ha il tuo progetto (fare concorrenza a java e a mono)?
-Che target minimo ha il tuo sistema esecutore(ad esempio, pensi che
potrebbe essere usato come cross-tool di sviluppo per piccoli sistemi, con
poca ram) ?
Ultima domanda:
-Perche' stai portando avanti un progetto cosi' complesso? Passione
personale? E' una tesi? Speri di venderlo? ....
grazie ancora,
Alberto


 personale? E' una tesi? Speri di venderlo? ....
Certo, la passione conta... ma è principalmente che quello di cui avevo
bisogno, ossia uno scripting language veloce, semplice, elegante,
estendibile, che possa essere embeddato in qualsiasi applicazione in pochi
minuti e con impatto zero sull'applicazione stessa non c'era.
Giancarlo.

 Volentieri, ma chi sono?
Sto cercando di creare una comunita' di persone legate alla IF ma non
anglofona.
E' un gruppo di google e si chiama rakontointeraktiva.
Rob

rgrassi wrote:

Eccezionale, anche perché voglio che il modulo IF per falcon sia
internazionale.
Come funziona la cosa?
Gian.

 Come funziona la cosa?
Funziona che ti iscrivi al gruppo di google e proponi la cosa.
Non posso garantirti che funzioni, ma vale la pena di provare.
Rob