Newsgroup: it.comp.giochi.avventure.testuali
Titolo: Inform 7: public beta

Sembra che ci siamo. Graham Nelson ha annunciato il rilascio di una public beta
di Inform 7.
http://www.inform-fiction.org
(tra l'altro vedo il restyling del sito, molto elegante).
La cosa potrebbe essere molto eccitante. Diamoci un'occhiata.
PaoloM

 La cosa potrebbe essere molto eccitante. Diamoci un'occhiata.
HAPPY INFORMING!
Giovanni

Nuove versioni di Zoom e Windows Frots nei giorni scorsi...
Ehm.... Giovanni.... a quando le Infit per I7?? ;-))
PaoloM

Paolo Maroncelli ha scritto:

Sto leggendo la documentazione... ma o sono stanco io e ho la mente 
annebbiata oppure non c'è nulla nella documentazione relativamente a I7 
e lingue diverse dall'inglese. Ho appena chiesto delucidazioni a Graham.
Comunque per INFIT 3 dopo la release della beta (non so quando, 
probabilmente ci vorrà l'estate per qualcosa di funzionale), lo sviluppo 
verrà gestito su un server SVN e con un sistema di bug tracking in modo 
che chiunque di voi possa collaborare allo sviluppo.
HAPPY INFORMING!
Giovanni


Giovanni

 una JPG di più di 500Kb in homepage!!!!)
Sito inguardabile con firefox... e' tutto sovrapposto.
Niente versione Linux :(
E il concetto di fare tutto da interfaccia grafica... no, mi sembra 
troppo dispersivo (anche se do' punti extra per il sistema di 
testing)... da quel che ho capito poi alla fine è tutto ricompilato in 
inform 6 o poco più...
Prime impressioni sul nuovo linguaggio... NOTA non ho ancora letto il 
manuale, non lo posso provare quindi ho SOLO osservato gli esempi. 
Conclusioni alla fine, se non vi importa del lato tecnico o non ne avete 
voglia saltate. Spoileraggio minore da incollamento di codice...
A parte che è ANCORA più verboso del cobol... spero ci siano delle 
enormi autocompletion a disposizione... sembra che lo scopo sia simile a 
quello del cobol in effetti (doveva piacere ai ragionieri!)... inform 
deve piacere agli scrittori! Sfortunatamente non è ancora stato 
inventato un modo per eliminare la struttura algoritmica della 
programmazione. Altra cosa è il fatto che ci siano righe ultra-lunghe... 
probabilmente è dovuto all'editor integrato? Mah. Fatto sta che si fa 
una fatica boia a studiare sti sorgenti.
La suddivisione in capitoli e in sezioni... mah... mi sembra 
completamente arbitraria. Abbiamo formalizzato le cornicette nei commenti :P
Poi la mia impressione è che abbia 'mimetizzato' un sistema esperto con 
il linguaggio naturale... la storia tristemente insegna che questo 
genere di approccio non ha MAI funzionato bene (alla fine è la 
limitazione di ALAN, fra le altre cose). La programmazione dichiarativa 
è efficace solo fino ad un certo punto poi o 1) non è sufficientemente 
potente o 2) diventa troppo complessa per essere utilizzata efficacemente
Mi spiego... nell'esempio 'Bronze'... Dice:
Definition: a thing is scented if the scent of it is not "nothing".
è solo un modo spaventosamente complicato per dire...
scented(THING) :- scent(THING, X), X <> "nothing"
(ehm... pseudo prolog :D non credo possa essere neppure una clausola di 
Horn visto che c'e' una negazione ma sono arrugginito in logica). Molto 
piu' probabilmente è visto come una funzione booleana (predicato) su 
'thing' che controlla il contenuto di scented...
Oppure, una definizione 'algoritmica' (per le porte):
To say (item - a thing) direction:
	let place be a random room;
	let the place be the other side of the item;
	if the place is visited, say "[way through the item] to [the place in 
lower case]";
	otherwise say "[way through the item]".
È solo un modo molto complicato per una sequenza con una selezione (non 
proprio, il "let place be a random room" è evidentemente una clausola di 
unificazione, non è immediatamente esprimibile in maniera 
dichiarativa)... anche se è APPARENTEMENTE più leggibile non lo è 
necessariamente da scrivere (questo 'inglese' è in realtà una grammatica 
formale, non dimentichiamolo!). Per esempio (suppongo, è solo una prima 
analisi...) "the X of the Y" si applica con X che è un attributo e Y una 
variabile (Y è stata dichiarata nell'intestazione: "(item - a thing)" ).
D'altra parte "way through the X" mi sembra piu' una frase ad hoc. È 
curioso anche che al posto del tipico else abbia deciso di usare 
otherwise... altri 5 caratteri in più da scrivere :P
Un altro esempio...
Rule for printing the name of something (called target) which is not 
visible while echolocating:
	say "[roman type]";
	if the target is the player
	begin;
		say "yourself";
		rule succeeds;
	end if;
	let place be the holder of the target;
	let way be the best route from the location to the place;
	if way is a direction, say "[way]";
	otherwise say "[if the target is in location]immediate 
vicinity[otherwise]middle distance[end if]".
Questa è lampante, una regola da sistema esperto con tanto di firing 
condition... nonchè lo 'scamuffamento' linguaggio naturale... begin; end 
if; ? (per insistere sulla verbosita'... "let place be the holder of the 
target". In qualita' di programmatore vedo molto piu' chiaro un "place = 
target.holder"). Un'altra tecnica interessante che noto è 
nell'espansione delle stringhe: "[if the target is in location]immediate 
vicinity[otherwise]middle distance[end if]". Un frammento di codice 
nella stringa, la prassi comune, per esempio, nella generazione di 
pagine html. QUESTO aumenta effettivamente la leggibilità... alzi la 
mano chi non ha mai fatto dei rami di if pieni di print!
L'iterazione "repeat with item running through handled things in the 
location"... è un objectloop, ne più ne meno. Anche qui con un bel 
begin; end repeat;
"Understand "search" as searching."
D'accordo una riga di grammatica/definizione di azione. Più complessa 
(ma solo apparentemente) c'è:
Understand the commands "play" or "shake" or  "ring" as "hit". 
Understand "ring [ringer]" as attacking.
Understand "use [a ringer]" as attacking.
L'ultima è una grammatica condizionata alla classe (cosa già fattibile 
in inform 6, comunque). A proposito di classi.
Vediamo una definizione di classe...
A staircase is a kind of door. A staircase is usually open. A staircase 
is seldom openable. Understand "stairs" or "stair" or "staircase" as a 
staircase. Understand "upstairs" or "downstairs" as a staircase. The 
description of a staircase is usually "[The item described] leads [item 
described direction]."
Qui oltre alle evidenti descrizioni dei nomi previsti, secondo me ci 
sono due cose interessanti... "seldom" e "usually". A colpo d'occhio 
magari non sembra ma... guarda, sono solo i valori di default! staircase 
has open, staircase has ~openable. Similmente per la description...
Ridirezione delle azioni:
Instead of climbing a staircase:
	try entering the noun.
Una complicazione IMHO non necessaria... "change the sound of the item 
to "silence";"... perchè non 'let the sound of the item', per esempio? 
Probabilmente 'let' introduce variabili locali...
Sembra che poi la visibilità sia stata spostata dalla libreria al 
linguaggio...
Visibility rule when examining the trapdoor:
	if in darkness
	begin;
		if the trapdoor is not scenery
		begin;
			say "You can't see very clearly in this light, of course, but you 
lean close and squint...";
			there is sufficient light;
		otherwise;
			there is insufficient light;
		end if;
	otherwise;
		there is sufficient light;
	end if.
Il "there is" è evidentemente il return... ma la cosa più importante è 
che la questione non è decisa dai nomi delle funzioni... bisogna vedere 
se poi la cosa è estendibile o è ad-hoc (personalmente ODIO le soluzioni 
ad-hoc)... sarà possibile definire una... Udibility rule? o forse con 
Visibility si intende solo la messa in scope... e la Reachability? 
Bisogna indagare...
Understand "squint" as a mistake ("You squinch your eyes, but do not 
substantively change what you're able to see.").
UN'ALTRA formula da ricordarsi... al posto di, chessò, instead of 
squinting ... o forse c'è una ragione particolare legata al rule system. 
O semplicemente non avanza il contatore dei turni...
In effetti poco dopo dice:
Instead of attacking the bronze gong:
	say "You strike the gong, but to your disappointment, nothing happens."
Un'altra 'funzione':
Definition: a thing is mentionable:
	if it is the player, no;
	if it is a view, no;
	if it is the generic surroundings, no;
	yes.
(strano, avrei GIURATO che finisse con 'otherwise, yes'... non trovo 
regolarità d'uso nella grammatica...)
Ma attenzione... alla lunga si vede che nel 'linguaggio naturale' c'è 
molto rumore di fondo:
To say regional area:
	if in darkness, rule succeeds;
	if location is in Basement, say "Basement";
	if location is in Great Outdoors, say "Great Outdoors";
	if location is in State Rooms, say "[if location is in 
Hourglass]Hourglass, [end if]State Rooms";
	if location is in Apartments, say "Apartments";
	if the location is in Stinky, say "Control Rooms";
	if location is in Old Castle, say "Old Castle";
	if location is in Enclosed, say "Rose Cloister";
	if location is in Main Castle, say "Main Castle".
ma come... prima dici sempre "if the location" e ora dici "if location" 
tranne una volta in mezzo dove usi "if the location"? proprio come il 
cobol! Bene, ora gli autori avranno la scusa di scrivere descrizioni 
brevi perchè "le dita si sono consumate a scrivere il codice" :DDD
Altro elemento innovativo, le scene:
The Search is a scene. Search begins when play begins. Search ends when 
the player can see the Beast.
Scouring Main Castle is a scene. Scouring Main Castle begins when play 
begins. Scouring Main Castle ends in completion when every room in the 
Main Castle is visited. Scouring Main Castle ends in irrelevance when 
Search ends.
direi che le scene costituiscono il 'contesto' in cui le regole vengono 
convalidate... ma evidentemente possono essere attive più scene. Idea 
interessante, bello.
Ecco un caso in cui la leggibilità mi sfugge:
Before going to an unvisited room (called destination) during Search:
	if destination is the Crystal Bedroom or Gilded Balcony, continue the 
action;
	if destination is in the State Rooms and the windchimes are in the Rose 
Garden, continue the action;
	if destination is dark and the player is not carrying the candle, 
continue the action;
	if most of the rooms are visited
	begin;
		move the Beast to destination;
	end if.
si tratta evidentemente di una regola before. È interessante il fatto 
che sia triggerata da una condizione arbitraria (destination.unvisited 
&& 'search' in active_scenes), non legata ad una location specifica. Una 
specie di 'each_turn'. D'altra parte è un rule system, viene eseguito ad 
ogni turno (speriamo lo abbia ottimizzato).
Ma... attenzione "most of the rooms". ESATTAMENTE cosa significa? Tutte 
meno una? almeno una? piu' della meta'? di tre quarti? Direi che bisogna 
consultare il manuale. I quantificatori imprecisati sono notoriamente 
ostici, a meno di non toccare la fuzzy logic (cosa che comunque sembra 
che Inform 7 non abbia). Potrebbe essere interessante comunque :P
Altra feature comoda direi che sono le tabelle... praticamente 
sostituiscono dei case lunghi, ma sono dichiarative. Direi che ben si 
adattano allo scopo.
Altra cosa, direi UTILISSIMA, è la divisione del before_azione...
Check facing:
	let the viewed item be the room noun from the location;
	if the viewed item is a room, try looking toward the viewed item instead.
Carry out facing:
	say "You can't see anything promising that way."
... proprio come in TADS, per la cronaca. Anche questo mi piace :D
La vecchia cara include...
Include Case Management by Emily Short.
con i credits incorporati, lol!
A person can be staid or hurrying. The player is staid.
Uhmmm... un tipo enumerato o qualcosa del genere, forse pensata per 
definire macchine a stati... e ora una cosa veramente succosa (sorry ma 
ste righe sono VERAMENTE lunghe):
Check approaching:
	if the noun is the location, say "You're already in [the location]." 
instead.
Carry out approaching:
	let initial location be the location;
	while the player is not in the noun
	begin;
		if the noun is adjacent to the location
		begin;
			let heading be the best route from the location to the noun, using doors;
		otherwise;
			if the player carries the candle, let heading be the best route from 
the location to the noun through visited rooms, using doors;
			otherwise let heading be the best route from the location to the noun 
through scouted rooms, using doors;
			if heading is not a direction
			begin;
				if the player carries the candle, let heading be the best route from 
the location to the noun through visited rooms, using even locked doors;
				otherwise let heading be the best route from the location to the 
noun through scouted rooms, using even locked doors;
			end if;
		end if;
		if heading is not a direction
		begin;
			say "You can't think how to get there from here." instead;
		end if;
		let destination be the room heading from the location;
		if location is initial location, say "You head ";
		if in darkness
		begin;
			if the location is initial location, say "uncertainly in what feels 
like the right direction, based on dimly apprehended light, and the 
movements of air[run paragraph on]";
		otherwise;
			if location is not the initial location
			begin;
				if destination is the noun, say "And [if the initial location is 
dark]then[otherwise]finally[end if] ";
				otherwise say "Then ";
			end if;
			say "[heading] to [the destination in lower case]. [run paragraph on]";
		end if;
		if the destination is not the noun
		begin;
			change the player to hurrying;
			silently try going heading;
		otherwise;
			say "[paragraph break]";
			change the player to staid;
			try going heading;
		end if;
		if the player is not in the destination
		begin;
			change the player to staid;
			rule fails;
		otherwise;
			if initial location is dark and destination is not dark and 
destination is not the noun, say ", emerging into [the destination in 
lower case]. [run paragraph on]";
		end if;
	end while.
 
Allora.... sembra complicata ma non lo è... voglio attirare l'attenzione 
sulla clausola "let heading be the best route from the location to the 
noun, using doors;". A voi le implicazioni di quel che significa :D
Bisognerà poi vedere QUANTO sia flessibile nell'uso...
Il 'silently' è l'equivalente di un certo flag nell'attuale libreria...
Poi ci sono altre cosette ma dovrò indagare meglio...
CONCLUSIONI
L'evoluzione del linguaggio NON mi è piaciuta. Troppo verboso, e il 
fatto che venga 'imposto' (tra virgolette) un ambiente di sviluppo fa 
scadere l'usabilità (chiamatemi masochista ma io come editor da anni uso 
solo vim :D). Ho anche la sensazione che questo tipo di 'programma 
prosaico' renda complessa la ricerca (non per niente nell'ide è stata 
inserita una index facility).
Per il resto dal punto di vista delle potenzialità bisogna ammettere che 
sono state inserite delle grosse novità... ovviamente le regole a firing 
condizionato (con il meccanismo delle 'scene' per dare contesto). Il 
sistema delle Definition è di fatto un meccanismo deduttivo (bisogna 
vedere poi com'è implementato). Il path finder è indubbiamente utile, in 
alcune occasioni.
D´altra parte sembra che diverse cose siano state spostate dalla 
libreria verso il linguaggio. Questo è sia un bene che un male... da una 
parte ne viene semplificato l'uso, dall'altra ne viene sacrificata 
l'hackabilità...
Datemi una sintassi regolare e un compilatore tradizionale e quasi tutti 
i malus svaniscono! Così com'è mi dispiace ma fa venire il latte alle 
ginocchia :P

 con i credits incorporati, lol!
I credits devo essere incorporati, perché come ha spiegato Graham su 
raif, le estensioni "ufficiali" (e per ufficiali si intendono tutte 
quelle pubblicate sul sito di Inform) dovranno essere pubblicate dagli 
autori con Licenza Creative Commons, che come molti di voi sapranno 
obbliga a indicare l'autore.
[Snip]
Concludo. Ancora non so se mi piace o no. Ma di una cosa sono sicuro: 
utilizzo linguaggi di programmazione quotidianamente per lavoro e almeno 
per l'IF qualcosa di diverso mi intriga particolarmente. Vedremo. C'è da 
studiare un po' (sul sito c'è anche un lungo documento scritto da Graham 
intitolato "Natural Language, Semantic Analysis and Interactive Fiction" 
con spiegata tutta la teoria dietro il lavoro su I7).
HAPPY INFORMING!
Giovanni

 con spiegata tutta la teoria dietro il lavoro su I7).
Preparati ad una flebo di quantificatori... è di impostazione matematica.
Le novità non sono male, ma la sintassi è orrida... se mi danno qualcosa 
di più regolare bene, altrimenti sono troppe cose (futili) diverse da 
tenersi a mente...

 Preparati ad una flebo di quantificatori... è di impostazione matematica.
Allora, non ho studiato matematica (studio ancora, veramente, nel tempo 
libero dal lavoro) per niente! :-)
Giovanni

 La cosa potrebbe essere molto eccitante. Diamoci un'occhiata.
E' molto interessante.
Chissa'...
Forse e' la volta buona che inizio ad usare Inform.
Rob