Python for BlackBerry escrito em J2ME
Estou escrevendo um interpretador Python para BlackBerry, para rodar aplicações Python nesses potentes smartphones. O objetivo é poder rodar aplicações Python for S60, da Nokia, também nos BlackBerry, bem como escrever aplicações mais facilmente nesses devices. O interpretador é um RIMlet, e está sendo escrito para rodar nativamente em BlackBerry, no formato .COD.
Não estou usando nenhum interpretador como base, apenas a própria especificação da linguagem, pois um interpretador para mobile deve ter arquitetura específica, devido a limitações de memória e processamento. Uso o interpretador no desktop para testar e inibir possíveis diferenças, analisando ambas as saídas.
Ainda estou implementando o núcleo da linguagem, como tipos de dados, if, loops, e alguns métodos básicos. Já consigo rodar alguns scripts básicos, como o abaixo.
w = 3
i = 1
resultado = 0
temp = 0
while i <= 1000000:
resultado = w * i
temp = i%100000
if temp == 0:
print resultado
i = i + 1
print w
Antes de iniciar a execução de um script é feita uma preparação do mesmo, de forma que não seja necessário ficar interpretando cada instrução em tempo de execução. Dessa forma, mais tarde será fácil guardar um script já preparado num arquivo, para executá-lo sem a necessidade de preparação. Também não será difícil compilar esse script já preparado em bytecodes de forma que rode nativamente.
Já estou escrevendo o interpretador pensando na futura implementação da orientação a objetos da linguagem.
O script acima foi preparado em 64 milésimos de segundo, e visto ter o loop, roda 5 milhões de instruções python. Foi executado numa média de 14 mil instruções por segundo, levando um tempo total de 53 segundos. O teste foi feito num BlackBerry 8800.
Claro que o algorítmo de execução ainda está grosso, e deve ser lapidado com o tempo. No entanto, mesmo com esse algorítmo de execução, para a maioria das aplicações não será sentida diferença, pois dificilmente teríamos numa aplicação um while com 1 milhão de loops.
Bem, é isso. Depois vou executar esse script num Python for S60 para ver a perfomance.
Abraços.
Sobre o Autor
Nelson é desenvolvedor há 12 anos. Hoje desenvolve aplicações Web e Móveis na Abacomm Brasil cuidando do desenvolvimento server-side J2EE, banco de dados, design de aplicações móveis, e desenvolvimento móvel usando várias plataformas como BlackBerry, J2ME, FlashLite, Android, etc. Para conversar com o autor use o e-mail, MSN e GTalk npereirajr@gmail.com.

Luciano:
show de bola, bem o que falta no Brasil…. precisamos de aplicativos em portugues
abs e sucesso
2 Junho 2008, 10:36 amDanilo Cesar:
Rodei um 6600:
62 segundos.
Mesmo não fazendo IO (substituindo o print do meio por a=0) demorou 56 segundos.
Não vale a pena apenas alterar o interpretador jython para roda-lo em J2ME? Digo, acho que a única inconveniência com ele hoje é o tamanho, mas se fosse um pouco mais “capado”, acho que rodaria em Blackbery’s.
2 Junho 2008, 12:51 pmNelson Pereira Junior:
Danilo, vou estudar o Jython. Se eu ver que consigo reduzí-lo a no máximo 200KB, poderei fazer um fork. Mas preciso ver as características dele. Por exemplo, se pra cada detalhe da linguagem o Jython criar um objeto, já não será vantagem. Estou fazer o interpretador usando bastente vetores de tipos primitivos, com quase nada de objetos. Infelizmente não se pode dar ao luxo de seguir uma boa orientação a objetos numa aplicação mobile, principal uma aplicação desse nível.
2 Junho 2008, 2:47 pmLKRaider:
Que legal! mantenha-nos informados sobre o desenvolvimento :D
3 Junho 2008, 12:22 amMayron:
Que legal, muito boa a iniciativa….
Tem condições de fazer algo desse tipo sony ericsson?
3 Junho 2008, 5:39 pmZacarias:
Hm, legal, cara, principalmente por tu estar saindo do zero, acho que podes conseguir bastante desempenho desta maneira. Boa sorte nessa jornada o/
4 Junho 2008, 1:12 amChell:
I have seen your posts about this around and I am greatly hoping you succeed. I want to get a Blackberry but just might not if I can’t develop with Python on it. Perhaps this could also be a base for a Python interpreter on Android.
Have you thought of announcing your project on the Python discussion list?
http://mail.python.org/mailman/listinfo/python-list
28 Junho 2008, 10:21 pmdragoc2099:
Thanks for the post, I have been having the same problems.
2 Novembro 2008, 10:59 pmLucky:
Good blog
4 Novembro 2008, 6:44 pmalvini:
Thanks for the great tips.
5 Novembro 2008, 4:15 pmsanju:
Thanks for this - great idea.
18 Novembro 2008, 10:09 pm????:
Hmmm, I am tempted to try this.
24 Novembro 2008, 7:41 pmVlatko:
I recently discovered this blog. I’ve had a similiar idea to your rewriting the ten commandments for some time now.
28 Novembro 2008, 12:30 am