BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Brian Goetz: conversa sobre palavras-chaves com hífens no Java

Brian Goetz: conversa sobre palavras-chaves com hífens no Java

Favoritos

Na busca contínua por produtividade e desempenho na linguagem Java, Brian Goetz, arquiteto de linguagem Java da Oracle, juntamente com Alex Buckley, líder de especificação da linguagem Java e do Java Virtual Machine da Oracle, propuseram um conjunto de palavras-chave com hífen para o Java. O objetivo é fornecer um caminho para desenvolver um idioma maduro, no qual a adição de novos recursos pode ser um desafio devido ao conjunto atual de palavras-chave, conforme definido na Especificação da Linguagem Java do Java SE 12.

Os objetivos da implementação de palavras-chave com hífen, conforme especificado no JDK-8223002, são:

  • Explorar as opções de sintaxe abertas aos designers de linguagem Java para denotar novos recursos;
  • Resolver o problema permanente dos tokens de palavras-chave serem tão escassos e caros para que os projetistas de linguagem precisem restringir ou corromper o modelo de programação Java para se ajustarem às palavras-chave disponíveis;
  • Aconselhar os designers de linguagem sobre o estilo de palavra-chave adequado para diferentes tipos de recursos.

Diversas técnicas foram usadas ao longo dos anos para evoluir a linguagem: [a] domínio eminente, reclassificando um identificador como uma palavra-chave (como assert no Java 1.4 e enum in Java 1.5); [b] overload, reutilizando uma palavra-chave existente para um novo recurso; [c] distorção, criando uma sintaxe usando uma palavra-chave existente (como @interface); [d] fumaça e espelhos, criando a ilusão de uma nova palavra-chave usada em um novo contexto (como var com limites a variáveis locais). Todas essas técnicas foram problemáticas de alguma forma. Por exemplo, a adição de assert como uma palavra-chave quebrou quase todos os frameworks de teste.

O conceito de palavra-chave com hifenização complementaria essas técnicas existentes e usaria uma combinação de palavras-chave clássicas e/ou contextuais. As palavras-chave clássicas são "uma sequência de letras em Java que é sempre tokenizada como uma palavra-chave, nunca como um identificador". Já as palavras-chaves contextuais são "uma sequência de letras em Java que é simbolizada como uma palavra-chave em determinados contextos, mas como um identificador em todos os outros". Alguns exemplos de palavras-chave clássicas com hifenização em potencial incluem: non-final, break-with e value-class. Os exemplos de possíveis palavras-chave contextuais com hífen incluem: non-null, read-only e eventually-true.

Um dos desafios da implementação de palavras-chave hifenizadas envolve a maneira como um lookahead arbitrário ou lookahead léxico fixo deve analisar uma expressão como a-b como três tokens (identificador, operador, identificador) ou uma palavra-chave com hífen.

Uma conversa por e-mail do OpenJDK no início deste ano propôs a introdução da palavra-chave hifenizada break-with para o JDK 13 (prevista para setembro de 2019). No entanto, em última análise, foi decidido abandonar a palavra-chave break-with em favor de uma nova palavra-chave, yield e fazer uma nova revisão das expressões switch. A eventual finalização do novo construtor da expressão do switch deve limpar o caminho para a introdução do conceito de correspondência de padrões que está em discussão há quase dois anos.

Goetz e Buckley comentaram os prós e contras do conceito de palavras-chave com hífen:

Deixar um recurso fora do Java por razões de simplicidade, é algo bom. Deixar de fora porque não há maneira de denotar uma semântica óbvia, não é. Esse é um problema constante na evolução da linguagem e um custo contínuo pago por todos os desenvolvedores de Java.

Uma maneira de viver sem criar novas palavras-chave é parar completamente de desenvolver o Java. Embora existam alguns que pensam que esta é uma boa ideia, cessar por causa da falta de possibilidades disponíveis seria um motivo estúpido. O Java tem uma longa vida pela frente e os desenvolvedores estão empolgados com os novos recursos que permitem que escrevam códigos mais expressivos e confiáveis.

Goetz falou com o InfoQ sobre as palavras-chave com hífen:

InfoQ: Qual é a resposta da comunidade para palavras-chave com hífen na linguagem Java?

Brian Goetz: Como poderíamos esperar, cobriu uma boa amostra de desenvolvedores. Alguns ficaram satisfeitos em ver o cuidado que tivemos com questões sobre a melhor forma de evoluir para uma linguagem madura. Já outros, reclamavam que estávamos filosofando tentando encontrar chifre em cabeça de cavalo e prefeririam que trabalhássemos em outro recurso que achavam mais proveitoso.

InfoQ: Qual é a probabilidade de que as técnicas existentes, "domínio eminente", "sobrecarga", "distorção" e "fumaça e espelhos" sejam usadas novamente para expandir o conjunto de palavras-chave na linguagem Java se a proposta de palavra-chave com hífen não for aceita?

Goetz: Vejo isso como um menu de opções, com uma nova opção interessante e flexível sendo adicionada às opções existentes. Ainda assim, em qualquer situação, uma das outras opções ainda pode ser melhor. Não estamos descartando nada.

InfoQ: De acordo com o JEP 354, a proposta de break-with como uma palavra-chave hifenizada foi descartada em favor da nova palavra-chave, yield no JDK 13. O que levou à decisão de não usar a primeira palavra-chave com hífen na linguagem Java?

Goetz: O principal candidato hifenizado foi o break-with, mas nos grupos focais com usuários, as pessoas ainda achavam que era complicado e não muito óbvio. As palavras-chaves com hífen estão no menu, mas isso não significa que tenhamos de pedi-las cada vez que escolhemos algo. No geral, as pessoas acharam o yield mais natural (embora, é claro, alguns não gostassem disso, já que isso os lembra de retorno - yield em inglês - de um valor de uma co-rotina). Descobriu-se que o yield, na posição gramatical específica em que se encontrava, era um candidato razoável para uma palavra-chave contextual, nem todas as posições gramaticais possuem essa característica.

InfoQ: À medida que o Java evolui mais rapidamente com o ciclo de lançamento de seis meses, qual a probabilidade de uma palavra-chave com hífen ser introduzida na linguagem Java?

Goetz: Quando precisarmos de um, estará no menu. É provável que o Sealed Types exijam uma maneira de desativar o sealed, como um non-sealed.

InfoQ: Qual é a mensagem mais importante que gostaria que os leitores soubessem sobre palavras-chave com hífen?

Goetz: Que estamos falando sério sobre equilibrar a necessidade de evoluir a compatibilidade de linguagem, mantendo-a legível.

Referências

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT