Article image
Wellington Donato
Wellington Donato11/07/2023 09:07
Compartilhe

O que vem a seguir para JavaScript: novos recursos para aguardar.

    Alguns novos recursos significativos, como o Temporal , estão quase prontos para adoção; e outros estão em desenvolvimento para chegar nos próximos anos. Selecionamos alguns dos mais interessantes aqui, além de pedir às pessoas envolvidas na criação dos padrões JavaScript que expliquem como a linguagem está progredindo e o que pode fazer sentido para a padronização do JavaScript abordar a seguir.

    Tipos que não transformam JavaScript em TypeScript

    O TypeScript foi desenvolvido para tornar os desenvolvedores de JavaScript mais produtivos , em vez de substituir o JavaScript, mas também tem sido uma fonte de melhorias para a linguagem. Atualmente, você usa o TypeScript para tornar os tipos explícitos em seu código enquanto o escreve — mas depois os remove quando o código é executado.

    Ainda um pouco distante, a proposta do estágio 1 das anotações de tipo para incluir informações de tipo no código JavaScript, mas tratá-las como comentários pelos mecanismos JavaScript é importante, porque converge TypeScript e JavaScript para consistência de uma forma que os mantém alinhados, mas também os torna claro que eles estão trabalhando em camadas diferentes.

    Os desenvolvedores podem usar sintaxe de primeira classe para tipos , seja TypeScript ou sintaxe de fluxo com JSDoc longo blocos de comentários JSDoc, e saber que seu código ainda é compatível com mecanismos JavaScript e ferramentas JavaScript — evitando a complexidade de precisar de uma etapa de compilação para apagar os tipos antes de o código será executado, apontou Palmer.

    “Existe um enorme valor apenas em ter tipos estáticos que só existem durante o desenvolvimento e são totalmente apagados durante o tempo de execução”, explicou ele. Parte desse valor é óbvio: “O fato de você poder fornecer verificação de tipo e dizer quando cometeu um erro e cancelou a referência a uma propriedade que não existe: isso é ótimo. Mas, acima e além disso, as informações de tipo também fornecem uma série de melhorias de qualidade de vida para o desenvolvedor, como a capacidade de refatorar coisas - como renomear variáveis e propriedades, tudo de uma só vez automaticamente no IDE, bem como navegação de código .”

    "Se você está trabalhando com muitos códigos diferentes que não escreveu, ajuda ter uma visão de tipo", sugeriu Daniel Ehrenberg , vice-presidente da Ecma (organização controladora do TC39) e engenheiro de software trabalhando na experiência do desenvolvedor JavaScript na Bloomberg.

    E, novamente, dado o quão controversa a digitação estática tem sido na comunidade JavaScript, apesar da demanda contínua da comunidade (é o principal recurso ausente na pesquisa State of JavaScript por três anos consecutivos), é uma prova do processo de padrões que este A abordagem traria um recurso extremamente útil para a linguagem sem afetar a simplicidade que atrai muitos usuários em primeiro lugar.

    Simplificando a localização com formatos de mensagem mais inteligentes

    Localizar sites (e aplicativos da web) é mais complicado do que apenas trocar as sequências de mensagens na interface do usuário, porque se você deseja que essas mensagens façam sentido e sejam gramaticalmente corretas, não pode simplesmente trocar palavras sem pensar em como os números, ordinais (como primeiro e segundo), datas, plurais e outras construções são tratadas em diferentes idiomas.

    Existem bibliotecas para ajudar com isso, como FormatJS, mas é mais trabalhoso para desenvolvedores e tradutores em JavaScript do que em outras linguagens como Java e C, onde há recursos integrados para traduzir e formatar strings com componentes Unicode internacionais como ICU4J e ICU4 .

    “Os plurais são realmente difíceis”, diz Romulo Cintra , da Igalia. “Todos os conceitos gramaticais, flexões e dependendo do número de gênero e, em seguida, diferentes espaços reservados podem variar em diferentes idiomas; [manipular] essa complexidade normalmente depende dessas bibliotecas, mas também requer toneladas e toneladas de dados.”

    Na verdade, os navegadores já usam esses componentes para internacionalização e para criar APIs como formato de data e hora e formato de hora relativa. Então, por que não trazer opções semelhantes para a Web e ter opções integradas para desenvolvedores de JavaScript que incluam esse conhecimento linguístico — afinal, é a linguagem em que tantas interfaces são escritas.

    Intl MessageFormat é outra proposta TC39 de estágio 1, em conjunto com o Grupo de Trabalho de Formato de Mensagem do Unicode Consortium, para strings de modelo que incluem lógica de internacionalização e localização, com um mecanismo integrado em JavaScript para preencher esses modelos corretamente em diferentes idiomas.

    O trabalho para trazer APIs de internacionalização para a web é tão abrangente que desencadeou uma grande atualização para a API de formato de mensagem ICU de 20 anos . “Ele depende apenas de strings, é muito rígido, não é modular – então por que não resolver o problema desde a raiz e iniciar um novo padrão em Unicode?”, questionou Cintra. Isso se tornou o MessageFormat 2.0 (MF 2.0 para abreviar), projetado para ser um terreno comum, lidando com a internacionalização de software e da web, e sustenta o Intl MessageFormat, que ele vê como a API internacional mais necessária para ajudar a web a alcançar o próximo bilhões de usuários.

    “Está a fechar o ciclo de disponibilização de uma web mais acessível ao nível da localização e personalização.”

    “Para mim, como falante não nativo de inglês”, disse Cintra, “é extremamente importante à medida que a web cresce e todos têm acesso [a ela], ter algo assim, que coloca em nossas mãos a capacidade de tornar mais acessíveis todos os software que escrevemos, é fantástico!”

    Atualmente, grande parte da localização depende principalmente de especificações proprietárias para formatos de mensagem personalizados que precisam ser analisados em tempo de execução. A Mozilla usa sua ferramenta Fluent para traduzir todas as suas interfaces: a Bloomberg também tem uma ferramenta interna, disse Ujjwal Sharma , da Igalia. “Todo mundo está tentando resolver esse problema por meio de ferramentas personalizadas que fazem coisas diferentes.” Embora o Intl MessageFormat permita que as organizações que já estão fazendo a internacionalização criem um padrão comum, com todas as vantagens usuais da colaboração aberta, Sharma espera que também ajude as organizações menores que ainda não possuem um processo de tradução de sites.

    Além de simplesmente traduzir sequências de texto, o MF 2.0 incluirá metadados e comentários que podem ser usados para marcar tudo, desde o tom da escrita – seja formal ou informal – até dicas para síntese de fala que serão úteis para alto-falantes inteligentes como Siri e Alexa bem como leitores de tela. Isso também poderia remover um gargalo: “Muita inovação em fala e interfaces está acontecendo no lado do cliente”, observou Sharma, mas a quantidade de dados tornou isso impraticável para localização: “Intl MessageFormat pode nos permitir fazer muito mais do lado do cliente”.

    A localização é uma indústria multimilionária, portanto, equilibrar a compatibilidade com as melhorias necessárias é uma espécie de ato de equilíbrio. “Fornecer uma API intuitiva fácil de usar que ainda possa funcionar de alguma forma com todo o esforço legado é uma tarefa desafiadora”, observou Sharma. “Mas acho que, se pudermos fazer isso bem, podemos realmente mudar algumas coisas sobre como as pessoas pensam sobre os sites.”

    Uma linguagem para traduzir idiomas

    A especificação MF 2.0 define o que você pode imaginar como uma linguagem de programação simples com ligação de nomes (declarações “let”) e correspondência de padrões (seletores), explicou Tim Chevalier da Igalia, que está trabalhando na implementação do ICU. Ele sugeriu pensar nisso como “uma linguagem de domínio específico para escrever mensagens traduzíveis” que pode se basear no que sabemos sobre escrever compiladores e interpretadores.

    “Esperamos que a experiência do desenvolvedor usando o MF 2.0 seja menos como escrever cadeias de caracteres enigmáticas e mais como programar em uma linguagem de propósito especial incorporada em sua linguagem de uso geral de escolha, como JavaScript.” Ele compara isso a passar de strings de consulta codificadas para trabalhar com bancos de dados para SQL.

    “Não havia uma maneira confiável de escrever programas que manipulassem as próprias strings de consulta para gerar variações em uma determinada consulta, porque não havia conhecimento sobre a linguagem de consulta incorporada às linguagens de propósito geral como C++, Java e JavaScript. Ferramentas de linguagem modernas fornecem maneiras mais ricas de construir consultas do que apenas escrever uma string e passá-la como um argumento para uma função.” O MF 2.0 promete uma experiência de desenvolvedor semelhante.

    É extensível: os desenvolvedores obtêm uma interface para criar novas abstrações próprias em JavaScript (ou outras linguagens) para fornecer funções de formatação. A especificação também visa facilitar a criação de ferramentas de tradução de alto nível que possam fornecer uma interface de usuário mais amigável para facilitar o trabalho dos tradutores com mensagens, sem que eles próprios precisem ser programadores.

    O trabalho da UTI no MF 2.0 ainda está em estágio inicial, com uma prévia técnica; inicialmente, é apenas ICU4J, mas está sendo portado para ICU4C, que é a linguagem usada pela maioria dos mecanismos JavaScript. A proposta do TC39 depende do MF 2.0, mas “assim que houver uma versão estável do Message Format 2 implementada, acho que as coisas do lado do TC39 correrão bem”, previu Cintra. Uma versão estável também permitirá que os navegadores comecem a implementar a API para ver como ela funciona na natureza.

    Se você quiser experimentar, o FormatJS tem suporte inicial para a proposta inicial do IntlMessageFormat e há um polyfill experimental em desenvolvimento . Como o polyfill é baseado em ferramentas que já são amplamente utilizadas para internacionalizar o React e outros aplicativos, ele dará aos desenvolvedores experiência com a nova sintaxe necessária.

    Marcos, mas ainda muito a fazer

    O JavaScript continuará a evoluir lentamente, sugeriu Palmer. “Alguns argumentam que as coisas devem mudar mais rapidamente para que possamos obter feedback e reconhecer a importância e iterar; nosso estilo no TC39 tende a ser mais conservador.”

    Remover algo da plataforma web, caso tenha sido projetado de forma errada e precise de mudanças — como a primeira implementação de componentes web — tem um custo extremamente alto. Polyfills e implementações baseadas em ferramentas de recursos que são candidatos a se tornarem parte do padrão permitem um ciclo de feedback mais rápido que ajuda a proteger a compatibilidade da Web, sem fazer com que os desenvolvedores esperem por todas as etapas do processo formal.

    “Acho que faz sentido que o JavaScript seja desenvolvido de forma conservadora.”

    “Temos muitas implementações; temos muito uso”, disse Ehrenberg. “Outras plataformas podem ser esses ambientes mais experimentais e nós podemos ser o ambiente de implementação mais conservador.”

    Seguindo esse padrão, ele disse que o JavaScript agora contém nativamente muitos dos recursos para os quais os desenvolvedores costumavam recorrer a ferramentas (e algumas propostas, como auxiliares iteradores, são inspiradas em outras linguagens).

    “Quando você olha para os campos de classe, incluindo campos privados e decoradores, mas também pequenas coisas como gramática hashbang, e esperamos que em breve nossa proposta de anotações de tipo e módulos em andamento funcionem, eles meio que completam o panteão de coisas que as pessoas estão fazendo por meio de ferramentas , que queremos trazer para o idioma”, disse Ehrenberg. “O CSS está em um ponto semelhante, onde eles também estão trazendo muitos recursos que foram feitos por meio de ferramentas para a linguagem principal, como aninhamento – o exemplo clássico – ou escopo, ou camadas e variáveis”.

    Mas a padronização também ajuda a minimizar a configuração envolvida na criação do seu projeto, dando aos desenvolvedores um padrão claro de como configurar as coisas; e isso inspira novas ideias para o que o JavaScript pode incluir. Uma área que interessa particularmente a Ehrenberg para consideração futura: componentes centrais para interfaces de usuário reativas, como sinais e células, talvez possam se tornar parte da linguagem; isso é algo que os desenvolvedores confiam nas estruturas de front-end para hoje.

    Isso seguiria o que ele chama de o mesmo “caminho incremental compartilhado de descoberta” pelo qual o JavaScript é conhecido, com a experimentação se transformando em uma nova linha de base para os principais recursos que são incorporados à linguagem. Ainda há muito espaço para a evolução da linguagem, afirmou.

    “Acho que não estamos

    nem perto de ficar sem coisas para fazer inspiradas nessa direção.”

    Compartilhe
    Comentários (0)