Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [ANN] A volte ritornano...

Come nelle trame dei peggiori film d'orrore, a volte ritornano.
E ritornano per proporvi il Falcon, giunto alla quinta versione Prebeta.
Questo punto dello sviluppo, dal quale procederemo verso la release Beta e
quindi verso la 1.0, è segnato dalla stabilizzazione delle API di embedding
e delle strutture del linguaggio, nonché da una maggiore usabilità dei
semplici, ma efficaci, tool.
Ma siccome siamo fra amici, bando al gergo tecnico e via al "cuore in mano".
Non mi sono fatto più vivo fino ad ora poiché, per vari motivi, il codice
di Falcon cambiava troppo velocemente e troppo radicalmente per garantire
un ambiente di sviluppo stabile a chi avesse voluto usarlo per fare
qualunque cosa più complessa di semplici script da "system administrator".
Anche il controllo di errore era abbastanza lascivo, nel senso che alle
volte trovare e risolvere un errore segnalato dal compilatore richiedeva
una certa conoscenza dei meccanismi interni del linguaggio. 
Tutto questo è passato, e anche la stabilità del motore, ora usato in
applicazioni business-critical nel mondo della finanza, è adesso adeguata a
supportare qualsiasi tipo di sviluppo.
Dopo l'introduzione generale, veniamo al sodo:
Perché un ATista dovrebbe essere interessato a usare Falcon per scrivere AT?
Falcon è un linguaggio object-oriented con grammatica semplice ma potente,
che riproduce alcune delle più interessanti features di TADS e Inform, e ne
propone molte altre utilissime a chi modella AT, come le funzioni a stato e
le classi con ereditarietà multipla, il controllo di flusso per eccezioni e
cosette simili, ma che al contrario dei primi due linguaggi è un VERO
linguaggio di programmazione, pensato per essere impiegato in qualsiasi
ambito (con una forte predilezione per gli ambienti embedded).
La grammatica di Falcon è di diversi ordini di grandezza più potente di
quella degli altri linguaggi di script oggi esistenti, inclusi Python e
Perl, e consente agli ATisti di usare "trucchi" noti nel mondo AT ma fino a
ieri impensabili in linguaggi ritenuti "seri", come ad esempio
l'assegnazione di funzioni a proprietà di oggetti, creando così metodi al
volo, o il passaggio di funzioni e metodi come parametri di altre funzioni
o metodi.
Essendo pensato per l'embedding, il motore di Falcon può essere utilizzato
anche da quei programmatori che, intendendosi di grafica e/o 3D, volessero
realizzare un motore di AT moderno (leggi chara-game alla giapponese
piuttosto che AT), e che necessitassero di un buon sistema di scripting.
Con il supporto nativo per l'internazionalizzazione, una AT scritta in
Falcon potrebbe essere facilmente portata in varie lingue, persino lingue
assai esotiche come il cinese o l'hindi, semplicemente traducendo i testi e
scrivendo un parser adeguato alla struttura grammaticale della lingua
ospite (Questo seguendo alcune regole per la renderizzazione di testi
parametrici che sono possibili con Falcon, ma assai ardui da realizzare in
Ruby e Python).
E ora le dolenti note: nonostante tutto il lavoro svolto, mancano ancora
alcune features che sarebbero importanti per gli scittori di AT, come ad
esempio una libreria portabile di controllo del terminale a caratteri e il
così detto "pretty print", ossia la formattazione precisa dell'output.
Tuttavia, questi punti rientrano tra i primi task dello sviluppo che va
dalla pre-beta alla beta, e saranno quindi disponibili a brevissimo. 
Secondo la mia esperienza e le mie stime, direi assai meno del tempo
necessario per preparare un world model adeguato e per realizzare un parser
generico abbastanza sofisticato (il mio riferimento è il parser
contestualizzato di inform).
Quindi, se avete idea di scrivere una vostra avventura, il Falcon ha bisogno
ancora di qualche mese per esservi d'aiuto. Se invece vi prudevano le mani
nel desiderio di scrivere un world model proprio come lo volevate voi, o se
avevate intenzione di scrivere un motore per media innovativi (i.e. AT 3D),
Falcon è, da oggi, quello che fa per voi.
Se siete interessati, o anche solo curiosi, l'indirizzo del sito è
http://www.falconpl.org
Potete iscrivervi al Forum o lasciare una riga di risposta a questo
messaggio. 
Ci sono molte cose da fare, ad esempio organizzare un sito per "progetti"
legati al falcon, come sarebbe i.e. un motore/libreria per le AT. Ma se vi
va, cercheremo di darvi il massimo supporto. Ciò di cui ha bisogno un nuovo
linguaggio è un campo di test ampio e complesso, e, come ho sempre
sostenuto, le AT sono assai ampie e complesse.
Cordiali saluti,
Giancarlo Niccolai.
 

 E ritornano per proporvi il Falcon, giunto alla quinta versione Prebeta.
Grande.
Una nota... l'icona è troppo FF oriented ;-)

bellissimo ma .... non ho capito molto di quello che hai scritto :D

 Come nelle trame dei peggiori film d'orrore, a volte ritornano.
Meno male che tornano cose cosi' buone. Ci sto dando un'occhiata e ho 
visto un bel po' di cose interessanti.
Un unico dubbio: non c'e' una struttura ad albero built-in, vero?
bye
-- 
Paolo Lucchesi - pluc...@NOSPAMtin.it

E ritornano per proporvi il Falcon, giunto alla quinta versione Prebeta.
Complimentoni per il lavoro ciclopico! Penso a Inform 7 e mi viene anche un po'
da ridere: son proprio uguali, eh? ;-))
PaoloM

 
Assolutamente no. La macchina virtuale, quando parte, è linda come il
sederino di un bimbo (pulito); anzi, in linea teorica è possibile rimuovere
(leggi, sostituire) anche le classi fondamentali come i.e. la classe usata
per segnalare gli errori runtime.
Ma ho voluto dare un supporto "startup" ai falconieri con il costrutto
degli "object". Lo statement "object", similmente a quello che avviene in
Inform, crea una istanza unica di una classe "invisibile", e la rende
disponibile all'avvio dello script, anche nel caso in cui la "main" dello
script si trovi in un altro modulo.
Quindi, un oggetto dichiarato in un modulo A (i.e. il tuo world model) puo
creare le strutture necessarie ad accettare oggetti dichiarati in un modulo
B (i.e. i tuoi verbi) e C (i.e. le tue stanze), questo in modo più o
meno "automagico". 
In breve, non è il linguaggio stesso che crea un albero del tuo mondo, ma ho
inserito nel linguaggio features che ti consentono di crearlo da solo,
molto facilmente. 
Ad esempio:
Object worldModel
  ...
  init
     ... creo la radice del mondo...
  end
  function addRoom( aRoom )
    ...
  end
end
class Room
  init
    worldModel.addRoom( self )
  end
end
//=====
A questo punto, nella tua storia puoi scrivere
Object TheDarkRoom from Room
  ...
end
e questa verrà automagicamente aggiunta al tuo mondo.
//=====
Non è proprio vero che non ho fatto assolutamente niente in questo ambito...
a dire il vero ho già preparato alcune classi template come queste, e le ho
integrate in un motore che accetta comandi da più sorgenti via coroutine
(in breve: la stessa storia può essere giocata in solitario,
collettivamente via rete o persino in modalità mud, se prevedete queste
possilità nella struttura del gioco), ma a parte le classi scheletro il
world model e il parser, al momento, sono vuoti e tutti da costruire.
Giancarlo.

 possilità nella struttura del gioco),
Io, che capisco di programmazione quanto ne capisco di fisica
quantistica ho colto solo questa parte del tuo post! :)
Grande! :)
Rob


ovviamente anche il mio post era ironico e si riferiva alla mia
discreta ignoranza :)