Enable javascript in your browser for better experience. Need to know to enable it? Go here.
Volume 30 | Abril 2024

Linguagens & Frameworks

Linguagens & Frameworks

Adote ?

Experimente ?

  • O framework Astro está ganhando cada vez mais popularidade na comunidade. Uma de nossas equipes utilizou o Astro para construir sites focados em conteúdo, como blogs e sites de marketing. O Astro é um framework para aplicações multi-página que renderiza HTML no servidor e minimiza a quantidade de JavaScript enviada pela rede. Apesar de incentivar o envio de apenas HTML, gostamos do fato de o Astro permitir, quando apropriado, o uso de componentes ativos escritos na framework JavaScript de front-end da sua escolha. Isso é possível através da sua arquitetura de ilhas (island architecture). As ilhas são regiões interativas dentro de uma única página, onde o JavaScript necessário é baixado somente quando necessário. Dessa forma, a maior parte do site é convertida em HTML estático e rápido, e as partes em JavaScript são otimizadas para carregamento paralelo. Nossa equipe gosta tanto a performance de renderização de página quanto a velocidade de compilação do Astro. A sintaxe de componentes do Astro é uma extensão simples do HTML, tornando a curva de aprendizado bem tranquila.

  • Comparar DataFrames é uma tarefa comum na Engenharia de Dados, frequentemente realizada para verificar se não ocorreram desvios ou inconsistências significativas entre os resultados de duas abordagens de transformação de dados. O DataComPy é uma biblioteca Python que facilita a comparação de dois DataFrames no pandas, Spark e outras tecnologias. A biblioteca vai além de verificações básicas de igualdade, fornecendo insights detalhados sobre discrepâncias nos níveis de linha e coluna. O DataComPy também permite especificar tolerância absoluta ou relativa para comparação de colunas numéricas, bem como diferenças conhecidas que não precisam ser destacadas em seu relatório. Algumas de nossas equipes o utilizam como parte de seu pacote de smoke testing; elas consideram eficiente para comparar DataFrames grandes e complexos, e seus relatórios são fáceis de entender e acionar.

  • Pinia é uma biblioteca de store e framework de gerenciamento de estado para Vue.js. Ela utiliza sintaxe declarativa e oferece sua própria API de gerenciamento de estado. Comparado ao Vuex, o Pinia oferece uma API mais simples e enxuta, APIs no estilo Composition e, mais importante, possui suporte sólido a inferência de tipos quando usado com TypeScript. O Pinia é endossado pela equipe Vue.js como uma alternativa confiável ao Vuex e atualmente é a biblioteca oficial de gerenciamento de estado para Vue.js. Nossos times estão utilizando o Pinia por sua simplicidade e facilidade de implementação.

  • As cargas de trabalho de aprendizado de máquina (ML) da atualidade exigem cada vez mais recursos computacionais. Ambientes de desenvolvimento em nodo único, como o seu laptop, apesar de convenientes, não escalam para atender a essas demandas. O Ray é um framework unificado para dimensionar código Python e de IA do laptop para clusters. O Ray é essencialmente um framework de computação distribuída bem encapsulado, com uma série de bibliotecas de IA para simplificar o trabalho de ML. Ao se integrar com outras frameworks (por exemplo, PyTorch and TensorFlow), ele pode ser usado para construir plataformas de ML em larga escala. Empresas como OpenAI e Bytedance usam o Ray extensivamente para treinamento e inferência de modelos. Também usamos suas bibliotecas de IA para auxiliar no treinamento distribuído e no ajuste de hiperparâmetros em nossos projetos. Recomendamos que você experimente o Ray ao construir projetos de ML escaláveis.

Avalie ?

  • Alguns aplicativos e jogos mobile podem ser tão exigentes que causam superaquecimento momentâneo em poucos minutos. Nesse estado, a frequência da CPU e GPU é reduzida para auxiliar no resfriamento do dispositivo, mas também resulta em taxas de quadros (frame rates) menores em jogos. Quando a situação térmica melhora, as taxas de quadros aumentam novamente e o ciclo se repete, tornando a experiência desorganizada. O Android Adaptability, um novo conjunto de bibliotecas, permite que as pessoas desenvolvedoras de aplicativos respondam a mudanças no desempenho e na situação térmica. O Android Dynamic Performance Framework (ADPF) inclui a Thermal API para fornecer informações sobre o estado térmico e a Hint API para ajudar o Android a escolher o ponto de operação ideal da CPU e o posicionamento do núcleo. As equipes que utilizam Unity vão aproveitar mais o pacote Unity Adaptive Performance útil, pois ele funciona com ambas as APIs.

  • Já discutimos anteriormente a técnica de Criptografia Homomórfica, que permite realizar cálculos diretamente em dados criptografados. Concrete ML é uma ferramenta de código aberto que possibilita o aprendizado de máquina com preservação de privacidade. Construída sobre o Concrete, ela simplifica o uso da criptografia totalmente homomórfica (FHE) para pessoas cientistas de dados, auxiliando-os na conversão automática de modelos de aprendizado de máquina em seus equivalentes homeomórficos. Os modelos integrados do Concrete ML possuem APIs quase idênticas às suas contrapartes do scikit-learn. Também é possível converter redes PyTorch para FHE usando as APIs de conversão do Concrete ML. É importante ressaltar que a FHE com Concrete ML pode ser lenta sem o uso de hardware especializado.

  • Crabviz é um plugin de código aberto para o Visual Studio Code que permite a criação de diagramas de chamada (call graphs). Esses diagramas são interativos, o que é essencial ao trabalhar com bases de código de tamanho médio, como microsserviços. Eles exibem tipos, métodos, funções e interfaces agrupados por arquivo, além de mostrar as relações de chamadas de função e implementações de interface. Como o Crabviz é baseado no Language Server Protocol, ele suporta qualquer linguagem, desde que o servidor de linguagem correspondente esteja instalado. Isso significa, porém, que o Crabviz está limitado à análise estática de código, o que pode não ser suficiente para alguns casos de uso. O plugin é escrito em Rust e está disponível no Marketplace do Visual Studio Code.

  • O Crux é um framework de código aberto para o desenvolvimento de aplicativos multiplataforma escrito em Rust. Inspirado na arquitetura Elm, o Crux organiza a lógica de negócios no core e a camada de interface da pessoa usuária em frameworks nativos como SwiftUI, Jetpack Compose, React/Vue ou frameworks baseados em WebAssembly (como Yew). Com o Crux, você pode escrever código de comportamento livre de efeitos colaterais em Rust e compartilhá-lo entre iOS, Android e a web.

  • A recente disponibilização em preview público dos Databricks Asset Bundles (DABs) incluídos na versão 0.205 ou superior da Databricks CLI está se tornando a forma oficialmente recomendada para empacotamento de Databircks assets para o controle de versão, testes e implantação. Em nossas equipes, o DABs já começaram a substituir o dbx. Os DABs permitem o empacotamento da configuração de workflows, jobs e tasks, assim como o código a ser executado nessas tasks, como um único bundle que pode ser implantado em múltiplos ambientes. Ele vem com templates para tipos comuns de assets e suporta templates customizados. Embora os DABs incluam templates para notebooks e suportem a implantação deles em produção, continuamos a desaconselhar a produção de notebooks e incentivamos a escrita de código de produção com práticas de engenharia que suportem as necessidades de manutenibilidade, resiliência e escalabilidade desse tipo de carga de trabalho.

  • Electric é um framework de sincronização local-first para aplicações mobile e web. Local-first é um paradigma de desenvolvimento onde o código da sua aplicação se comunica diretamente com um banco de dados local integrado, e a sincronização de dados ocorre em segundo plano através de replicação ativa-ativa para o banco de dados central. Com o Electric, você tem SQLite como opção local integrada e PostgreSQL para o armazenamento central. Embora o local-first melhore muito a experiência da pessoa usuária, ele também traz desafios. Pensando nisso, os inventores do CRDT trabalharam no framework Electric para facilitar o desenvolvimento.

  • LiteLLM é uma biblioteca que permite uma integração descomplicada com APIs de diversos provedores de modelos de linguagem de grande porte (LLMs). Ela padroniza as interações por meio de um formato de API compatível com o OpenAI.O LiteLLM oferece suporte a uma ampla variedade de provedores e modelos e disponibiliza uma interface unificada para funcionalidades de complementação, incorporação e geração de imagens. A biblioteca simplifica a integração ao traduzir entradas para atender aos requisitos específicos de endpoint de cada provedor. Isso é particularmente útil no cenário atual, onde a ausência de especificações padronizadas de API para fornecedores de LLM dificulta a inclusão de vários LLMs em projetos. Nossas equipes utilizaram o LiteLLM para alternar modelos subjacentes em aplicações de LLM, superando um desafio significativo de integração. No entanto, é fundamental reconhecer que as respostas dos modelos a prompts idênticos podem variar, indicando que um método de invocação consistente por si só pode não otimizar totalmente o desempenho da complementação. Vale ressaltar que o LiteLLM possui diversos outros recursos, como o servidor proxy, que não estão no escopo deste blip.

  • Continuamos alertando contra o fine-tune apressado de modelos de linguagem de grande porte (LLMs) a menos que seja absolutamente crítico - isso acarreta custos e demanda alto nível de expertise. Porém, acreditamos que a LLaMA-Factory pode ser útil quando o fine-tuning for necessário. É uma estrutura de código aberto e fácil de usar para fine-tuning e treinamento de LLMs. Com suporte para LLaMA, BLOOM, Mistral, Baichuan, Qwen e ChatGLM, torna o conceito complexo de fine-tuning relativamente acessível. Nossos times utilizaram o ajuste LLaMA-Factory's LoRA tuning com sucesso em um modelo LLaMA 7B. Portanto, se você precisa fazer fine-tuning, esta estrutura merece ser avaliada.

  • O MLX é um framework de código aberto de arrays, projetado para aprendizado de máquina eficiente e flexível em dispositivos Apple Silicon. Ele permite que cientistas de dados e engenheiros de aprendizado de máquina (ML) acessem a GPU integrada, possibilitando a escolha do hardware mais adequado às suas necessidades. O design do MLX é inspirado por frameworks como NumPy, PyTorch e Jax, entre outros. Um dos principais diferenciais é o modelo de memória unificada do MLX, que elimina a sobrecarga de transferências de dados entre a CPU e a GPU, resultando em execução mais rápida. Esse recurso torna plausível a execução de modelos em dispositivos como iPhones, abrindo uma grande oportunidade para aplicações de IA embarcada. Embora nichado, vale a pena acompanhar o desenvolvimento deste framework para a comunidade de desenvolvedores de ML.

  • Mojo é uma nova linguagem de programação voltada para IA. Ele visa reduzir a distância entre pesquisa e produção ao combinar a sintaxe e o ecossistema do Python com recursos de programação de sistemas e metaprogramação. É a primeira linguagem a se beneficiar do novo backend de compilação MLIR e traz recursos interessantes como abstração de custo zero, autoajuste, destruição imediata, otimização de chamadas recursivas e melhor ergonomia para SIMD (single instruction, multiple data). Nós gostamos bastante do Mojo e incentivamos você a experimentá-lo. O SDK do Mojo está atualmente disponível para sistemas operacionais Ubuntu e macOS.

  • O Otter é uma biblioteca de cache livre de contenção para Go. Embora o Go possua diversas bibliotecas similares, destacamos o Otter por dois motivos: sua excelente taxa de transferência e a implementação inteligente do algoritmo S3-FIFO, que garante uma boa taxa de acerto no cache. Além disso, o Otter oferece suporte a genéricos, permitindo que você utilize qualquer tipo comparável como chave e qualquer tipo como valor.

  • O Pkl é uma linguagem e um conjunto de ferramentas de configuração criados originalmente para uso interno pela Apple e agora disponibilizados como código aberto. A principal característica do Pkl é o seu sistema de tipos e validação, permitindo que erros de configuração sejam detectados antes da implantação. Ele gera arquivos JSON, .plist, YAML e .properties e possui ampla integração com IDEs e outras linguagens, incluindo geração de código.

  • O impacto do Rust continua crescendo, e muitas das ferramentas de compilação e linha de comando que abordamos recentemente são escritas nele. Agora, também estamos observando uma movimentação no uso de Rust para o desenvolvimento de Interface para Pessoas Usuárias (UI). A maioria das equipes que preferem usar a mesma linguagem para código rodando no navegador e no servidor opta por JavaScript ou TypeScript. No entanto, com o WebAssembly você pode usar Rust no navegador, e isso está se tornando um pouco mais comum agora. Frameworks como Leptos e sauron focam no desenvolvimento web, enquanto Dioxus e vários outros frameworks suportam o desenvolvimento de aplicativos multiplataforma para desktop e dispositivos móveis, além do desenvolvimento web.

  • O vLLM é um motor de inferência e serviço de alta performance e eficiência de memória para modelos de linguagem de grande porte (LLMs). Sua eficiência se deve principalmente à implementação de continuous batching para requisições recebidas. Ele suporta diversas opções de implantação, incluindo inferência e serviço distribuído com paralelismo de tensores usando o runtime Ray, implantação em nuvem com SkyPilot e implantação com NVIDIA Triton, Docker e LangChain. Nossos times tiveram boas experiências executando workers vLLM dockerizados em máquinas virtuais on-prem, integrando com um servidor de API compatível com OpenAI - o qual, por sua vez, é utilizado por diversas aplicações, incluindo plugins de IDE para auxílio à codificação e chatbots. Nossas equipes utilizam o vLLM para rodar modelos como CodeLlama 70B, CodeLlama 7B e Mixtral. Outro destaque é a capacidade de escala do motor: bastam algumas alterações na configuração para rodar um modelo de 7B para 70B. Se você busca colocar LLMs em produção, o vLLM merece ser explorado.

  • O Voyager é uma biblioteca de navegação criada para o Jetpack Compose do Android. Ele suporta diversos tipos de navegação, incluindo Linear, BottomSheet, Tab e Nested, e seu modelo de tela integra-se com frameworks populares como Koin eHilt. Ao usar o Jetpack Compose em um projeto multiplataforma, o Voyager é uma boa opção para implementar um padrão de navegação comum em todas as plataformas suportadas. O desenvolvimento do Voyager voltou a ganhar força e a biblioteca atingiu a versão 1.0 em dezembro de 2023.

  • wgpu é uma biblioteca gráfica para Rust baseada na API WebGPU, reconhecida por sua capacidade de lidar com tarefas gráficas e de computação de propósito geral na GPU de forma eficiente. O wgpu visa preencher a lacuna deixada pela eliminação gradual de padrões gráficos antigos como OpenGL e WebGL. Ele introduz uma abordagem moderna para o desenvolvimento gráfico que abrange aplicativos nativos e projetos baseados na web. Sua integração com o WebAssembly permite ainda que aplicativos gráficos e de computação sejam executados no navegador. O wgpu representa um avanço para tornar a programação gráfica avançada mais acessível aos desenvolvedores web, com uma variedade de aplicações, desde jogos até a criação de animações web sofisticadas, posicionando o wgpu como uma tecnologia promissora para se avaliar.

  • Zig é uma nova linguagem de programação que compartilha muitos atributos com C, mas com tipagem mais forte, alocação de memória facilitada e suporte a namespaces, entre vários outros recursos. O objetivo do Zig é fornecer uma linguagem simples com compilação direta que minimize efeitos colaterais e entregue execução previsível e fácil de rastrear. O Zig também oferece acesso simplificado à capacidade de compilação cruzada do LLVM. Alguns dos nossos desenvolvedores consideraram esse recurso tão valioso que estão usando o Zig como um compilador cruzado, mesmo não escrevendo código Zig. Vemos equipes na indústria utilizando Zig para auxiliar na construção de cadeias de ferramentas C/C++. Sendo uma linguagem inovadora, o Zig merece ser considerada para aplicações onde C está sendo cogitado ou já esteja em uso.

Evite ?

  • No Radar anterior, mencionamos algumas críticas emergentes sobre o LangChain. Desde então, ficamos ainda mais cautelosos em relação a ele. Embora o framework ofereça um conjunto poderoso de recursos para construir aplicações em modelos de linguagem de grande porte (LLMs), consideramos o LangChain difícil de usar e excessivamente complexo. A popularidade e atenção inicial conquistadas na indústria o transformaram em um padrão para muitos. No entanto, à medida que o LangChain tenta evoluir e acompanhar o ritmo acelerado de mudanças, fica cada vez mais difícil para as pessoas desenvolvedoras navegarem por essas alterações em conceitos e padrões. Também descobrimos que o design da API é inconsistente e verboso. Por isso, muitas vezes obscurece o que realmente está acontecendo nos bastidores, dificultando o entendimento e controle do funcionamento dos LLMs e dos diversos padrões ao seu redor. Como consequência, estamos movendo o LangChain para Evite. Em muitos dos nossos casos de uso, verificamos que uma implementação com uso mínimo de frameworks especializados é suficiente. Dependendo do seu caso específico, você também pode considerar outras estruturas como Semantic Kernel, Haystack ou LiteLLM.

 
  • languages-and-frameworks quadrant with radar rings Adote Experimente Avalie Evite Adote Experimente Avalie Evite
  • Novo
  • Modificado
  • Sem alteração

Não encontrou algo que você esperava achar?

 

Cada edição do Radar inclui blips que refletem nossas experiências nos seis meses anteriores. Talvez já tenhamos falado sobre o que você procura em um Radar anterior. Às vezes, deixamos coisas de fora simplesmente porque há muitas a serem abordadas. Também pode faltar um tópico específico porque o Radar reflete nossa experiência, não se baseando em uma análise abrangente do mercado.

Não encontrou algo que você esperava achar?

 

Cada edição do Radar inclui blips que refletem nossas experiências nos seis meses anteriores. Talvez já tenhamos falado sobre o que você procura em um Radar anterior. Às vezes, deixamos coisas de fora simplesmente porque há muitas a serem abordadas. Também pode faltar um tópico específico porque o Radar reflete nossa experiência, não se baseando em uma análise abrangente do mercado.

Baixe o PDF

 

 

 

English | Español | Português | 中文

Inscreva-se para receber o boletim informativo Technology Radar

 

 

Seja assinante

 

 

Visite nosso arquivo para acessar os volumes anteriores