Pergunta

Como é que uma pessoa escolhe se alguém justificar suas compensações de design em termos de código otimizado, clareza de implementação, eficiência e portabilidade?

Um exemplo relevante para o propósito desta questão poderia ser grande manipulação de arquivos, onde um "grande arquivo" é "muito poucos GB" para um problema que seria simplificada usando métodos de acesso aleatório.

Abordagens para ler e modificar este arquivo pode ser:

  1. Use córregos de qualquer maneira, e procuram o lugar desejado - que é portátil, mas potencialmente lento, e não está claro -. Isso vai funcionar para praticamente todos os sistemas operacionais de
  2. mapear a parte relevante do arquivo como um grande bloco. Por exemplo, mmap um pedaço 50MB do arquivo para processamento, para cada pedaço -. Isso poderia funcionar para muitos OS de, dependendo das sutilezas de implementação mmap para esse sistema
  3. Apenas mmap o arquivo inteiro -. Isso requer um sistema operacional de 64 bits e é a forma mais eficiente e claro para implementar isso, no entanto não funciona em 32-bit do OS
Foi útil?

Solução

Não sei o que você está pedindo, mas faz parte do processo de projeto é analisar os requisitos para a portabilidade e desempenho (entre outros fatores).

Se você sabe que você nunca mais vai precisar portar o código, e você precisa absolutamente o melhor desempenho, então você ajustar a sua implementação em conformidade. Não há nenhum ponto de ser portátil apenas para seu próprio bem.

Note-se também que, se você quer tanto desempenho e portabilidade, não há nada que você parar de fornecer uma implementação para cada plataforma. Claro que isso vai aumentar o seu custo, então realmente, cabe a você a priorizar suas necessidades.

Outras dicas

Sem limitações, esta questão de forma racional não pode ser respondida de forma racional.

Você está perguntando "o que é a melhor cor" sem nos dizer se você está pintando uma casa ou um carro ou uma imagem.

As restrições que incluem pelo menos

  • Idioma de escolha
  • Plataformas de destino (servidor de nível industrial de multi CPU ou iPhone?)
  • Otimizando para velocidade vs. memória
  • Custo (que está financiando isso e há uma restrição de entrega?)

No pedaço de software poderia ter portabilidade "final".

Um exemplo deste tipo de problema a ser tratado usando uma variedade de métodos, mas com uma restrição apertada tanto na entrada específica / saída necessária e a medida de "melhor" seria o WideFinder projeto.

Basicamente, você precisa pensar antes de codificação. Cada projeto é único e uma análise das necessidades poderia ajudar a decidir o que é primordial para ele. O que vai fazer a melhor solução para qualquer projeto depende de algumas coisas ...

Em primeiro lugar, será esta necessidade projeto para ser ou, eventualmente, ser multiplataforma? Dependendo de sua escolha, a escolha da linguagem de programação direito deve ser mais fácil. Em seguida, novamente você também pode usar mais de um idioma no seu projeto e isso é completamente normal. Portabilidade não significa necessariamente menos desempenho. Tudo isso implica é que ele envolve o trabalho mais difícil de alcançar seus objetivos, porque você vai precisar de código de qualidade. Além disso, cada linguagem de programação tem a sua própria filosofia. Saiba o que são. Uma coisa é certa, certos problemas freqüentemente voltar mais e mais. É por isso que conhecer os diferentes padrões de design pode fazer a diferença às vezes, mas algumas línguas têm os seus próprios idiomas e pode ser muito relevante na escolha de um idioma. Outra coisa que precisa de algum pensamento é as diferentes abordagens que você pode ter para o seu projeto. Multithreading, tomadas, cliente / sistemas de servidores e muitas outras tecnologias estão todos lá para você usar. Escolher a tecnologia certa pode ajudar a fazer um projeto melhor.

Conhecer as necessidades e as diferentes soluções disponíveis hoje em dia é o que vai ajudar a decidir quando chega a hora de escolher para as diferentes vantagens e desvantagens.

Ela realmente depende dos drivers para o projeto. Se você está fazendo em casa dev empresa, em seguida, fazer a coisa mais simples que poderia funcionar em seu Hardare alvo. Mod para reqs de desempenho, conforme necessário.

Se você sabe que precisa para suportar diferentes plataformas de hardware no dia 1, então você claramente precisa escolher uma implementação portátil, ou o uso de múltiplas abordagens.

Portabilidade por causa da portabilidade tem sido um discurso de marketing para Java desde o início e é um fato da vida para C por convenção, e eu acredito que a maioria das pessoas que permanecem por ele "cresceu" com Java ou C vai dizer isso.

No entanto verdadeiro, portabilidade absoluta só será verdade para a maior trivial para a maioria das aplicações com média complexidade -. Qualquer coisa com alta complexidade será necessário ajustes especializados

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