Pergunta

Estou ansioso para beber um pouco moderno koolaid linguagem dinâmica, então eu acreditava que todas as coisas no blog e podcasts de Michael Foord, eu comprei seu livro (e ler alguns deles), e eu adicionei um IPy incorporado tempo de execução para um grande aplicativo existente ou menos um ano atrás (embora que era para outra pessoa e eu realmente não usá-lo eu mesmo).

Agora eu preciso fazer algumas coisas bastante simples geração de código, onde eu vou chamar alguns métodos de alguns objetos .net (costume, C # -authored objetos), criar algumas cordas, escrever alguns arquivos, etc .

A experiência de tentar este deixa-me sentir como o menino que pensa que é o único que pode ver que o Imperador não tem roupas. Se você estiver usando IronPython, eu realmente aprecio saber como você lida com os seguintes aspectos dela:

  • Código de editar? - você usa o .NET framework sem Intellisense
  • Refactoring - Eu sei uma carga de 'refatoração' é sobre como trabalhar em torno busywork linguagem-relacionado, por isso, se Python é suficientemente leve, então não vamos precisar disso, mas coisas como renomeações me parece ser essencial para o desenvolvimento de forma iterativa qualidade código, independentemente da linguagem.
  • tempo Crippling inicialização - Uma das coisas que é suposto ser bom sobre linguagens interpretadas é a falta de tempo de compilação levando ao desenvolvimento interativo rápido. Infelizmente eu pode compilar uma aplicação C # e lançá-lo mais rápido do que IPy pode iniciar-se.
  • Interativo hackers - o API console / repl é suposto ser bom para isso, mas eu não encontrei uma boa maneira de pegar o código que você interativamente chegou ao e persistem-lo em um arquivo - cortar e colar a partir do console é bastante miserável. E o console parece referências segure para .NET montagens que você importou, então você tem que pará-lo e reiniciá-lo se você estiver trabalhando no C # coisas assim. Hacking em C #, em algo como LinqPad parece uma maneira muito mais rápida e mais fácil de experimentar as coisas (e tem Intellisense adequada). Você usar o console?
  • Depuração - o que é a história aqui? Eu sei alguém da equipe IPy está trabalhando em um hobby-projeto de linha de comando, mas vamos apenas dizer que eu não estou imediatamente atraído para um depurador de linha de comando. Eu realmente não precisa de um depurador de pequenos scripts em Python, mas eu faria se eu fosse usar IPy para testes de unidade de script, por exemplo.
  • Teste Unitário - Eu posso ver que linguagens dinâmicas pode ser ótimo para isso, mas existe alguma IDE integração test-runner (como por ReSharper, etc). O livro Foord tem um capítulo sobre isso, que eu admito que ainda não leu corretamente, mas parece envolver a condução de um modo de consola test-corredor do prompt de comando, que se sente ser um passo para trás enorme de usar um corredor de teste integrado como TestDriven.net ou reSharper.

Eu realmente quero acredito nestas coisas, então eu ainda estou trabalhando com a suposição de que eu perdi alguma coisa. Eu realmente gostaria de saber como outras pessoas estão lidando com IPy, particularmente se eles estão fazendo isso de uma forma que não se sente como se tivéssemos acabado de perder 15 years'-estima de desenvolvimento de ferramentas.

Update: (Julho de 2010) Esta pergunta é olhando bastante datada, agora que há tanto oficiais Ferramentas IronPython para VS e PyCharm ambos os quais mostram um monte de promessas e nenhuma das quais foi em torno de quando eu o escrevi. Obrigado a todos que responderam. Para aqueles de vocês que estão felizes sem ferramentas de refatoração automática, pode eu recomendo que você nunca, nunca, usar um IDE com boa refatoração automática. Depois que você tem, você vai saber porque você pensou que estava sempre feliz com find-substituir, e você nunca mais vai querer trabalhar sem ele novamente. Se nada mais, a capacidade de renomear instantaneamente identificadores sem se preocupar com a substituição do pouco errado do texto muda sua abordagem inteiro para nomear stuff.

Foi útil?

Solução

do you use the .NET framework without Intellisense?

Sim. Eu apenas usar emacs com IronPython. "M- /" é bom o suficiente para mim. Eu ocasionalmente mudar para o reflector e MSDN quando eu realmente precisar de informações sobre o SDK.

Refactoring

Você realmente quer dizer "refatoração automática" quando você disse "refatoração". Eu faço um monte de refatoração, enquanto a codificação. Poderia ser melhor com alguma automação. Mas eu estou bem com refatoração manual. Ele também me forçar a incluir mais testes. Eu nunca usar qualquer IDE com recurso de refatoração extensivamente, talvez seja por isso Eu não estou sofrendo. Simples pesquisa e substituição é bom para mim.

Crippling startup time

Sim, esta é a minha grande dor, eventhough Eu estou trabalhando em 3GHz Quad-core com 4G Ram, ele leva 50 anos para executar 359 estudos de casos. Metade desse tempo (25s) é o tempo de arranque !! Parece IronPython executar alguma tarefa de processamento muito pesado durante a importação de módulo grande. Estou agora a planear a cuspir meus testes em partes para mitigar essa dor.

Interactive hacking - Do you use the console?

Eu uso o console de vez em quando, quando eu quiser tentar alguma idéia adhoc. Não tenho problema com ele. Na maioria das vezes eu escrevi o meu pensamento em unidade-teste, no entanto.

Debugging - what's the story here?

Se a depuração meios break point-and variável de inspeção. Eu apenas usar declaração de impressão para essas coisas. O tipo de aplicação que estou trabalhando está prestes a viver e continuam a ser mantida por pelo menos uma década. Para lidar com código defeituoso, eu só aposto em 3 coisas:. Compreensível de código, a unidade-teste e extensa-madeireiras

Unit testing

Eu nunca chegou perto de qualquer ferramenta que você menciona. Basta usar unittest.TextTestRunner. Ao lado o tempo de inicialização horrível, eu não tenho nenhuma outra queixa.

** ACTUALIZADO **

Eu apenas terminar a atualização para IPy 2.6B1 com resultado fenomenal. O tempo de inicialização reduzir de 25s para 6s e meu tempo total de testes de reduzir de 50 para 16 anos !!!

AMAZING!

Outras dicas

Como cerca de Ferramentas IronPython para Visual Studio 2010?

ferramentas IronPython fornecer um editor de código Python, um sistema de projeto baseado em arquivo, e um interativo interpretador Python, tudo dentro do Visual Studio 2010, e tudo de graça. http://ironpython.net/tools/

Eu penso que este add-in cobriria a maioria de seus pontos.

Hope isso ajuda,

Patrick

IronPython é uma grande solução, mas eu continuo de volta para CPython para Windows indo. Por quê?

Em minha experiência CPython em Windows, Mac OS / X e * NIX são praticamente os mesmos. Eu posso usar quase todas as "baterias" em cada ambiente. I freqüentemente desenvolvem aplicações em Linux e enviar para servidores Windows. Um par de problemas com encadeamento de lado, eu não tinha problemas.

IronPython, por outro lado, é um invólucro linguagem Python em todo o .Net Framework. Acho que é muito mais agradável de usar do que C #, mas isso é tudo. Meus programas CPython não funcionam sem reformulação considerável. As baterias para IronPython são diferentes.

Se o seu objetivo é ser produtivo em .Net, em seguida, IPy é provavelmente Ok. No entanto, se você está procurando habilidades Python portáteis, então gostaria de evitá-lo.

Eu estou usando PyDev para escrever código de IronPython. Eu estou tentando código .NET específico separado, tanto quanto possível para que eu possa executar os scripts (ferro) Python de dentro PyDev. Graças à PyDev, posso usar pylint que pode ser encontrado em http://www.logilab.org/857. As versões recentes do PyDev são capazes de configurar o interpretador ainda por ficheiro ou base do projeto. Então, eu posso facilmente mudar os intérpretes de IronPython para CPython e vice-versa. Por este caminho, eu posso ver que meu código é portátil entre as implementações Python. (Embora eu não estou usando, Jython 2.5 RC pode ser usado em PyDev também.)

Tendo código compatível Python e IronPython 2.5, posso usar a refatoração em PyDev, consulte http: // pydev .sourceforge.net / refactoring.html .

IronPython estúdio seria uma boa escolha se apoiou IronPython 2.x, mas, infelizmente, isso não acontece.

PyDev, Asa, PyCharm e IronPython Tools para Visual Studio todos intellisense suporte para .NET sob IronPython. Tenho a sensação de que SharpDevelop também tem intellisense para IronPython.

tempo de inicialização melhorou muito sob IronPython 2.6 e novamente em 2.7. Ele ainda é consideravelmente mais lento do que o CPython no entanto.

reparador de bicicleta e corda são dois populares ferramentas de refatoração automatizados para Python. Eu nunca encontrei uma necessidade para qualquer um deles.

APO (o depurador biblioteca padrão Python) funciona com IronPython. PyDev, SharpDevelop e IronPython Tools para Visual Studio todo o suporte de depuração para IronPython.

Eu usei integradas ferramentas de teste (Wing tem boa unittest apoio SharpDevelop suporta unittest e unittest2 para IronPython, PyDev e PyCharm provavelmente tem boa unittest integração também). Eu prefiro correr meus testes a partir da linha de comando. unittest2 é ótimo para isso, pois elimina a necessidade de escrever o seu próprio / código em execução coleção de teste.

Eu uso o interpretador interativo para a experimentação uma grande quantidade e, ocasionalmente, como uma concha envenenado.

Estou usando o IronPython (eo DLR em geral) extensivamente em meus projetos recentemente para várias coisas. Alguns exemplos:

  • Eu fiz um gerador de documento com base em modelos que usos PY scripts para construir e transformar as variáveis ??de contexto que são passados ??para o processador de modelo (Excel, Word, html-> pdf)
  • Como um avaliador de expressão para um mecanismo de regras especializado. Os scripts são salvos em uma coluna em uma tabela de banco de dados e avaliadas em tempo de execução para determinar qual regra se aplica.
  • Como as etapas em um motor de ETL. Basicamente, eu tenho alguns componentes que podem ler arquivos do Excel e eu scripts de usar Python para transformar os dados e criar entidades NHibernate para preencher um banco de dados.
  • scripts de configuração dinâmica para os componentes C #.
  • Um mecanismo de cálculo de alguns indicadores que precisam ser criadas a partir de um grande conjunto de dados. Estou combinando as extensões paralelas com scripts pré-compilados, o desempenho é bom até agora.

Coisas assim. Uma vez que o motor está devidamente configurado, com caminhos e referências tudo pronto, você pode basicamente usar um script para praticamente qualquer coisa.

Quase todas estas coisas estão funcionando em asp.net mvc aplicativos, e até agora tão bom. Eu descobri que o ScriptEngine e alguns componentes como ScriptScope são thread-safe para que eu possa até mesmo compartilhar um motor configurado realizada dentro de um contêiner IoC (ex. Windsor) entre os controladores e tal.

Como para um editor, eu EditPlus maior parte do tempo. O editor python VS 2010 tende a ser um pouco instável, embora a edição rápida não é um problema.

Meu uso de IronPython tem se limitado a fazer protótipos rápidos para mim, então eu não posso dizer muito sobre isso. Mas se você está procurando um IDE específico para IronPython, IronPython estúdio é passável. Vai dar-lhe algumas funcionalidades Intellisense, embora seja um pouco esquisito, às vezes, por isso não feche a janela documentação MSDN ainda. Ele permitirá que você para depurar interativamente como qualquer outro projeto .Net. Também suporta o Studio 2008 Forms Designer Visual, se você preferir fazer a sua GUI é assim. Eu não tentei isso, mas ele também pode apoiar a execução de testes NUnit usando TestDriven.net.

Infelizmente, renomeações e outros refatoração recursos oferecidos pela VS 2008 parecem ser suportado.

Eu estou usando IPy em um ambiente integrado para a execução de scripts de teste.

1 & 2. Você está certo, não há muito apoio para a edição de código ou refatoração - suporte adequado Visual Studio seria ótimo.

Ignorando o seu terceiro ponto - interpretado vs compilado é um argumento milenar.

Você não fez muito de cortar interativo ainda, então não posso comentar sobre 4º ponto.

Eu uso o depurador Visual Studio para depurar meus scripts do API.

Não sei sobre a integração IDE unidade de teste também.

Estou executando um conjunto de simulações de blackjack em Python 2.6 vs. IronPython 2.6 e campanha publicitária, não obstante, IronPython parece ser apenas um pouco mais lento (talvez por cerca de 10%?) O código é muito simples, coisas como :

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 as otimizações .NET VM são semelhantes aos Hotspot da JVM é bem possível que mais de corridas mais longas, IronPython pode executar a simulação mais rápido.

Outro ponto importante a ser observado é a simulação blackjack facilmente se presta a desova em vários tópicos que GIL do CPython torna completamente inútil em termos de aumento de velocidade. Com IronPython eu fizer a aceleração completa 400% em um quadcore, que é realmente muito legal.

O código não fazer uso de qualquer Python esotérica apresenta (que é uma coisa boa) o que significava que ele correu 100% sem modificações no IronPython.

Eu estou usando Iron Python, não profissionalmente, infelizmente, mas como uma linguagem de desenvolvimento rápido para meus projetos pessoais.

Python é uma grande língua tão para facilidade de uso, a brevidade, mas a legibilidade do código e simplicidade. Parte disso é devido a ser uma linguagem dinâmica, mas também a sua sintaxe básica.

Estou, no entanto nenhum guru CPython, e pode obter muito mais fora do Iron Python que CPython como eu pode facilmente alavancar a plataforma .NET, no qual eu sou muito mais em casa. Estou decepcionado, não há atualmente nenhuma porta para as bibliotecas torcidos em CPython, a única estendida Python bibliotecas Estou confortável com, como eles seria tão útil em .NET.

Eu também uso a janela interativa apenas para estruturas .NET teste quando estou programando em C #.

Eu comprei o livro de Foord então agora eu só estou aprendendo. Eu realmente espero usá-lo para desenvolvimento web, mas infelizmente eu tenho que esperar até que ele é suportado com asp.net MVC. Eu também pretendo usá-lo como uma ferramenta de scripting para sistemas Windows desde que eu posso utilizar o .NET framework

No trabalho usamos IronPython contra o modelo de objeto do SharePoint. É perfeito para os lotes de pequenos programas que são maiores do que um script powershell mas não é algo que precisa ser implantado como um artefato em SharePoint. É ótimo para prototipagem rápida em servidores onde Visual Studio não está instalado. Normalmente usamos Notepad ++ como o nosso editor de escolha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top