Que dicas você pode oferecer para alguém portando código?


8

Que conselho (dicas, técnicas, dicas, etc.) você tem para alguém que está portando uma biblioteca de códigos de um idioma para outro ou reescrevendo-o para trabalhar em um ambiente diferente de compilador?


Meu Conselho: Não.
JohnFx

@JohnFX - Não o que?
Moshe

2
não "port" - ou seja, clone algo em um novo idioma, mantendo os recursos do idioma original. Reescreva-o totalmente para que ele tenha os mesmos resultados de teste.
S.Lott

@ S.Lott Isso é o que eu quis dizer com "porta".
Moshe

1
O que você quis dizer com porto? Aqui está uma dica. Não comente sua própria pergunta. atualize sua pergunta para ser completa e clara. Nunca comente sua própria pergunta, porque é sua pergunta. Você é o proprietário e pode torná-lo perfeito. Sinta-se à vontade para excluir os comentários que formam uma trilha difícil de seguir quando o seu comentário pressupõe que sabemos do que você está falando com palavras como "Isso é o que eu quis dizer". A que "isso" se refere?
S.Lott 15/03

Respostas:


2

Toda plataforma (bibliotecas de idiomas e sistemas) tem sua própria personalidade. A maneira como um programador Ruby cria sua API aproveita os recursos e a cultura exclusivos que tornam o Ruby o que é. Isso é distintamente diferente da maneira como um desenvolvedor de C ou C ++ projetaria sua API, que por sua vez é diferente da maneira como um desenvolvedor de Java ou C # o faria.

Você deseja pegar as idéias da plataforma original e moldá-las nos conceitos que tornam a nova plataforma o que é. Nada parece menos natural do que usar uma biblioteca projetada de uma maneira completamente diferente das outras bibliotecas da plataforma. Existem várias plataformas de programação que são realmente bem projetadas e elegantes. Você deseja aproveitar esses pontos fortes para o seu porto.


5

Conheça os recursos nativos da linguagem / estrutura "para" e "de".

Eu estava portando uma biblioteca de agendas para iOS a partir do Javascript. O iOS tem uma classe de calendário robusta, enquanto o JavaScript não tinha nada que fosse útil para mim. (Eu estava convertendo de um calendário religioso para o calendário gregoriano e vice-versa.)

Passei um tempo reescrevendo toda a biblioteca no Objective-C, apenas para perceber que meu código era amplamente redundante. (A propósito, fiz um péssimo trabalho e estava obtendo resultados imprecisos. Foi quando dei um passo para trás e percebi meu erro.)

Várias dezenas de linhas de métodos de conversão foram substituíveis por seis ou mais linhas de código de estrutura nativa.


4

Se esse é um projeto crítico (é frequente a portabilidade), escreva um plano de teste completo (idealmente com testes de unidade no idioma de destino) ANTES de portar cada parte do código e todo o sistema.

Não há como no mundo a portabilidade ser 100% precisa na primeira tentativa, portanto, você precisa ter certeza de que está capturando tudo.

Se possível, execute o mesmo plano para o código original, porque não há garantias de que ele foi gravado corretamente e, de fato, ter um comportamento equivalente pode depender de uma implementação incorreta.


+1 para o plano de teste com testes de unidade no idioma de destino.
Aditya P

3

-> Concentre-se na funcionalidade e não na maneira como ela foi codificada.

-> Pense antes de escrever, porque alguns elementos já podem ser manipulados por idioma, plataforma etc.

-> Use a vantagem da nova plataforma.


1

"Portar" - como você parece estar usando a palavra - é apenas TDD com código legado irritante.

Acerte os casos de teste. Confirme se o código legado passa nos casos de teste.

Em seguida, descarte o código legado.

Em seguida, escreva um novo código que passe nos casos de teste no novo idioma.


0

Crie uma árvore de diagrama / hierarquia de classes para saber qual porta primeiro. Mapeie os tipos de dados básicos (int -> Int32?). Faça o mesmo para as estruturas de dados.

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.