---
title: "Solidity vs. Rust: tudo o que você precisa saber"
description: "Semelhanças, diferenças e como aprender Solidity e Rust"
---

# Solidity vs. Rust: tudo o que você precisa saber

Solidity e Rust são as duas principais [linguagens de programação](http://www.alchemy.com/overviews/web3-programming-languages) usadas por desenvolvedores web3 para construir aplicações web3 em blockchains compatíveis com a Ethereum Virtual Machine e em Solana, respectivamente. Ethereum e Solana estão entre as principais blockchains públicas baseadas em smart contracts do mundo.

Neste artigo, vamos falar sobre essas duas linguagens de programação web3 e entender por que elas são usadas por essas blockchains.

## **O que é Solidity?**

[**Solidity**](https://www.alchemy.com/overviews/solidity) é uma linguagem de programação orientada a objetos, de alto nível e com tipagem estática para implementar smart contracts na Ethereum, criada por uma equipe de desenvolvedores da Ethereum liderada por Christian Reitwiessner.

Segue uma explicação da terminologia:

- **Orientada a objetos** - uma abordagem de programação que foca o desenvolvimento de software em dados e objetos, em vez de lógica e funções
- **Alto nível** - linguagens que tornam o desenvolvimento de software mais acessível ao serem independentes da arquitetura de hardware do computador
- **Tipagem estática** - linguagens que verificam erros e tipos durante a compilação

Solidity foi projetada para rodar na Ethereum Virtual Machine \(EVM\), um ambiente de execução que funciona como um computador virtual para rodar programas. Os "programas" que a EVM executa são chamados de smart contracts, e smart contracts são escritos em Solidity.

### **Blockchains que suportam Solidity**

Além da Ethereum, aqui estão outras blockchains que suportam Solidity:

- **Polygon** - uma sidechain da Ethereum, Polygon permite que desenvolvedores construam aplicações descentralizadas escaláveis com taxas de transação baixas
- **Arbitrum** - uma solução de layer 2 que busca reduzir taxas de transação e congestionamento movendo a computação para fora da [mainnet da Ethereum](https://www.alchemy.com/rpc/ethereum)
- **Optimism** - uma blockchain layer 2 compatível com EVM que usa optimistic rollups para reduzir taxas de transação e congestionamento da rede
- **Polkadot** - uma blockchain pública e interoperável, Polkadot usa suas parachains para permitir que diferentes blockchains \(por exemplo, Astar\) interajam entre si
- **Avalanche** - Avalanche é uma blockchain Proof-of-Stake que busca resolver o trilema da blockchain.
- **Celestial** - Celestial é uma blockchain de disponibilidade de dados para a Ethereum que ordena e publica transações, mas não processa computação.
- **Fuel** - uma blockchain modular que separa execução de disponibilidade de dados e consenso para criar throughput flexível e segurança máxima

## **O que é Rust?**

**Rust é uma linguagem de programação de baixo nível, multiparadigma, com foco em segurança de tipos e desempenho, que permite aos desenvolvedores construir aplicações rápidas e robustas.**

Vamos entrar em mais detalhes.

- **Baixo nível** - Rust tem uma arquitetura semelhante à de um processador de computador, o que facilita escrever código eficiente e de alto desempenho
- **Multiparadigma** - linguagens são de tipos diferentes \(por exemplo, funcional, dinâmica, procedural, etc.\), e linguagens multiparadigma suportam mais de um tipo

### **Rust e Solana**

Solana é uma blockchain programável e de código aberto, o que significa que, assim como a Ethereum, ela suporta a funcionalidade de smart contracts \(programs\), e é frequentemente considerada a blockchain pública mais rápida do mundo, com um block time de 400 milissegundos e capacidade de processar 50.000 transações por segundo.

Solana permite desenvolvimento com C e C\+\+, mas usa Rust como sua linguagem de programação principal. Diferente da Solidity, Rust não foi criada especificamente para Solana; Rust já existia anos antes de Solana. Porém, foi escolhida como linguagem de programação principal por causa de suas características de alto desempenho.

Para começar a construir na Solana com Rust, os desenvolvedores só precisam [encontrar um provedor de RPC para Solana.](https://www.alchemy.com/overviews/solana-rpc)

### **Blockchains que suportam Rust**

Além da Solana, aqui estão outras blockchains que suportam Rust ou uma linguagem de programação baseada em Rust:

- **Near** - Near é uma blockchain layer one baseada em proof of stake que usa sharding para resolver o problema de escalabilidade.
- **Aptos** - Aptos é uma blockchain layer one baseada em move, uma linguagem de programação baseada em rust para implementar smart contracts.
- **Sui** - Sui é a primeira implementação de uma blockchain permissionless e executa smart contracts escritos em move.

## **Solidity vs. Rust**

Agora que já estabelecemos o que são essas linguagens, vamos compará-las e contrastá-las nesta seção.

### **Quais são as semelhanças entre Solidity e Rust?**

**As principais semelhanças entre Solidity e Rust são sua compatibilidade multichain e sua Turing completude.**

#### **1. Compatibilidade multichain**

Embora a Solidity tenha sido projetada especificamente para a Ethereum, ela também suporta blockchains layer two, sidechains, [blockchains modulares](https://www.alchemy.com/overviews/modular-vs-monolithic-blockchains) e blockchains layer one compatíveis com EVM, como Polkadot e Avalanche.

Da mesma forma, Rust suporta uma variedade de blockchains, incluindo Near e Solana, e foi a linguagem de programação que inspirou as linguagens Move e Sui. Também existe uma implementação de Rust usando o framework substrate do Polkadot.

#### **2. Turing completude**

Tanto Rust quanto Solidity são linguagens Turing completas. Uma linguagem Turing completa é qualquer linguagem capaz de resolver qualquer problema computacional independentemente de sua complexidade. Essa é uma característica que as linguagens de programação herdaram da máquina de Turing criada por **Alan Turing**.

### **Quais são as diferenças entre Solidity e Rust?**

**As duas principais diferenças entre Solidity e Rust, além das blockchains suportadas por cada linguagem, são que Solidity é uma linguagem de alto nível e orientada a objetos, enquanto Rust é uma linguagem de baixo nível e multiparadigma.**

#### **1. Alto nível vs. baixo nível**

Solidity é uma linguagem de alto nível que oferece um alto nível de abstração em relação à arquitetura do sistema computacional. Por causa disso, [Solidity é mais simples de aprender](https://www.alchemy.com/overviews/learn-solidity) e usar, o que a torna uma linguagem mais orientada ao usuário. Em contraste, Rust é uma linguagem de baixo nível, mais próxima do hardware do computador, e oferece boa eficiência de memória e velocidade, o que a torna uma linguagem mais orientada à máquina.

#### **2. Orientada a objetos vs. multiparadigma**

Um paradigma de programação é a abordagem ou estilo usado para resolver um determinado problema. Solidity é uma linguagem orientada a objetos porque usa o paradigma orientado a objetos para resolver problemas.

Já Rust é uma linguagem multiparadigma, o que significa que permite o uso de diferentes paradigmas para resolver problemas. Alguns dos paradigmas que suporta são orientado a objetos, funcional e imperativo, entre outros.

### **Quais são os benefícios de construir aplicações com Rust em vez de Solidity?**

Os dois principais benefícios de construir [aplicações](https://www.alchemy.com/dapps/top/defi-dapps) web3 com Rust em vez de Solidity são: as propriedades de segurança de memória e a velocidade de Rust tornam o desenvolvimento mais seguro para os engenheiros e as aplicações mais performáticas para os usuários.

#### **1. Segurança de memória**

Segurança de memória é uma propriedade de algumas linguagens de programação que evita que programadores cometam certos tipos de erros relacionados à memória. Rust alcança segurança de memória usando o princípio de ownership e borrowing.

Rust garante segurança de memória eliminando bugs relacionados à memória durante a compilação, o que a torna eficiente em memória sem o uso de um garbage collector, como outras linguagens memory-safe.

#### **2. Velocidade e alto desempenho**

Rust tem a capacidade de criar programas descentralizados com alto desempenho e output, característica essencial para aplicações em escala. Rust é mais eficiente porque consegue alcançar segurança de memória sem usar um garbage collector.

### **Quais são as desvantagens de construir aplicações Web3 com Rust em vez de Solidity?**

**As duas principais desvantagens de construir aplicações web3 com Rust em vez de Solidity são: o compilador de Rust é mais lento comparado ao de Solidity, e Rust é geralmente mais difícil de aprender.**

#### **1. Compilação lenta**

O compilador de Rust é lento. Rust usa a low-level virtual machine \(LLVM\) para gerar código, que ocupa uma parte significativa da base de código de Rust e leva um tempo considerável ao regenerar código de máquina durante a compilação. Às vezes, a compilação de programas para projetos grandes leva mais de 10 minutos.

#### **2. Mais difícil de aprender**

Rust é desafiador de aprender por várias razões, uma delas é que é diferente. Se familiarizar com seu sistema incomum de ownership e borrowing pode ser intimidante. Além disso, diferente de outras linguagens, programas em Rust são difíceis de copiar e colar, é necessário criar toda a base de código do zero.

### **Quais são os benefícios de construir aplicações com Solidity em vez de Rust?**

**Os dois principais benefícios de construir aplicações descentralizadas com Solidity em vez de Rust são: Solidity é mais fácil de aprender, e há muito mais ferramentas de desenvolvimento disponíveis para Solidity.**

#### **1. Mais fácil de aprender**

Solidity é uma linguagem de alto nível, o que torna seu código legível e compreensível para humanos, e também tem uma sintaxe semelhante à do Javascript; desenvolvedores com experiência prévia em Javascript não terão dificuldade em aprender Solidity.

#### **2. Muitas ferramentas de desenvolvimento**

Solidity conta com uma grande quantidade de excelentes ferramentas de desenvolvimento, sendo suportada por plataformas como a OpenZeppelin, que fornece bibliotecas open-source para desenvolvimento seguro de smart contracts.

Solidity também tem alguns [ambientes de desenvolvimento \(IDEs\)](https://www.alchemy.com/overviews/solidity-ide), como o Remix online IDE e o Hardhat, um ambiente de desenvolvimento local. Essas IDEs oferecem ferramentas e recursos que facilitam o desenvolvimento de aplicações descentralizadas.

### **Quais são as desvantagens de construir aplicações Web3 com Solidity em vez de Rust?**

**As duas principais desvantagens de construir aplicações web3 com Solidity em vez de Rust são: os integer overflows de Solidity e a dificuldade de análise estática tornam o desenvolvimento mais difícil para os desenvolvedores.**

#### **1. Integer overflow e underflow**

Um integer overflow ou underflow ocorre quando um número excede a quantidade que pode ser armazenada em um tipo de dado \(seu tamanho em bytes\). Por exemplo, \( 0 - 1 \) deveria resultar em \( -1 \), mas gera um erro em vez disso. Isso geralmente ocorre em versões anteriores da Solidity, versões anteriores à Solidity 0.8.

#### **2. Dificuldade de realizar análise estática**

Análise estática é o processo de analisar e depurar código sem realmente executá-lo. Esse tipo de depuração é desafiador devido à característica de Turing completude da Solidity, já que existem inúmeros resultados possíveis para o código.

## **Devo desenvolver com Solidity ou Rust?**

Tanto Rust quanto Solidity são projetadas para suportar a construção de smart contracts e aplicações escaláveis. Portanto, a resposta a essa pergunta depende das suas preferências e do ecossistema de blockchain no qual você deseja construir.
