Ho tentato un paio di volte di approcciare Pyton ma non riesco a farmelo piacere.
Non tanto per la sintassi che ormai e’ comune a quasi tutti i linguaggi di programmazione , ma per il suo metodo di identificazione dei blocchi di programma (funzioni , cicli e condizioni ).
Proveniendo da Php Javascript e Visualscript sento molto la mancanza delle parentesi che delimitano in modo chiarissimo l’ inizio e la fine di un blocco.
Non capisco come possa essere considerato altamente leggibile l’ esempio che riporto piu’ sotto ,dove la fine della funzione ExportControlPoints() non e’ indicato in alcun modo.
Chiaramente l’ esempio e’ talmente semplice e banale che e’ ovvio dove finisce il blocco , ma se penso ad un Vero plugin di qualche migliaio di linee mi vengono i sudori freddi.
La pura identazione non mi pare possa essere considerata il punto di forza di Pyton perche’ per quasi tutti i linguaggi ormai esistono tools automatici che risistemano l’ identazione delle linee di codice dando allo stesso un aspetto ordinato.
Prima di perdere tempo nel imparare un nuovo linguaggio porrei una domanda a chi gia’ lo usa :
In cosa Pyton e’ migliore di RhinoScript ( oltre alla identazione ) ?
Ecco l’ esempio di cui parlavo piu’ sopra…
import rhinoscriptsyntax as rs
def ExportControlPoints():
“Export curve’s control points to a text file” #pick a curve object
object_id = rs.GetObject(“Select curve”, rs.filter.curve)
#get the curve's control points
points = rs.CurvePoints(object_id)
if not points: return
#prompt the user to specify a file name
filter = "Text File (*.txt)|*.txt|All files (*.*)|*.*||"
filename = rs.SaveFileName("Save Control Points As", filter)
if not filename: return
file = open( filename, "w" )
for pt in points:
file.write( str(pt.X) )
file.write( ", " )
file.write( str(pt.Y) )
file.write( ", " )
file.write( str(pt.Z) )
file.write( "\n" )
file.close()
Direi che Python ti consente di utilizzare la libreria RhinoCommon e VBScript no.
… ed essendo il Python di Rhino Iron Python, cioe’ lavorando in ambiente .NET,
puoi anche usare le classi della libreria .NET
… compresa la GUI, ma qui ci capisco poco.
A questo proposito McNeel sta sviluppando una libreria per la GUI (che non ricordo come si chiama … scusa)
che possa girare sia su Windows che su Mac, via Mono se non sbaglio.
Grosso modo ( sperando di non dire troppe cavolate … ), direi che con gli script Python puoi fare cose che con VB richiederebbero un plug-in
Se ben ricordo, prima che uscisse Rhino 5, dicevano che sarebbe stato possibile usare tutti i linguaggi che girano in .NET per gli script …
Ma poi pare sia rimasto solo Python.
Se vuoi potresti rompergli le scatole su questo punto …
" Python ha qualche similarità con Perl, ma i suoi progettisti hanno scelto la via di una sintassi più essenziale e uniforme, con l’obiettivo di aumentare la leggibilità del codice."
A proposito di linguaggi…
Stavo dando un occhiata a MOI in quanto ha un linguaggio di scripting che conosco molto bene, javascript e con mia meraviglia ho scoperto che come formato file usa il 3dm.
E’ talmente compatibile con Rhino che funziona anche il copia e incolla, ctrl+C in Moi e ctrl+V in Rhino e vice versa …incredibile
Se ho capito Pyton è un linguaggio interpretato e non compilato, potrei fare chiamate a classi che non avrei a disposizione in VBScript ma non sarebbe cmq un vero plugin…giusto ?
Dovrei necessariamente programmare in C# per ottenere il massimo della velocità… e poi compilare il tutto.
Ma per adesso non ho in programma di sviluppare tools che richiedano l’uso di C#.
Emilio credi che IronPyton possa accedere alle classi Net di Speech Recognition per poter dare comandi vocali a Rhino ?
Eliminerei gran parte delle macro da tastiera…se questo fosse possibile.
Scusa Mario … idee strambe da domenica sera ( depressione a tutto gas ! )
Dici che sarebbe complicato tradurre uno script da Javascript a Python ?
Cioe’ scrivere lo script con sintassi Javascript e (qui viene il bello … ) eseguire lo script tramite un plug-in che traduca in Python e poi chiami RunPythonScript …
Naturalmente il problema e’ scrivere il plug-in …
Non conosco Javascript, sto dando un’occhiata in questi giorni, ma per ora non ci capisco molto.
Che ne dici ?
Secondo te ci sono differenze tra i due linguaggi che complicano la traduzione ?
E’ piu’ che altro curiosita’.
Per quanto mi riguarda adesso non avrei tempo ed energie per provare a lavorarci sopra …
[[quote=“emilio, post:10, topic:771, full:true”]
Scusa Mario … idee strambe da domenica sera ( depressione a tutto gas ! )
Dici che sarebbe complicato tradurre uno script da Javascript a Python ?
Secondo te ci sono differenze tra i due linguaggi che complicano la traduzione ?
E’ piu’ che altro curiosita’.
Per quanto mi riguarda adesso non avrei tempo ed energie per provare a lavorarci sopra …
Ciao
[/quote]
Piccola premessa :
A differenza di VB … Javascript NON puo’ scrivere files sull’ hard disk del utente ( A parte i cookies di pochi bytes o altre porzioni limitate a 5 Mb chiamate local storage ), e’ una limitazione voluta per motivi di sicurezza.
Javascript e’ un linguaggio interpretato che gira (principalmente ) sul lato client, per interagire con i server generalmente si usano linguaggi tipo Php ,Pearl ecc.ecc…
Ricapitolando Javascript elabora dati e per conservarli li invia al server che li memorizzerà grazie a script scritti nei linguaggi sopracitati.
Questa e’ l’ unica limitazione che vedo ( per ora ) nello scrivere un parser che converta uno testo javascript in un testo Python.
Ma onestamente non riesco a vedere l’ utilità di una simile complicazione… che idea ti sta frullando per la testa Emilio ?
Hehe … era per il tuo discorso su blocchi e indentazione.
Per evitare di dover usare Python per forza.
Pero’ se a te non sembra utile … problema risolto. Cestinato.
Tra l’altro mi sembra di aver poi capito che sarebbe stato un bel casino cercare di tradurre alcune cose che Javascript fa con le funzioni ed anche con gli oggetti …
Emilio la tentazione di usare Python mi e’ venuta quando ho letto un post in cui si accennava che questo linguaggio potesse usare le classi definite nel framework Net di microsoft.
E’ da un po’ che sto seguendo lo sviluppo delle Web Speech API che detto in soldoni significa tu parli e le API trasformano l’ audio in testo.
Visti i passi in avanti di SIRI per IOS e CORTANA per WIN 10 mi era venuta la tentazione di implementare in uno script la possibilita’ di dare comandi a Rhino a voce anziche’ da macro di tastiera.
Purtroppo le Web Speech API in Rhino non le posso usare in quanto il comando _WebBrowser utilizza il motore di quel cesso di Internet Explorer, incompatibile con la quasi totalità degli standard html5.
Peccato perchè sarebbe stato interessante …se sei curioso datti un occhiata a queste due implementazioni