Domanda

Sono entusiasta di bere un po 'di koolaid in linguaggio dinamico moderno, quindi ho creduto a tutte le cose sul blog e sui podcast di Michael Foord, ho comprato il suo libro (e ne ho letto un po') e ho aggiunto un IPy incorporato runtime su una grande app esistente circa un anno fa (anche se era per qualcun altro e non l'ho usato davvero da solo).

Ora ho bisogno di fare alcune cose piuttosto semplici per la generazione di codice, dove ho intenzione di chiamare alcuni metodi su alcuni oggetti .net (personalizzati, oggetti autorizzati da C #), creare alcune stringhe, scrivere alcuni file, ecc. .

L'esperienza di provare questo mi fa sentire il ragazzino che pensa di essere l'unico a vedere che l'Imperatore non ha vestiti. Se stai usando IronPython, apprezzerei molto sapere come gestisci i seguenti aspetti:

  • Modifica del codice: usi il framework .NET senza Intellisense?
  • Refactoring - So che un sacco di 'refactoring' riguarda il lavoro sul lavoro occupato dal linguaggio, quindi se Python è sufficientemente leggero non ne avremo bisogno, ma cose come i rinominati mi sembrano essenziali per lo sviluppo iterativo della qualità codice indipendentemente dalla lingua.
  • Tempo di avvio paralizzante - Una delle cose che si suppone siano buone con i linguaggi interpretati è la mancanza di tempo di compilazione che porta a un rapido sviluppo interattivo. Sfortunatamente posso compilare un'applicazione C # e avviarla più velocemente di quanto IPy possa avviarsi.
  • Hacking interattivo - la console IPy / repl dovrebbe essere utile per questo, ma non ho trovato un buon modo per prendere il codice a cui sei arrivato interattivamente e persisterlo in un file - taglia e incolla dal la console è abbastanza miserabile. E la console sembra contenere riferimenti agli assembly .NET che hai importato, quindi devi chiuderlo e riavviarlo se stai lavorando anche su C #. L'hacking su C # in qualcosa come LinqPad sembra un modo molto più veloce e più semplice per provare le cose (e ha Intellisense corretto). Usi la console?
  • Debug: qual è la storia qui? So che qualcuno nel team di IPy sta lavorando a un progetto hobby da riga di comando, ma diciamo solo che non sono immediatamente attratto da un debugger da riga di comando. Non ho davvero bisogno di un debugger da piccoli script Python, ma se dovessi usare IPy per test di unità di script, ad esempio.
  • Test unitari - Vedo che i linguaggi dinamici potrebbero essere ottimi per questo, ma esiste un'integrazione IDE test-runner (come per Resharper, ecc.). Il libro Foord ha un capitolo su questo, che ammetto di non aver ancora letto correttamente, ma sembra coinvolgere guidare un test-runner in modalità console dal prompt dei comandi, che sembra essere un enorme passo indietro rispetto all'uso un test runner integrato come TestDriven.net o Resharper.

Voglio davvero credere a queste cose, quindi sto ancora lavorando sul presupposto che mi sono perso qualcosa. Mi piacerebbe davvero sapere come le altre persone hanno a che fare con IPy, in particolare se lo stanno facendo in un modo che non sembra aver perso 15 anni di sviluppo di strumenti.

Aggiornamento: (luglio 2010) Questa domanda sembra piuttosto datata, ora che ci sono entrambi IronPython Tools per VS e PyCharm entrambi mostrano molte promesse e nessuno dei quali era presente quando l'ho scritto. Grazie a tutti coloro che hanno risposto. A quelli di voi che sono felici senza strumenti di refactoring automatico, posso raccomandare di non usare mai un IDE con un buon refactoring automatico. Dopo averlo fatto, ti chiederai perché hai pensato di essere mai stato contento di trovare e sostituire, e non vorrai mai più lavorare senza di esso. Se non altro, la possibilità di rinominare istantaneamente gli identificatori senza preoccuparsi di sostituire un pezzettino di testo sbagliato cambia l'intero approccio alla denominazione delle cose.

È stato utile?

Soluzione

do you use the .NET framework without Intellisense?

Sì. Uso esclusivamente emacs con IronPython. & Quot; M - / " è abbastanza buono per me. Ogni tanto passo a Reflector e MSDN quando ho davvero bisogno di informazioni sull'SDK.

Refactoring

In realtà intendi " Refactoring automatico " quando hai detto " Refactoring " ;. Faccio molto refactoring durante la codifica. Potrebbe essere meglio con un po 'di automazione. Ma sto bene con il refactoring manuale. Mi costringe anche a includere più test. Non ho mai usato alcun IDE con funzionalità di refactoring ampiamente, forse è per questo Non sto soffrendo. La semplice ricerca e sostituzione va bene per me.

Crippling startup time

Sì, questo è il mio dolore MAJOR, anche se sto lavorando su quad-core 3GHz con RAM 4G, bastano 50 secondi per eseguire 359 casi di test. La metà di quel tempo (25s) è il tempo di avvio !! Sembra che IronPython esegua alcune attività di elaborazione molto pesanti durante l'importazione di moduli di grandi dimensioni. Ora sto programmando di sputare i miei test in parti per mitigare questo dolore.

Interactive hacking - Do you use the console?

Uso la console di tanto in tanto, quando voglio provare qualche idea ad hoc. Non ho problemi con esso. Il più delle volte ho scritto il mio pensiero in test unitario, tuttavia.

Debugging - what's the story here?

Se il debug significa break-point e controllo variabile. Uso esclusivamente la dichiarazione di stampa per quella roba. Il tipo di applicazione a cui sto lavorando sta per vivere e continuare a essere mantenuto per almeno un decennio. Per gestire il codice difettoso, scommetto solo su 3 cose: codice comprensibile, test unitario e registrazione estesa.

Unit testing

Non mi avvicino mai a nessuno strumento di cui parli. Usa unittest.TextTestRunner. Oltre all'orribile tempo di avvio, non ho altre lamentele.

** AGGIORNATO **

Ho appena finito di aggiornare a IPy 2.6B1 con un risultato fenomenale. Il tempo di avvio si riduce da 25 a 6 secondi e il tempo di prova complessivo si riduce da 50 a 16 anni !!!

INCREDIBILE!

Altri suggerimenti

Che ne dici di IronPython Tools per Visual Studio 2010?

Gli strumenti IronPython forniscono un editor di codice Python, un sistema di progetto basato su file e un'interfaccia interattiva Interprete Python, tutto all'interno di Visual Studio 2010 e tutto gratuitamente. http://ironpython.net/tools/

Penso che questo componente aggiuntivo coprirebbe la maggior parte dei tuoi punti.

Spero che sia d'aiuto,

Patrick

IronPython è un'ottima soluzione, ma continuo a tornare a CPython per Windows. Perché?

Nella mia esperienza CPython in Windows, Mac OS / X e * NIX sono praticamente gli stessi. Posso usare quasi tutte le "batterie" in ogni ambiente. Sviluppo frequentemente applicazioni su Linux e invio a server Windows. Un paio di problemi con il threading a parte, non ho avuto problemi.

IronPython, d'altra parte, è un wrapper di linguaggio Python attorno al .Net Framework. Trovo molto più bello da usare rispetto a C #, ma questo è tutto. I miei programmi CPython non funzionano senza una considerevole rielaborazione. Le batterie per IronPython sono diverse.

Se il tuo obiettivo è di essere produttivo su .Net, allora IPy è probabilmente OK. Tuttavia, se stai cercando abilità Python portatili, lo eviterei.

Sto usando PyDev per scrivere il codice IronPython. Sto cercando di separare il codice specifico .NET il più possibile in modo da poter eseguire gli script (Iron) Python da PyDev. Grazie a PyDev, posso usare Pylint che può essere trovato su http://www.logilab.org/857. Le versioni recenti di PyDev sono in grado di configurare l'interprete anche per file o base di progetto. Quindi, posso facilmente passare gli interpreti da IronPython a CPython e viceversa. In questo modo, posso vedere che il mio codice è portatile tra le implementazioni di Python. (Anche se non sto usando, Jython 2.5 RC può essere usato anche in PyDev.)

Avendo il codice compatibile con Python e IronPython 2.5, posso usare il refactoring in PyDev, vedi http: // pydev .sourceforge.net / refactoring.html .

IronPython Studio sarebbe una buona scelta se supportasse IronPython 2.x, ma purtroppo non lo è.

Gli strumenti PyDev, Wing, PyCharm e IronPython per Visual Studio supportano tutti intellisense per .NET in IronPython. Ho la sensazione che SharpDevelop abbia anche intellisense per IronPython.

Il tempo di avvio è migliorato molto in IronPython 2.6 e di nuovo in 2.7. È comunque considerevolmente più lento di CPython.

Il riparatore e la corda di biciclette sono due strumenti di refactoring automatizzati popolari per Python. Non ho mai trovato il bisogno di nessuno dei due.

pdb (il debugger della libreria standard Python) funziona con IronPython. PyDev, SharpDevelop e IronPython Tools per Visual Studio supportano tutti il ??debug per IronPython.

Ho usato strumenti di test integrati (Wing ha un buon supporto unittest SharpDevelop supporta unittest e unittest2 per IronPython, PyDev e PyCharm probabilmente hanno anche una buona integrazione unittest). Preferisco eseguire i miei test dalla riga di comando. unittest2 è ottimo per questo in quanto elimina la necessità di scrivere la propria raccolta di test / codice di esecuzione.

Uso l'interprete interattivo per la sperimentazione molto e occasionalmente come un guscio truccato.

Ultimamente ho usato IronPython (e il DLR in generale) nei miei progetti per varie cose. Alcuni esempi:

  • Ho creato un generatore di documenti basato su modelli che utilizza script py per creare e trasformare le variabili di contesto che vengono passate nel renderer di modelli (Excel, Word, html- > pdf)
  • Come valutatore di espressioni per un motore di regole specializzato. Gli script vengono salvati in una colonna in una tabella del database e valutati in fase di esecuzione per determinare quale regola si applica.
  • Come passaggi in un motore ETL. Fondamentalmente ho alcuni componenti in grado di leggere file Excel e utilizzo gli script Python per trasformare i dati e creare entità NHibernate per popolare un database.
  • Script di configurazione dinamica per componenti C #.
  • Un motore di calcolo per alcuni indicatori che devono essere creati da un ampio set di dati. Sto combinando le estensioni parallele con script precompilati, le prestazioni finora sono buone.

Roba del genere. Una volta che il motore è configurato correttamente, con percorsi e riferimenti tutti impostati, puoi praticamente usare uno script per qualsiasi cosa.

Quasi tutte queste cose sono in esecuzione nelle applicazioni ASP.net mvc, e finora tutto bene. Ho scoperto che ScriptEngine e alcuni componenti come ScriptScope sono thread-safe, quindi posso persino condividere un Engine configurato all'interno di un contenitore IoC (es. Windsor) tra controller e simili.

Per quanto riguarda un editor, I EditPlus il più delle volte. L'editor python di VS 2010 tende ad essere un po 'instabile sebbene la modifica rapida non sia un problema.

Il mio uso di IronPython si è limitato a realizzare prototipi rapidi per me stesso, quindi non posso dire troppo al riguardo. Ma se stai cercando un IDE specifico per IronPython, IronPython Studio è passabile. Ti fornirà alcune funzionalità di Intellisense, anche se a volte è un po 'traballante, quindi non chiudere ancora quella finestra della documentazione MSDN. Ti consentirà di eseguire il debug interattivo come qualsiasi altro progetto .Net. Supporta inoltre il designer di moduli di Visual Studio 2008 se si preferisce realizzare la propria GUI in questo modo. Non l'ho provato, ma potrebbe anche supportare l'esecuzione di test nUnit utilizzando TestDriven.net.

Purtroppo, i nomi e le altre funzionalità di refactoring offerti da VS 2008 sembrano non supportati.

Sto usando IPy in un ambiente incorporato per eseguire script di test.

1 & amp; 2. Hai ragione, non c'è molto supporto per la modifica o il refactoring del codice - il supporto adeguato di Visual Studio sarebbe fantastico.

Ignorare il tuo terzo punto - interpretato vs compilato è un argomento secolare.

Non ho ancora fatto molto di hacking interattivo, quindi non posso commentare il 4 ° punto.

Uso il debugger di Visual Studio per eseguire il debug dei miei script IPy.

Neanche a conoscenza di un'integrazione IDE unit test.

Sto eseguendo una serie di simulazioni di blackjack su Python 2.6 contro IronPython 2.6 e nonostante l'hype, IronPython sembra essere solo un po 'più lento (forse di circa il 10%?) Il codice è molto semplice, solo cose come :

def highcount(hand):
  total=0
  for c in hand:
    if c[1]==11 and 11+total>21:
      total+=1
    else:
      total+=c[1]
  return total

e

def dmove():
  if ( (dhand[0][1]==11 and dhand[1][1]==10) or 
       (dhand[0][1]==10 and dhand[1][1]==11) ):
    return 21 # should return blackjack

  while 1:
    lc=lowcount(dhand)
    hc=highcount(dhand)
    if lc>21: return lc # dealer busts
    if lc>=17: return hc # stand on soft 17
    if hc>=17: return hc # stand on hard 17
    dhand.append(deck.pop()) # hit otherwise

Se le ottimizzazioni di VM .NET sono simili all'hotspot di JVM è del tutto possibile che su corse più lunghe, IronPython potrebbe eseguire la simulazione più velocemente.

Un altro punto importante da notare è che la simulazione del blackjack si presta facilmente alla generazione su più thread che il GIL di CPython rende completamente inutile in termini di aumento di velocità. Con IronPython ottengo lo speedup completo del 400% su un quadcore, il che è davvero fantastico.

Il codice non utilizza alcuna funzionalità esoterica di Python (è una buona cosa) il che significa che ha funzionato al 100% non modificato su IronPython.

Sto usando Iron Python, non professionalmente, purtroppo, ma come linguaggio di sviluppo rapido per i miei progetti personali.

Python è un linguaggio così eccezionale per facilità d'uso, brevità ma leggibilità del codice e semplicità. Alcuni di questi sono dovuti al fatto che è un linguaggio dinamico, ma anche la sua sintassi di base.

Tuttavia, non sono un guru di cpython e posso ottenere molto di più da Iron Python che da cpython in quanto posso facilmente sfruttare la piattaforma .NET, sulla quale sono molto più a mio agio. Sono deluso dal fatto che al momento non esiste una porta per le librerie Twisted in cpython, le uniche librerie estese di Python con cui mi trovo a mio agio, dato che sarebbero così utili in .NET.

Uso anche la finestra interattiva solo per testare le strutture .NET quando scrivo in C #.

Ho appena comprato il libro di Foord, quindi in questo momento lo sto solo imparando. Spero davvero di usarlo per lo sviluppo web, ma purtroppo devo aspettare fino a quando non è supportato con asp.net mvc. Ho anche intenzione di usarlo come strumento di scripting per i sistemi Windows poiché posso utilizzare il framework .net

Al lavoro utilizziamo IronPython contro il modello a oggetti di SharePoint. È perfetto per molti piccoli programmi che sono più grandi di uno script PowerShell ma non qualcosa che deve essere distribuito come artefatto in SharePoint. È ottimo per la prototipazione rapida su server in cui Visual Studio non è installato. Normalmente utilizziamo Notepad ++ come nostro editor preferito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top