<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<br>
<div class="moz-cite-prefix">On 12/12/2014 14:13, Blabos de Blebe
wrote:<br>
</div>
<blockquote
cite="mid:CAAxpsiaGfhX0bd4gi_2JyzD+7R6tr=iAKBeH5i+UQa+q7O2HkA@mail.gmail.com"
type="cite">
<div dir="ltr">Opa,
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>A questão sempre é sobre o que você é obrigado a abrir mão
versus o que você pode ou não abrir mão.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>***</div>
<div><br>
</div>
<div>Antigamente tinha isso aqui:</div>
<div><br>
</div>
<div><a moz-do-not-send="true"
href="http://www.foo.be/docs/tpj/issues/vol5_3/tpj0503-0003.html"
target="_blank">http://www.foo.be/docs/tpj/issues/vol5_3/tpj0503-0003.html</a><br>
</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>***</div>
<div><br>
</div>
<div>Também existe isso aqui:</div>
<div><br>
</div>
<div><a moz-do-not-send="true"
href="https://metacpan.org/pod/distribution/B-C/perlcompile.pod">https://metacpan.org/pod/distribution/B-C/perlcompile.pod</a><br>
</div>
<div><br>
</div>
<div>***</div>
<div><br>
</div>
<div>*: 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.</div>
<div><br>
</div>
<div>[]'s</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">2014-12-12 13:53 GMT-02:00 breno <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:breno@rio.pm.org" target="_blank">breno@rio.pm.org</a>></span>:
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>Oi Felipe,<br>
<br>
</div>
<div>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)<br>
</div>
<div><br>
</div>
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.<br>
<br>
</div>
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.<br>
<br>
</div>
<div>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.<br>
</div>
<div><br>
</div>
Dito isso, se vc realmente quer diminuir
o espaço ocupado em disco, há algumas
coisas que você pode tentar:<br>
<br>
* <a moz-do-not-send="true"
href="http://perldoc.perl.org/perlembed.html"
target="_blank">http://perldoc.perl.org/perlembed.html</a>
- 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;<br>
<br>
</div>
* 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;<br>
<br>
</div>
* 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;<br>
<br>
</div>
<div>* 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.<br>
</div>
<div><br>
</div>
* 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;<br>
<br>
</div>
* Algumas ferramentas como o "strip" (<a
moz-do-not-send="true"
href="https://en.wikipedia.org/wiki/Strip_%28Unix%29"
target="_blank">https://en.wikipedia.org/wiki/Strip_%28Unix%29</a>)
podem reduzir o tamanho do binário final
arrancando trechos não utilizados;<br>
<br>
</div>
* 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.<br>
<br>
</div>
<div>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 :)<br>
</div>
<div><br>
</div>
Enfim, é isso. Boa sorte! :)<br>
<br>
</div>
[]s<br>
<br>
</div>
-b<br>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote"><span>2014-12-12 12:36
GMT-02:00 Felipe N. Oliva <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:felipe@felipeoliva.eti.br"
target="_blank">felipe@felipeoliva.eti.br</a>></span>:<br>
</span>
<blockquote class="gmail_quote" style="margin:0px 0px
0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Olá
senhores,
<div>
<div><br>
<br>
Esta é minha primeira postagem aqui na lista, e
peço a paciência de todos em caso de falar
alguma bobagem.<br>
<br>
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).<br>
<br>
Alguém poderia me dar uma dica de como reduzir o
seu tamanho e do Perl em si e seus módulos?<br>
<br>
Att,<br>
Felipe N. Oliva<br>
_______________________________________________<br>
Cascavel-pm mailing list<br>
<a moz-do-not-send="true"
href="mailto:Cascavel-pm@pm.org"
target="_blank">Cascavel-pm@pm.org</a><br>
<a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/cascavel-pm"
target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
<br>
_______________________________________________<br>
Cascavel-pm mailing list<br>
<a moz-do-not-send="true" href="mailto:Cascavel-pm@pm.org"
target="_blank">Cascavel-pm@pm.org</a><br>
<a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/cascavel-pm"
target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
</blockquote>
</div>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Cascavel-pm mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a>
<a class="moz-txt-link-freetext" href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a></pre>
</blockquote>
Obrigado pelos retornos.<br>
<br>
Não sou um expert em Perl. Cheguei até o Perl pela facilidade,
documentação e os vários módulos.<br>
<br>
O papel do Perl no meu sistema é automação de processos, como:
backup, checagens e etc;<br>
<br>
A questão do espaço que tenho esbarrado são os modulos, libs, etc...
não o aplicativo em si, exemplo backup.pl<br>
<br>
Se eu estiver viajando podem falar, mas meu mundo perfeito é um
deixar o aplicativo compilado somente com suas dependências.<br>
<br>
Ainda acredito que consigo usa-lo, só me falta conseguir otimizar
essa questão do espaço.<br>
<br>
Talvez também vou utiliza-lo para Interface WEB e Sockets, mas isso
ainda é um "talvez".<br>
<br>
Att,<br>
Felipe N. Oliva<br>
</body>
</html>