Existe um estudo comparativo do consumo de memória dos tempos de execução das linguagens de programação, correlacionado com a expressividade e as taxas de erros de produção? [fechadas]


10

Existem muitos estudos comparativos e disponíveis online quando se trata do desempenho em tempo de execução de aplicativos criados usando um idioma ou outro. Alguns dirigidos por empresas, outros acadêmicos, outros apenas relatos de experiências pessoais.

Também obtemos uma parcela decente de estudos comparativos sobre os efeitos colaterais de uma linguagem de programação e suas ferramentas, como:

  • tempos de construção,
  • probabilidade de detecção de erros pós-produção,
  • poder expressivo,
  • etc ...

No entanto, recentemente fiquei cada vez mais chateado com o consumo de memória dos meus programas do que qualquer outra coisa. Isso pode advir do fato de que, enquanto a Lei de Moore está do nosso lado para o desempenho bruto, percebemos que outros gargalos são mais importantes. Isso e eu não costumo atualizar meu hardware de vez em quando, e tenho alguns "antigos" (leia o Pentium 4 de 3.6GHz e 2005-2006 com 4 GB de RAM) que hoje em dia são pressionados para serem utilizáveis ​​em aplicativos grandes sem exigindo que eu tenha um grande problema para extrair todo o suco deles (escolha de SO, interface do usuário, ajustes de serviços e daemons, escolha de aplicativos a serem usados ​​para uma tarefa ou outra ...). Honestamente, às vezes eu ligo topou procexpchoro ao ver a memória usada pelos programas mais inocentes.

Eu posso resolver isso, mantendo-me pressionado na direção listada acima, e essencialmente tentando me limitar e os programas que uso (eu gosto muito de programas cli por esse motivo, eu acho), mas também não posso deixar de pensar que talvez estejamos fazendo errado.

Ferramentas modernas para necessidades modernas

Obviamente, idiomas de nível superior são sem dúvida melhores e justificam seu valor de peso morto. Algumas escolhas de design foram feitas por boas (ou supostamente bem-intencionadas) razões na época, em muitas cadeias de ferramentas. Bibliotecas compartilhadas, modelos de memória, pré-processadores, sistemas de tipos, etc ... Mas alguns podem ser mais viáveis ​​que outros com nosso hardware moderno, e eu ficaria curioso para ler alguns estudos sérios sobre o assunto.

Então, minha pergunta é: existe um pendente no jogo Benchmarks e outros que se concentram na comparação do consumo de memória de tempo de execução dos idiomas?

E ainda mais, existem alguns estudos que fazem referência cruzada com outros parâmetros (semelhante ao que este artigo fez, por exemplo, para outros critérios, também baseado no jogo Benchmarks )?


3
Por que o jogo de benchmarks é insuficiente? É provavelmente o melhor recurso que existe e já cobre detalhadamente o consumo de memória.
9788 Robert

@RobertHarvey: Ele fornece informações de memória, mas não é para o tempo de execução "base". Além disso, acho que extrair informações do jogo Benchmarks é bastante misterioso (mais crédito por esse artigo fazer um trabalho incrível com seus dados, embora não seja o que eu procuro).
haylem

11
Pode ajudar as pessoas que tentam responder à sua pergunta se você forneceu algumas informações sobre o problema que está tentando resolver, com algumas especificidades, como o ambiente de execução e o consumo de memória desejado. A resposta será diferente se você estiver escrevendo software para um ambiente incorporado (onde a quantidade de memória usada é importante) versus uma máquina de desktop de última geração (onde o consumo de memória é essencialmente inconseqüente, a menos que o sistema de software seja Extremamente grande).
9788 Robert Harvey #

2
How much memory consumption makes you weep?30 MB para uma guia inativa do Chrome sem extensões, 100 MB para o CCC da ATI, até 11 MB para um plug-in de googletalk inativo ou 23 MB para um driver de impressora inativo. Essas coisas e muito mais. O exemplo do chrome está um pouco fora do parque, por ser um exemplo mais complexo, mas os outros já me surpreendem bastante.
haylem 6/06/2013

Respostas:


7

Eu encontrei algumas informações parciais, então começarei a compilar minhas descobertas em minha própria resposta. Por favor, não deixe que isso impeça você de contribuir com suas próprias respostas (ou editar esta).

Literatura existente:

  • Uma comparação empírica de 7 linguagens de programação - Prechelt (2000) [ PDF ]

    Um pouco datada, mas cobre parte do material que me interessa e fornece uma visão do uso e da expressividade da memória de tempo de execução. Os resultados podem diferir bastante agora, mas é um começo interessante.

  • Velocidade, tamanho e confiabilidade das linguagens de programação - Marceau (2009) [ blog ]

  • Código usado, formas usadas no tempo do jogo de benchmarks [ u32 , u32q , u64 , u64q ]

    Embora não cubra o consumo de memória em tempo de execução, o trabalho de Marceau é mais ou menos o tipo de referência ou estudo empírico que eu gostaria de encontrar para esse critério, em termos de conteúdo e qualidade. Um bom exemplo do que estou procurando, apenas para métricas diferentes. O segundo artigo é um acompanhamento encontrado no site Benchmarks Game e foi publicado logo após (e que faz referência) ao trabalho de Marceau, com telas mais recentes e mais idiomas, embora ainda sem detalhes da memória de tempo de execução. Cada gráfico nestas páginas conduz então a comparação linguagem-to-linguagem que fazer proporcionar alto nível de informação de memória embora.


O trabalho de Marceau é um exercício de contar histórias, e algumas delas não fazem sentido - "A introdução de recursos funcionais prejudica o desempenho?" ignora o simples fato de que alguns desses programas de "linguagem funcional" podem não usar recursos funcionais. Os dados foram retirados de uma encarnação anterior do jogo de benchmarks; e foi inicialmente usado sem entendimento, por isso houve vários ciclos de correção após a publicação (verifique os comentários).
igouy

Para o seu "consumo básico de memória de tempo de execução", uma simples comparação dos programas "olá mundo" pode ser tão boa quanto você precisa.
igouy

@igouy: sim. Não duvido disso, mas esperava não ter que experimentar e documentar / manter isso pessoalmente :) De fato, menos do que um olá mundo seria bom, pois em alguns você nem precisaria se conectar (ou rotinas de impressão, por exemplo. (desativando otimizações do compilador e outras coisas pode ser aconselhável também)
haylem

@igouy: sobre o trabalho de Marceau, eu sei, eu li a página, os comentários, as páginas atualizadas do Benchmark Game e entrei em contato com ele. O artigo ainda é uma boa referência na minha opinião. O fato de ser imperfeito não tira seu valor e ainda está na direção do que eu gostaria de encontrar (ou me recriar).
haylem

"mas eu esperava não ter que experimentar e documentar / manter isso" - veja as medidas no InternetArchive . Infelizmente para você eu decidi as medições de memória para Olá mundo foram totalmente enganosa e parou de exibi-los depois de 2005.
igouy

1

Isso não está respondendo à pergunta, por exemplo, mas talvez mude um pouco a perspectiva. Estou tendo em mente a transcrição do chat, para definir o tom desta resposta-comentário que certamente será objeto de muitos votos negativos.

Existem pessoas, fornecedores de hardware, fornecedores de ferramentas e programadores preocupados com a eficiência. Por enquanto, será uma preocupação crescente para eles e todos nós. Essas preocupações estão enraizadas nos dispositivos móveis, particularmente nos monstros de alta potência, que consomem bateria, com as maiores telas e os rádios mais fortes.

Para dar mais um passo para trás, parte da razão pela qual nos encontramos na situação atual, com estruturas relativamente grandes e um pouco de desconsideração pela eficiência geral, além das melhorias de hardware, é um legado. A compatibilidade com sistemas legados nos fortalece com a compatibilidade. Não é tanto a culpa dos tempos de execução de nível superior, pois eles são essencialmente o mesmo tempo de execução, atuando bastante eficiente e com desempenho quando usado em um ambiente operacional diferente (por exemplo, Xbox, Windows Mobile pré 7/8 / surface, java micro framework etc).

Compare a extensão da compatibilidade que um desktop possui com seu software legado com a extensão de compatibilidade que um dispositivo móvel possui.

Com os dispositivos móveis, os fabricantes de dispositivos envidam alguns esforços para garantir alguma compatibilidade, mas não fizeram da compatibilidade um fundamento básico. Quando a escolha é entre continuar a fornecer compatibilidade e avançar o design do sistema móvel, o sistema móvel avança.

Para desktops, o oposto parece verdadeiro. Se uma mudança significativa de impacto atinge os profissionais de marketing ou os adotantes precoces de maneira errada, ela fornece os recursos necessários e o redesenho necessário para a sala dos fundos muitas vezes. Em algum momento, lembro-me de rumores de que nós, usuários do Windows, encontraríamos um sistema de arquivos completamente novo e dramático com o Windows XP, depois no Vista, depois o mesmo no Seven e, finalmente, novamente no Oito, mas não, apenas melhorando gradualmente desde vimos pela primeira vez no Windows2000? O novo sistema de arquivos ficou parado por um longo tempo, foi descartado e, no entanto, os rumores decidem a história depois disso, não posso dizer. Esse é provavelmente o maior caso conhecido, mas tenho certeza de que não é o único grande caso.

Mesmo com os tablets e sistemas operacionais mais recentes, a Microsoft que moldou o mercado agora está entrelaçada em um confronto mortal com não apenas os consumidores, mas uma sombra de si mesma do departamento de desktops. O tablet tinha que ter uma interoperabilidade significativa com a contraparte da área de trabalho. Não, ele não conseguiu se encaixar perfeitamente com ele, devido às diferenças de arquitetura, mas também devido à natureza arcaica dos fundamentos da área de trabalho que fez sacrifícios significativos.

Agora, certamente, o Windows é o alvo fácil de qualquer tipo de crítica a essa situação, mas outras plataformas estão longe de "livres de pecado". Há muitas relíquias ocultas no ecossistema Linux que, com certeza, causam grande consternação por melhorias sistemáticas.

A economia tem um papel importante nessa equação; como financiamos nossos computadores e aplicativos em um e como eles são financiados por outro seguem padrões surpreendentemente diferentes. Onde Wintel já influenciou fortemente a obsolescência, a Apple e o Google a transformaram em um cronograma quase estrito. Isso está mais fora do curso do que eu pretendia, então deixarei como está e deixarei que os leitores a tirem de lá.

Se e quando os grandes fornecedores mudam seus modelos de obsolescência e preços, eles podem começar a avançar com mudanças de escala maiores a uma taxa mais uniforme. As estruturas de nível superior orientadas pelas linguagens de ordem mais alta diminuirão de certa forma, pois serão capazes de realizar suas tarefas de alto nível com uma eficiência semelhante a um nível mais baixo, porque a ineficiente compatibilidade intermediária e as camadas de baixo nível serão reduzidas. ser drasticamente reduzido, se não for eliminado.


Realmente não responde, na verdade, é mais como pensamentos de forma livre que aumentam o cenário da pergunta :) No entanto, obrigado e +1 pelo insight. (Além disso, quero esclarecer que nunca pretendi destacar os sistemas Microsoft como parte dos culpados. Qualquer sistema operacional com o mesmo problema, se o modelo de memória do sistema e o formato executável permitirem).
haylem

Certamente não é minha intenção cutucar a Microsoft, mas é o caso mais fácil para a maioria ver a esse respeito. Outro grande nome, os fornecedores tradicionais estão no mesmo barco, mesmo que em uma consideração um pouco diferente (bancos de dados de nível industrial e equipamentos de rede, por exemplo; quantos compromissos eles levam adiante que impedem uma melhoria significativa na inovação e no valor subjacentes de seus produtos) . Ainda mais perto de casa, com os produtos que cada um de nós suporta, carregamos essa cruz proverbial em um grau ou outro.
7263 JustinC
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.