BT
x A sua opinião é importante! Por favor preencha a pesquisa do InfoQ sobre os seus hábitos de leitura!

J2ObjC do Google: conversão automática de Java para Objective-C

por Abel Avram , traduzido por Rafael Sakurai em 24 Set 2012 |

O Google abriu os fontes do J2ObjC, um projeto que converte de Java para Objective-C, visando à plataforma iOS da Apple.

De acordo com o wiki do J2ObjC, o projeto teve inicio após frustrações ao manter diferentes bases de códigos para aplicações para web, Android e iOS. Embora clientes de aplicações web baseados no GWT possam compartilhar código não-visual com aplicações Android, as mesmas aplicações precisavam ser reescritas para iOS.

O J2ObjC revolve parte do problema permitindo converter código de lógica de negócio em Java para seu correspondente em Objective-C, sem a necessidade de editar o código. A ferramenta não gera código de interface de usuário para iOS, porque seus autores acreditam que "a única maneira de se obter uma interface de usuário rápida e de qualidade no iOS é escrevendo em Objective-C, usando os frameworks do iOS SDK da Apple".

Embora o código do servidor possa, teoricamente, ser traduzido, o J2ObjC suporta atualmente apenas o desenvolvimento do lado do cliente. O código gerado usa o iOS Foundation Framework e pode ser integrado ao Xcode através de um build externo do projeto com um makefile separado, ou adicionando-se uma regra de build a um projeto existente. O código gerado pode ser otimizado, testado e analisado com o Xcode Instruments, como qualquer outra aplicação iOS.

O J2ObjC efetua vários passos durante a geração do código em Objective-C:

  • Eliminação de código morto: elimina os códigos não utilizados do arquivo JAR.
  • Reescrita: reescreve códigos Java que não têm equivalência no Objective-C, tais como variáveis estáticas.
  • Autoboxer: adiciona código para conversão de tipos primitivos numéricos para classes wrapper e vice-versa.
  • Conversor dos tipos iOS: converte tipos, que são diretamente mapeados do Java para classes do Objective-C.
  • Converter os métodos do iOS: mapeia as declarações e invocações de métodos para métodos equivalentes em Objective-C.
  • Normalizar a inicialização: move os procedimentos de inicialização em construtores e métodos de inicialização da classe.
  • Converter classes anônimas: modifica as classes anônimas para serem classes internas, que incluem campos para as variáveis final referenciadas pela classe.
  • Converter classes internas: puxa para fora as classes internas, colocando-as na mesma unidade de compilação.
  • Geração de destrutores: adiciona o método dealloc, que envia mensagem de liberação para cada atributo do objeto. Com a contagem automática de recursos (Automatic Resource Counting, ARC), nenhum método novo é criado. E se existir um método finalize(), o nome do método é alterado para dealloc() e a chamada do super.finalize() é removido.

Um dos principais problemas na conversão de código em Java para Objective-C é a coleta de lixo. Como no iOS não há esse gerenciamento automático, o J2ObjC utiliza outros meios para gerenciar os objetos. A forma padrão usada é através da contagem de referências com filas de auto-liberação.

Outra ferramenta similar é o XMLVM, um compilador cruzado que converte Java, bytecode de .NET ou Ruby em bytecode .NET ou Java; ou em código JavaScript, Python ou Objective-C/C++. O XMLVM converte o bytecode original em XML, que depois é transformado em bytecode para uma VM diferente, ou em código-fonte para aplicações web ou iOS.

O J2ObjC é um projeto alfa, mas já está sendo usado por diversos projetos dentro do Google, segundo a empresa. Veja mais no site do projeto.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT