Newsgroup: it.lavoro.informatica
Titolo: Linguaggi di Programmazione - bilanciamento

Ipotizzando un nuovo linguaggio di programmazione, mi trovo di fronte ad
una scelta. Un ottimo linguaggio di programmazione dovrebbe essere facile
da usare e robusto , nel senso che dovrebbe portare il programmatore a
scrivere codice sempre o quasi in maniera corretta (per corretta intendo
che rispecchi le specifiche e i requisiti). Questo porta a fare delle
scelte per bilanciare queste due proprietà. Robustezza => costrutti
formali e difficoltà di leggibilità o programmazione (il tutto con
relativa prova di correttezza e coerenza). Facilità => linguaggio meno
formale, con più gradi di libertà che porta ad avere bug o basse
performance (non certificate), ma più facile da leggere e scrivere.
Detto questo: sareste disposti ad usare un linguaggio più complicato, ma
che una volta appreso porta a produrre codice più robusto, a discapito
della facilità di utilizzo? 
 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 della facilità di utilizzo?
potresti fare degli esempi espliciti? io gli assunti che hai fatto sulla 
difficoltà di utilizzo a scapito della robustezza non li condivido mica a 
priori...

 discapito della facilità di utilizzo? 
Personalmente ci vedo una contraddizione.
Se il linguaggio è complicato, la probabilità di 'misunderstanding' si
alza.
-- 
Ciao!
Luca

 priori...
Hai ragione! Partiamo dal presupposto che un linguaggio come Java o C# non
da una certificazione delle sua correttezza. L'unica cosa che si può
pensare di fare per garantire la sua robustezza è fare testing. Ora per
quano esaustivo esso possa essere, nessuno a priori può dire che non vi
sono più bug, solo perchè non ne sono stati scoperti altri. Detto questo,
mi incuriosisce l'idea di pensare ad un linguaggio che cerchi di produrre
delle specifiche formali partendo da un linguaggio più "semplice" rispetto
a linguaggi tipo  quello usato da NuSMV o CMurphi. 
La mia idea è: prendo la specifica cartacea,faccio design basato su
componenti, scrivo il codice, produco una rappresentazione formale
speficando quale proprietà voglio verificare tramite linguaggio ( grafi
OBBD o macchina a stati finiti), il software mi dice se tutti gli stati
finali nei quali quella proprietà è soddisfatta sono stati raggiunti o
meno.   
Oltre a questo dovrebbe essere possibile dare un linguaggi che me ne
descrivi l'architettura ( ossia come i moduli sono interconnessi) e fare
dell'instrumentation per monitorare le perfomance a livello applicativo. 
Così "posso" certificare che la mia applicazione corrisponde alla
specifiche ed ha un basso e controllato numero di bug a differenza di
prima. 
PS: pensa a contesti al di fuori delle web application.
 
PPS: non prendetemi per pazzo! :-)


 Thompson wrote:


Hai ragione, ma a volte il numero di righe di codice possono diminuire
notevolmente. La difficoltà di lettura "dovrebbe" portare a costrutti più
compatti. 
Penso a Python e le lambda function e list comprehensions.


 PS: pensa a contesti al di fuori delle web application.
Ritengo che quello che dici tu, più o meno, già si faccia in
particolari ambiti molto critici (es. industria aerospaziale), dove
ovviamente non basta "fare i test"  tradizionali, e dove pure
(altrettanto ovviamente) non si usano neppure i linguaggi generici
(Java, C#), a parte  C che sta dovunque.
"Matematicizzare" la dimostrazione che un dato sorgente corrisponde a
tutte le specifiche (funzionali e non) è quindi una cosa che,
probabilmente, si può fare perfino in ambito gestionale. Ma è talmente
complessa e costosa che il gioco non vale la candela.
Meglio avere 1000 "cinesini" pronti a scattare per sistemare lì per lì
il codice sgangherato :-)

 il codice sgangherato :-)
Su questo ti do pienamente ragione, è per questo vorrei trovare un
linguaggio di "compromesso". Calcola che una volta le specifiche si
facevano a mano e con una schiera di matematici. Ora con le tecniche di
verfica automatica, si può sperare in qualcosa di più abbordabile, almeno
credo.
Comunque, tentar non nuoce. 
Grazie a tutti per le risposte .


 componenti, scrivo il codice, produco una rappresentazione formale
Tutto dipende da COSA vuoi fare.
Se è per fare un software che simula un circuito integrato, no
problem, visto che i circuiti vengono efficacemente rappresentati con
schemi, puoi pensare un linguaggio che partendo da uno schema di
interazione tra componenti scriva il codice del simulatore.
Se invece parli di un sito, che viene rappresentato con immagini e
user stories e tante tante parole.... te lo puoi scordare.

 user stories e tante tante parole.... te lo puoi scordare.
Ovviamente per la view di un sito non è fattibile e  ci sono altri schemi
e linguaggi descrittivi per definire immagini, user stories etc.. (webML).
Per la parte relativa al middle-tier, si potrebbe fare. Questi tipi di
linguaggi di solito sono usati per sistemi reattivi, ma che cos'è un sito
web se non un programma che reagisce a vari impulsi esterni dati
dall'utente ? 


 Per la parte relativa al middle-tier, si potrebbe fare. Questi tipi di
Il sogno di disegnare lo schemino ed il computer scrive il software
non funziona, ci hanno già provato in tanti, in tanti ambienti.
O meglio, funziona, ma il risultato è troppo scarso perchè troppo
limitato e schematico per le interfacce umane.



Dipende da cosa significa complicato.
Ad esempio la definizione formale di Haskell è abbastanza "semplice", ed 
il linguaggio permette di scrivere codice abbastanza robusto.
Tuttavia Haskell è abbastanza complesso, specialmente per chi vi si 
avvicina la prima volta (anche la seconda e la terza...).
Saluti  Manlio Perillo

 della facilità di utilizzo?
 
Dipende da cosa ci devo fare.
In linea generale ho la tendenza a scrivere codice efficiente quindi ben venga
il linguaggio più complicato e robusto.
Se per linguaggio complicato e robusto intendi Java non sono d'accordo in
quanto io lo colloco tra quelli facili.
 
 
Ciao
 
-- 
Caronte
-- 
Inviato da 
Newsgate.Localinfo.IT
 
http://newsgate.localinfo.it
Powered by Localinfo.IT 
http://www.localinfo.it

 Caronte
