BT

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.

Avalie esse artigo

Relevância
Estilo/Redação

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
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.