View Full Version : [python]I limiti del python
Spesso leggendo sui forum o discutendo con amici programmatori mi è capitato di
sentire che il python è inadatto a realizzare progetti particolarmente complessi a causa di alcune sue caratteristiche come la tipizzazione dinamica. Non conoscendo il python e avendo studiato seriamente solo il java chiedo a voi perchè la questione mi incuriosisce (sperando di non scatenare una rissa).
E per quanto riguarda le prestazioni invece, il python soffrirebbe di problemi di performance anche realizzando un compilatore?
Quali sono gli svantaggi di un linguaggio come il python rispetto al java? Quali i vantaggi?
Ziosilvio
19-07-2008, 12:01
Su quanto un progetto debba essere complesso perché Python non sia adatto, lascio la parola a cdimauro.
Faccio però notare che Zope (http://www.zope.org/) è realizzato in Python.
marko.fatto
19-07-2008, 12:26
chiedi a fek che ha avuto felici esperienze su grossi progetti con python :asd:
cdimauro
19-07-2008, 21:10
Spesso leggendo sui forum o discutendo con amici programmatori mi è capitato di
sentire che il python è inadatto a realizzare progetti particolarmente complessi a causa di alcune sue caratteristiche come la tipizzazione dinamica.
Ziosilvio ti ha fatto già un esempio. Altri ne trovi qui: http://www.python.org/about/quotes/ ;)
Sulla tipizzazione dinamica, ha pregi e difetti ovviamente. Io trovo preponderanti i primi.
Non conoscendo il python e avendo studiato seriamente solo il java chiedo a voi perchè la questione mi incuriosisce (sperando di non scatenare una rissa).
Allora ti propongo la lettura di alcune semplici slide scritte da Bruce Eckel: http://www.mindviewinc.com/downloads/pub/eckel/LovePython.zip
Passalo anche ai tuoi amici. Eckel non è un "tizio qualunque", e dovrebbe essere abbastanza noto a chi sviluppa in C++ e/o Java. ;)
E per quanto riguarda le prestazioni invece, il python soffrirebbe di problemi di performance anche realizzando un compilatore?
Dal primo link che ti ho riportato:
YouTube.com
"Python is fast enough for our site and allows us to produce maintainable features in record times, with a minimum of developers," said Cuong Do, Software Architect, YouTube.com.
;)Quali sono gli svantaggi di un linguaggio come il python rispetto al java? Quali i vantaggi?
Leggi la presentazione di cui sopra e dovresti avere più o meno un quadro sulla questione.
chiedi a fek che ha avuto felici esperienze su grossi progetti con python :asd:
Non è esattamente così. I problemi ci sono quando ci si affida a gente che utilizza uno strumento senza conoscerlo bene e/o senza adeguate metodologie di sviluppo.
Ovviamente non mi sto riferendo a Fran, ma a chi ha realizzato i progetti che ha poi utilizzato.
Fra l'altro che fine ha fatto fek?
E' un po' che non si vede.
Stanno consegnando Fable2?
Fra l'altro che fine ha fatto fek?
E' un po' che non si vede.
Stanno consegnando Fable2?
Non conosco personalmente fek ma da quello che lessi sul suo blog sembrava fossero in fase di pesante revisione finale.
Poi considerando che Molyneux ha annunciato che il gioco è finito ed in arrivo, li starà mettendo sotto torchio :sofico:
cdimauro
20-07-2008, 05:43
Fra l'altro che fine ha fatto fek?
E' un po' che non si vede.
Stanno consegnando Fable2?
Sono in fase di test intensivo per rimuovere quanti più bug possibile.
Comunque l'ultima volta che ha scritto è stato in una discussione sulle news dove ha ricevuto una sospensione (non sto qui a disquisire sull'accaduto per non infrangere il regolamento): credo sia questo il motivo per cui, da allora, non si fa più vivo. :(
Da quel poco che ho visto e soprattutto letto relativamente Python, del quale, come avevo promesso in altro thread mi sto occupando da pochissimi giorni peraltro, pare che la comunità intorno a Python si lamenti un po' di un paio di cose:
la prima è la gestione dei blocchi e delle chiusure che sarebbe molto più primitiva di quella che si trova ad es in Ruby, che è il linguaggio di raffronto più usato.
la seconda è che, nonostante ci siano alcune valide proposte in tal senso, ci sia una qualche resitenza ad inserire il design by contract in Python.
A occhio mi sembrano obiezioni corrette anche se, soprattutto sulla prima, devo indagare un po'.
cdimauro
21-07-2008, 09:38
Da quel poco che ho visto e soprattutto letto relativamente Python, del quale, come avevo promesso in altro thread mi sto occupando da pochissimi giorni peraltro, pare che la comunità intorno a Python si lamenti un po' di un paio di cose:
la prima è la gestione dei blocchi e delle chiusure che sarebbe molto più primitiva di quella che si trova ad es in Ruby, che è il linguaggio di raffronto più usato.
Penso che le critiche vengano piuttosto dalle comunità esterne a Python, e in particolare da quelle Ruby. :D
La gestione non è che sia più primitiva: la soluzione attuale di Python è perfettamente in linea e coerene con lo sviluppo del linguaggio.
Anzi, a voler essere onesti, c'è gente che non vorrebbe nemmeno le funzioni lambda (funzioni anonime) nel linguaggio, perché asserisce che la classica definizione di funzione è sufficiente in merito e ha il vantaggio di essere più leggibile (dando un nome "concreto" a un pezzo di codice). Personalmente le lambda le uso tranquillamente, e non c'è intenzione di rimuoverle dal linguaggio perché in generale sono una comodità.
Tornando al discorso, ti faccio notare che Ruby è abbastanza confusionario proprio sui blocchi di codice, in quanto espone meccanismi che sono sottilmente diversi e che possono generare non pochi problemi. Se ti leggi questo: http://pine.fm/LearnToProgram/?Chapter=10 (preso dal sito di Ruby) capisci il perché (mi riferisco alle differenze fra blocchi e proc).
Quando leggo frasi come "If you get confused" per me c'è qualcosa che non va. :D
la seconda è che, nonostante ci siano alcune valide proposte in tal senso, ci sia una qualche resitenza ad inserire il design by contract in Python.
A occhio mi sembrano obiezioni corrette anche se, soprattutto sulla prima, devo indagare un po'.
Quest'ultima sarebbe corretta, se non fosse che, personalmente preferirei non inserire questa caratteristica nel linguaggio.
Sia chiaro: parli con uno che da anni sbava su Eiffel e sulla definizione dei "contratti" in funzioni e metodi, ma dopo che ho conosciuto la TDD ho rivalutato in maniera completamente diversa la situazione.
In sintesi: ai contratti che devono inserire dei controlli nel codice preferisco nettamente le suite case esterne da eseguire una tantum, man mano che si sviluppa l'applicazione.
Da questo punto di vista Python è messo molto bene perché ci sono un paio di librerie standard utilizzabili allo scopo.
Spesso leggendo sui forum o discutendo con amici programmatori mi è capitato di
sentire che il python è inadatto a realizzare progetti particolarmente complessi a causa di alcune sue caratteristiche come la tipizzazione dinamica. Non conoscendo il python e avendo studiato seriamente solo il java chiedo a voi perchè la questione mi incuriosisce (sperando di non scatenare una rissa).
E per quanto riguarda le prestazioni invece, il python soffrirebbe di problemi di performance anche realizzando un compilatore?
Quali sono gli svantaggi di un linguaggio come il python rispetto al java? Quali i vantaggi?
niente di tutto questo :asd: è inadatto a progetti complessi solo perchè il codice è brutto esteticamente :asd:
c'è anche il fatto che a volte risulta un pò criptico :O ma questa è spesso una caratteristica dei linguaggi dinamici
cdimauro
21-07-2008, 13:20
Considerato che hai riporato l'esatto contrario della realtà, devo ringraziarti per la pubblicità che stai facendo. :D
Penso che le critiche vengano piuttosto dalle comunità esterne a Python, e in particolare da quelle Ruby. :D
La gestione non è che sia più primitiva: la soluzione attuale di Python è perfettamente in linea e coerene con lo sviluppo del linguaggio.
Anzi, a voler essere onesti, c'è gente che non vorrebbe nemmeno le funzioni lambda (funzioni anonime) nel linguaggio, perché asserisce che la classica definizione di funzione è sufficiente in merito e ha il vantaggio di essere più leggibile (dando un nome "concreto" a un pezzo di codice). Personalmente le lambda le uso tranquillamente, e non c'è intenzione di rimuoverle dal linguaggio perché in generale sono una comodità.
Tornando al discorso, ti faccio notare che Ruby è abbastanza confusionario proprio sui blocchi di codice, in quanto espone meccanismi che sono sottilmente diversi e che possono generare non pochi problemi. Se ti leggi questo: http://pine.fm/LearnToProgram/?Chapter=10 (preso dal sito di Ruby) capisci il perché (mi riferisco alle differenze fra blocchi e proc).
Quando leggo frasi come "If you get confused" per me c'è qualcosa che non va. :D
Quest'ultima sarebbe corretta, se non fosse che, personalmente preferirei non inserire questa caratteristica nel linguaggio.
Sia chiaro: parli con uno che da anni sbava su Eiffel e sulla definizione dei "contratti" in funzioni e metodi, ma dopo che ho conosciuto la TDD ho rivalutato in maniera completamente diversa la situazione.
In sintesi: ai contratti che devono inserire dei controlli nel codice preferisco nettamente le suite case esterne da eseguire una tantum, man mano che si sviluppa l'applicazione.
Da questo punto di vista Python è messo molto bene perché ci sono un paio di librerie standard utilizzabili allo scopo.
Sul design by contract puoi aver ragione, "puoi" nel senso che va anche un po' a gusti, Bertrand Meyer la penserà diversamente. Personalmente ho usato TDD e mai DBC per cui non saprei.... i colleghi che ne hanno fatto uso tuttavia la considerano molto produttiva una volta entrati nel meccanismo.
Sull'altro punto prima di parlare voglio capire bene cosa fa Python e cosa fa Ruby, tanto per avere un confronto...
cdimauro
22-07-2008, 07:21
Sul design by contract puoi aver ragione, "puoi" nel senso che va anche un po' a gusti, Bertrand Meyer la penserà diversamente.
Ti anticipo che Meyer è intervenuto sulla questione e ha affermato che la TDD non porta nessuna innovazione rispetto al DbC. Ovviamente. :D
Personalmente ho usato TDD e mai DBC per cui non saprei.... i colleghi che ne hanno fatto uso tuttavia la considerano molto produttiva una volta entrati nel meccanismo.
Questo è indubbio. Il problema che sollevo è un altro: io preferisco che i controlli nel codice vengano effettuati in sede separata, relegandoli a un'apposita suite test.
Sull'altro punto prima di parlare voglio capire bene cosa fa Python e cosa fa Ruby, tanto per avere un confronto...
OK :)
Ti anticipo che Meyer è intervenuto sulla questione e ha affermato che la TDD non porta nessuna innovazione rispetto al DbC. Ovviamente. :D
Beh si, questo certamente.
Questo è indubbio. Il problema che sollevo è un altro: io preferisco che i controlli nel codice vengano effettuati in sede separata, relegandoli a un'apposita suite test.
Certo, è un approccio che mi pare sia molto duttile, se non erro il team Diamonds (voi) ne ha fatto un uso estremo, pur essendo un gruppo eterogeneo ha funzionato bene direi. A me tuttavia attira l'esplorazione anche dell'altro approccio.....
Intanto visto che ci siamo: in Python posso "riaprire" una classe e modificarla?
cdimauro
22-07-2008, 22:07
Certo, è un approccio che mi pare sia molto duttile, se non erro il team Diamonds (voi) ne ha fatto un uso estremo, pur essendo un gruppo eterogeneo ha funzionato bene direi.
Più che altro in Diamonds è stato fatto un uso normale (come procedimento, intendo): sviluppo TDD come "tramandato" da "Santo Kent". :p
I problemi sono nati perché si è passati a creare troppi test, tante volte inutili.
A me tuttavia attira l'esplorazione anche dell'altro approccio.....
Certamente, e ripeto: sono anni che il DbC mi affascina. Mi piace moltissimo come idea.
Sono soltanto più portato alla TDD per questioni pratiche. :)
Intanto visto che ci siamo: in Python posso "riaprire" una classe e modificarla?
Sì, certamente. Lo puoi fare sia a livello di classe che di singola istanza (cioé: modifico i metodi e/o proprietà di quella particolare istanza, senza andare a modificare la classe madre; un esempio lo trovi qui http://www.hwupgrade.it/forum/showpost.php?p=23426524&postcount=133 :)).
Sia chiaro, però: Python non ha strumenti sintattici che semplificano questo lavoro, come invece fa Ruby. Né tanto meno è possibile andare a modificare le classi built-in.
Comunque andare a riaprire una classe è una cosa che normalmente non faccio. In questo periodo sto sperimentando un po' di monkey patch (vedi sopra), ma più che altro per rendermi conto dei limiti di questa tecnica ed, eventualmente, dei possibili utilizzi (finora zero :D) senza però andare a penalizzare la leggibilità e manutenibilità del codice. :)
Sì, certamente. Lo puoi fare sia a livello di classe che di singola istanza (cioé: modifico i metodi e/o proprietà di quella particolare istanza, senza andare a modificare la classe madre; un esempio lo trovi qui http://www.hwupgrade.it/forum/showpost.php?p=23426524&postcount=133 :)).
Sia chiaro, però: Python non ha strumenti sintattici che semplificano questo lavoro, come invece fa Ruby. Né tanto meno è possibile andare a modificare le classi built-in.
Perfetto, era quello che volevo sapere... giusto perchè con Ruby avevo visto quanto era immediato e mi pareva di aver letto che anche con Python era possibile...ti ringrazio.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.