[Cascavel-pm] Perl para sistemas embarcados

Blabos de Blebe blabos em gmail.com
Sexta Dezembro 12 08:13:53 PST 2014


Opa,

O que eu teria a dizer o breno já disse, mas reforçando, tudo depende do
que você tem disponível e do que/quanto está disposto a pagar por isso.

Em termos de embarcados*, linguagem como Perl, Python, etc não são
indicadas, justamente por ocuparem mais memória e terem uma performance um
pouco menor em geral.

Ter menos performance aqui significa gastar mais tempo e energia pra
realizar operações equivalentes. Dependendo da aplicação, tempo pode não
ser um problema, mas o consumo extra de bateria sim.

Normalmente, linguagens de mais alto nível pagam esses recursos em troca do
recurso "tempo do programador", ou seja, possibilitam que o desenvolvedor
crie código num nível muito mais alto de abstração num ambiente onde ele
tem tempo, memória e energia em grande escala.

Note porém que dependendo de alguns detalhes, como o domínio da aplicação,
se usa XS ou não, etc, pode ser que a aplicação em Perl nem fique com menos
performance, se o gargalo ficar por exemplo na taxa de transmissão do seu
rádio.

A questão sempre é sobre o que você é obrigado a abrir mão versus o que
você pode ou não abrir mão.

Para 99% dos casos, Perl não vai ser indicado para embarcados. Se você
estiver trabalhando nos outros 1%, dê mais detalhes, que vai ser
extremamente interessante ajudar.

***

Antigamente tinha isso aqui:

http://www.foo.be/docs/tpj/issues/vol5_3/tpj0503-0003.html

Mas creio que foi descontinuado nas versões recentes de Perl. A referência
me fugiu à memória, mas acredito ter lido que foi descontinuado em algum
release note recente.

***

Também existe isso aqui:

https://metacpan.org/pod/distribution/B-C/perlcompile.pod

***

*: O conceito de embarcados hoje é meio difuso mas normalmente contamos
situações onde os recursos são tão limitados que não há nem sistema
operacional rodando, quanto mais uma linguagem dinâmica disponível.

[]'s

2014-12-12 13:53 GMT-02:00 breno <breno em rio.pm.org>:
>
> Oi Felipe,
>
> Parabéns pela primeira mensagem! Tomara que seja a primeira de muitas (e
> não deixe de entrar nos outros grupos também, como Brasil-PM ou as
> regionais de sua escolha - a menos que vc seja de Cascavel, claro :D)
>
> Sobre a sua pergunta, depende de um monte de fatores. Perl, assim como
> todas as linguagens dinâmicas, é feito para poupar seu tempo e preocupação
> em relação a alocação de memória, interrupções, rotinas, etc. Naturalmente,
> isso vem com um preço, em velocidade e em tamanho - tanto em disco quanto
> em memória.
>
> Para mim, se você não está disposto a pagar esse preço, a primeira
> pergunta que você tem que fazer é: Perl é a melhor linguagem para esse
> problema? Ou melhor: linguagens dinâmicas são o melhor tipo de linguagem
> para esse problema? Se a resposta for "não", escreva seu código em C, Lua
> ou mesmo Assembly, e vc certamente conseguirá chegar a um binário muito
> menor. Obviamente, nesse caso o preço a pagar é o tempo de desenvolvimento
> e o cuidado necessário com alocação de espaço, tratamento de erros,
> manipulação de variáveis, etc.
>
> Você diz que o programa em Perl (e o perl em si) ocupam muito espaço para
> uma app embarcada. De quanto estamos falando? Quanto seria bom o
> suficiente? De repente rola de chegar a esse número. De repente não.
>
> Dito isso, se vc realmente quer diminuir o espaço ocupado em disco, há
> algumas coisas que você pode tentar:
>
> * http://perldoc.perl.org/perlembed.html - aqui vc encontra dicas para
> rodar código Perl a partir de um programa em C. Como a compilação inclui só
> as libs necessárias, de repente o resultado fica menor para a app
> embarcada. Obviamente, o resultado pode ser oposto, mas aí vc vai ter que
> testar;
>
> * Você não precisa de documentação para executar código, então pode
> "minificar" os arquivos .pm e .pl na hora de embarcar o código. O espaço em
> memória será o mesmo, mas em disco, será menor;
>
> * Analogamente, se vc tem certeza do que será utilizado e de todas as
> possíveis ramificações do seu código, pode arrancar fora subs que com
> certeza nunca serão chamadas. Eu só faria isso em último caso, e com
> cobertura de 100% em testes de ramificação;
>
> * Você pode também analizar a sua árvore de dependência e ajustá-la para
> usar versões alternativas e menores de determinados módulos. Por exemplo,
> usar código XS em vez de PP, módulos ::Tiny em vez da versão completa, Moo
> em vez de Moose. Em alguns casos você consegue até fazer um overhaul no
> módulo e diminuir as dependências na mão (por exemplo, criar as classes
> diretamente e na mão em vez de usar um framework.
>
> * Existem alternativas que "zipam" o código e descompactam em memória na
> hora de executar. Acho que o PAR faz isso, mas não uso há tanto tempo que
> não sei te dizer;
>
> * Algumas ferramentas como o "strip" (
> https://en.wikipedia.org/wiki/Strip_%28Unix%29) podem reduzir o tamanho
> do binário final arrancando trechos não utilizados;
>
> * você pode tentar compilar o perl manualmente usando compiladores
> diferentes (por exemplo, clang ou gcc) e flags de compilação diferentes,
> comparar o resultado final e escolher o que ficou menor. As vezes os
> resultados são bem significativos. Aproveite pra ler o script de
> configuração do fonte do perl para desativar coisas que sabe que não vai
> utilizar e que vem ativas por padrão, a diferença no tamanho do binário e
> libs associadas pode ser significativa para o seu problema.
>
> Só não esqueça que cada sugestão acima vem com um preço. Algumas vão
> exigir mais CPU. Outras, mais memória. Outras, mais trabalho na hora de
> fazer deploys. Outras tornam atualizações de módulos externos bem mais
> difíceis. Outras exigem muito mais lógica na hora de estruturar seu
> programa. Outras... acho que vc entendeu :)
>
> Enfim, é isso. Boa sorte! :)
>
> []s
>
> -b
>
>
> 2014-12-12 12:36 GMT-02:00 Felipe N. Oliva <felipe em felipeoliva.eti.br>:
>
>> Olá senhores,
>>
>>
>> Esta é minha primeira postagem aqui na lista, e peço a paciência de todos
>> em caso de falar alguma bobagem.
>>
>> Estou em meio a um projeto de sistema embarcado onde meu foco é deixar o
>> sistema o menor possível. Meu problema é que o Perl ocupa um espaço
>> relativamente alto (para uma aplicação embarcada).
>>
>> Alguém poderia me dar uma dica de como reduzir o seu tamanho e do Perl em
>> si e seus módulos?
>>
>> Att,
>> Felipe N. Oliva
>> _______________________________________________
>> Cascavel-pm mailing list
>> Cascavel-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>
>
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20141212/de019a46/attachment.html>


Mais detalhes sobre a lista de discussão Cascavel-pm