<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcelo Castellani</title>
    <description>The latest articles on DEV Community by Marcelo Castellani (@mfcastellani).</description>
    <link>https://dev.to/mfcastellani</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1094601%2Fee999010-b9ec-4dce-a400-5baca0faa8ca.jpeg</url>
      <title>DEV Community: Marcelo Castellani</title>
      <link>https://dev.to/mfcastellani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mfcastellani"/>
    <language>en</language>
    <item>
      <title>Nosso amigo compilador</title>
      <dc:creator>Marcelo Castellani</dc:creator>
      <pubDate>Tue, 06 Jun 2023 15:19:11 +0000</pubDate>
      <link>https://dev.to/mfcastellani/nosso-amigo-compilador-1odi</link>
      <guid>https://dev.to/mfcastellani/nosso-amigo-compilador-1odi</guid>
      <description>&lt;p&gt;Dando sequência aos posts sobre Rust aqui no dev.to, vamos falar sobre compilação, afinal Rust é uma linguagem de programação compilada. Mas o que isso quer dizer?&lt;/p&gt;

&lt;p&gt;As linguagens de programação podem ser classificadas em três categorias principais: &lt;strong&gt;compiladas&lt;/strong&gt;, &lt;strong&gt;interpretadas&lt;/strong&gt; e aquelas que usam &lt;strong&gt;bytecode&lt;/strong&gt;. Cada uma dessas abordagens possui características distintas que afetam o processo de execução do código. Vamos explorar essas diferenças:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linguagens compiladas&lt;/strong&gt; são aquelas em que o código-fonte é traduzido integralmente para um código de máquina específico antes da execução. O compilador é responsável por converter todo o código-fonte em um arquivo executável, que pode ser diretamente executado pelo sistema operacional. Exemplos de linguagens compiladas incluem C, C++, Java (em alguns casos) e Rust.&lt;/p&gt;

&lt;p&gt;A principal vantagem das linguagens compiladas é que a tradução antecipada para código de máquina resulta em uma execução geralmente mais eficiente e rápida. Além disso, erros de sintaxe e semântica são identificados durante a etapa de compilação, o que ajuda a encontrar problemas antes da execução do programa. No entanto, a compilação pode exigir mais tempo e recursos, especialmente para programas maiores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linguagens interpretadas&lt;/strong&gt; são aquelas em que o código-fonte é executado linha por linha, em tempo real, por um programa chamado "interpretador". O interpretador analisa cada instrução do código-fonte e executa as ações correspondentes. Exemplos de linguagens interpretadas incluem Python, JavaScript, Ruby e PHP.&lt;/p&gt;

&lt;p&gt;Uma das principais vantagens das linguagens interpretadas é a sua portabilidade, pois o código-fonte é independente da arquitetura do sistema. Além disso, as linguagens interpretadas são frequentemente mais flexíveis, permitindo a execução interativa e a modificação dinâmica do código em tempo de execução. No entanto, o processo de interpretação pode ser mais lento em comparação com a execução de código compilado, uma vez que as instruções são analisadas em tempo real.&lt;/p&gt;

&lt;p&gt;Algumas linguagens utilizam uma abordagem intermediária, chamada de &lt;strong&gt;bytecode&lt;/strong&gt;. Nesse modelo, o código-fonte é compilado para um formato intermediário, chamado bytecode, que é executado por uma máquina virtual específica. A máquina virtual é um programa que interpreta e executa o bytecode. Exemplos de linguagens que usam bytecode incluem Java, C#, Python (em algumas implementações) e Ruby (em algumas implementações).&lt;/p&gt;

&lt;p&gt;O bytecode é um código de máquina simplificado e independente de plataforma, projetado para ser executado de forma eficiente pela máquina virtual. Essa abordagem combina algumas vantagens das linguagens compiladas e interpretadas. Por um lado, o bytecode é pré-compilado e pode ser executado mais rapidamente do que a interpretação direta do código-fonte. Por outro lado, a máquina virtual oferece portabilidade, pois pode ser executada em diferentes sistemas operacionais e arquiteturas.&lt;/p&gt;

&lt;p&gt;As linguagens compiladas apresentam algumas vantagens em relação às linguagens interpretadas ou de bytecode, especialmente no que diz respeito à velocidade. Como o código-fonte é traduzido diretamente para código de máquina, as linguagens compiladas tendem a ter um desempenho melhor em termos de velocidade de execução. Isso ocorre porque o código compilado é otimizado para a arquitetura do sistema e pode aproveitar ao máximo os recursos disponíveis. Em contraste, as linguagens interpretadas precisam analisar e executar as instruções em tempo real, o que pode resultar em uma execução mais lenta.&lt;/p&gt;

&lt;p&gt;Outro ponto muito importante é que o compilador é seu melhor amigo pois têm a capacidade de otimizar o código durante a compilação, o que pode resultar em um uso mais eficiente dos recursos do sistema. Ele também podem aplicar técnicas como inlining de funções, eliminação de código morto e otimizações de laços para melhorar o desempenho. Por outro lado, os interpretadores não têm a mesma capacidade de otimização, pois executam o código linha por linha sem uma visão completa do programa.&lt;/p&gt;

&lt;p&gt;Além disso os compiladores verificam o código-fonte em busca de erros de sintaxe e semântica durante a etapa de compilação. Isso significa que muitos erros são identificados antes mesmo da execução do programa, o que ajuda os desenvolvedores a corrigirem problemas de forma mais eficiente. Nas linguagens interpretadas, os erros são geralmente detectados durante a execução, o que pode levar a um ciclo de desenvolvimento mais lento ou problemas em produção.&lt;/p&gt;

&lt;p&gt;Outra vantagem é que nas linguagens compiladas, o código é transformado em um executável que pode ser implantado e executado em qualquer sistema operacional compatível. Isso facilita a distribuição do software, pois os usuários não precisam ter o compilador ou interpretador instalado em suas máquinas. Em contraste, nas linguagens interpretadas ou de bytecode, os usuários precisam ter o interpretador correspondente instalado para executar o código (por exemplo um interpretador JavaScript ou o .NET ou o JRE).&lt;/p&gt;

&lt;p&gt;É importante ressaltar que cada abordagem tem suas próprias vantagens e desvantagens, e a escolha entre linguagens compiladas, interpretadas ou de bytecode depende das necessidades específicas do projeto e dos compromissos que os desenvolvedores estão dispostos a fazer em termos de velocidade, facilidade de desenvolvimento e outros fatores.&lt;/p&gt;

&lt;h2&gt;
  
  
  O compilador do rust, nosso melhor amigo
&lt;/h2&gt;

&lt;p&gt;Um dos grades trunfos do Rust é o seu compilador, que além das vantagens apresentadas, realiza diversas transformações e verificações antes efetivamente rodar seu código. Mais do que isso, ele lhe dá mensagens claras e efetivas do que está errado, por que está errado e onde corrigir. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nZPWFkiS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bzyzsky5ws6o4h08ll4f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nZPWFkiS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bzyzsky5ws6o4h08ll4f.png" alt="A imagem apresenta um erro reportado pelo compilador do rust ao tentar atribuir uma sequência de caracteres a uma variável do tipo inteiro" width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Além dessa mensagem clara e direta do que está errado e por que, ele ainda permite usar a diretiva &lt;code&gt;explain&lt;/code&gt; para detalhar melhor o erro. No caso da imagem, nosso erro é o E0303. Dessa forma basta rodar o comando a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ rustc --explain E0308
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E um retorno detalhado do problema será apresentado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Expected type did not match the received type.

Erroneous code examples:


fn plus_one(x: i32) -&amp;gt; i32 {
    x + 1
}

plus_one("Not a number");
//       ^^^^^^^^^^^^^^ expected `i32`, found `&amp;amp;str`

if "Not a bool" {
// ^^^^^^^^^^^^ expected `bool`, found `&amp;amp;str`
}

let x: f32 = "Not a float";
//     ---   ^^^^^^^^^^^^^ expected `f32`, found `&amp;amp;str`
//     |
//     expected due to this


This error occurs when an expression was used in a place where the compiler
expected an expression of a different type. It can occur in several cases, the
most common being when calling a function and passing an argument which has a
different type than the matching type in the function declaration.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou seja, além de não deixar o código problemático ir para produção validando antes de o executar, ele ainda pode ser uma fonte incrível de aprendizado. &lt;/p&gt;

&lt;h2&gt;
  
  
  Como aprender Rust?
&lt;/h2&gt;

&lt;p&gt;Nessa série de artigos que estou publicando aqui no dev.to vou apresentar a linguagem Rust do zero, desde a instalação do ferramental necessário e configuração do editor de textos até a criação de uma API simples usando bibliotecas de mercado.&lt;br&gt;
 &lt;br&gt;
Se você se interessa por Rust seja por novas oportunidades profissionais, seja apenas pra aprender algo novo, me siga aqui ou &lt;a href="https://twitter.com/mfcastellani"&gt;no meu Twitter&lt;/a&gt;. Planejo publicar um artigo a cada dois dias, se tudo der certo. &lt;/p&gt;

&lt;p&gt;Você também pode dar uma olhada no material oficial da linguagem, &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;com acesso gratuito aqui&lt;/a&gt;. Ou &lt;a href="https://www.casadocodigo.com.br/products/livro-rust"&gt;no meu livro&lt;/a&gt;, escrito junto com meu amigo de longa data &lt;a href="https://pothix.com/"&gt;Willian Molinari&lt;/a&gt;, que está em sua segunda edição.&lt;/p&gt;

&lt;p&gt;Também tem o sensacional livro &lt;a href="https://www.amazon.com.br/Programming-Rust-Fast-Systems-Development/dp/1492052590/"&gt;Programming Rust&lt;/a&gt;, que cobre a linguagem de ponta a ponta além de diversos outros pontos em suas mais de setecentas páginas. &lt;/p&gt;

&lt;p&gt;Aprender uma nova linguagem de programação pode ser desafiador e excitante. Espero que embarque nessa viagem comigo.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Introdução a linguagem Rust</title>
      <dc:creator>Marcelo Castellani</dc:creator>
      <pubDate>Sat, 03 Jun 2023 02:27:15 +0000</pubDate>
      <link>https://dev.to/mfcastellani/introducao-a-linguagem-rust-3of9</link>
      <guid>https://dev.to/mfcastellani/introducao-a-linguagem-rust-3of9</guid>
      <description>&lt;h2&gt;
  
  
  Um pouco de história
&lt;/h2&gt;

&lt;p&gt;A linguagem Rust tem sua origem no início dos anos 2000, quando um programador da Mozilla, Graydon Hoare, começou a trabalhar em um novo projeto. Hoare estava insatisfeito com as limitações e as complexidades de outras linguagens de programação existentes, como C++ e Haskell, e decidiu criar uma linguagem que resolvesse essas questões. Estava dado o primeiro passo para uma linguagem poderosa, concorrente e moderna.&lt;/p&gt;

&lt;p&gt;Em 2010, o Rust foi lançado como um projeto de código aberto pela Mozilla Research, com Graydon Hoare liderando a equipe de desenvolvimento. O objetivo do Rust era fornecer uma linguagem de programação de sistemas que fosse segura, concorrente e prática, combinando alta performance com abstrações de alto nível.&lt;/p&gt;

&lt;p&gt;Rust foi projetada desde o início para ser uma linguagem segura e livre de erros. Uma das principais inovações introduzidas por Rust é o sistema de gerenciamento de memória chamado de "borrow checker" (verificador de empréstimos). Esse sistema permite que o compilador da linguagem analise o código fonte e previna erros comuns de acesso inválido, como referências nulas, estouro de buffer e vazamentos de memória. Com isso, Rust elimina a maioria dos erros relacionados à memória que são frequentes em outras linguagens com a mesma finalidade, como o meu querido C e o C++.&lt;/p&gt;

&lt;p&gt;Outra característica importante do Rust é sua ênfase na concorrência. A linguagem foi projetada para facilitar a criação de programas paralelos e distribuídos, permitindo que os desenvolvedores aproveitem ao máximo os recursos dos processadores modernos. Rust possui um modelo de concorrência baseado em atores, no qual diferentes partes do programa se comunicam por meio de trocas de mensagens assíncronas.&lt;/p&gt;

&lt;p&gt;À medida que Rust ganhava popularidade, a comunidade em torno da linguagem começou a crescer rapidamente. Em 2015, Rust alcançou sua primeira versão estável, conhecida como Rust 1.0. Desde então, a linguagem tem recebido atualizações regulares, com melhorias de desempenho, novos recursos e correções de bugs.&lt;/p&gt;

&lt;p&gt;A adoção do Rust tem se expandido em diversas áreas, desde o desenvolvimento de sistemas operacionais e navegadores até a programação de servidores, dispositivos embarcados ou mesmo aplicações web. Empresas como Mozilla, Dropbox, Amazon, Microsoft e Facebook estão usando Rust em projetos importantes.&lt;/p&gt;

&lt;p&gt;Além disso, a comunidade de desenvolvedores em torno do Rust é ativa e engajada. Existem inúmeros recursos, como documentação abrangente, bibliotecas e ferramentas de suporte, que tornam a aprendizagem e a utilização da linguagem mais acessíveis. Além disso Rust possui um grande ferramental, sejam as que já vem junto ao pacote básico ou plugins para IDE's poderosas como o VSCode ou o CLion, da JetBrains.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que aprender Rust?
&lt;/h2&gt;

&lt;p&gt;Aprender Rust tem se tornado cada vez mais importante no cenário da programação, pois a linguagem oferece uma série de benefícios e vantagens que a tornam valiosa para desenvolvedores e empresas.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Segurança de memória: Rust possui um sistema de gerenciamento de memória único que elimina a grande maioria dos erros relacionados à memória, como vazamentos, referências nulas e estouros de buffer. Isso torna os programas escritos em Rust mais robustos e seguros, evitando vulnerabilidades comuns em outras linguagens.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Concorrência e paralelismo: Com seu modelo de concorrência baseado em atores e suporte embutido para programação assíncrona, Rust facilita o desenvolvimento de programas paralelos e distribuídos. Isso é especialmente relevante em um mundo cada vez mais orientado a sistemas distribuídos e com processadores com múltiplos núcleos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Desempenho e eficiência: Rust oferece um desempenho próximo ao de linguagens clássicas, como C e C++, ao mesmo tempo em que proporciona abstrações de alto nível que facilitam o desenvolvimento de software. Essa combinação torna Rust a escolha ideal para aplicações que exigem alta performance, como jogos, motores gráficos e sistemas de tempo real.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ecossistema crescente: A comunidade em torno de Rust está em constante crescimento, o que significa que existem muitos recursos disponíveis, como bibliotecas, frameworks e ferramentas de desenvolvimento. Isso facilita a criação de projetos em Rust, reduzindo a necessidade de reinventar a roda e permitindo que os desenvolvedores se concentrem na resolução de problemas específicos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Oportunidades de carreira: À medida que Rust ganha popularidade, a demanda por desenvolvedores com conhecimento nessa linguagem também está aumentando. Aprender Rust pode abrir portas para oportunidades de emprego emocionantes em empresas que estão adotando a linguagem e buscando profissionais qualificados para trabalhar em projetos desafiadores.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Dessa forma, e respondendo a pergunta do subtítulo, aprender Rust não só amplia o leque de habilidades de programação, mas também oferece uma base sólida para construir sistemas confiáveis e de alto desempenho. &lt;/p&gt;

&lt;h2&gt;
  
  
  Como aprender Rust?
&lt;/h2&gt;

&lt;p&gt;Nessa série de artigos que irei publicar aqui no dev.to vou apresentar a linguagem Rust do zero, desde a instalação do ferramental necessário e configuração do editor de textos até a criação de uma API simples usando bibliotecas de mercado.&lt;br&gt;
 &lt;br&gt;
Se você se interessa por Rust seja por novas oportunidades profissionais, seja apenas pra aprender algo novo, me siga aqui ou &lt;a href="https://twitter.com/mfcastellani"&gt;no meu Twitter&lt;/a&gt;. Planejo publicar um artigo a cada dois dias, se tudo der certo. &lt;/p&gt;

&lt;p&gt;Você também pode dar uma olhada no material oficial da linguagem, &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;com acesso gratuito aqui&lt;/a&gt;. Ou &lt;a href="https://www.casadocodigo.com.br/products/livro-rust"&gt;no meu livro&lt;/a&gt;, escrito junto com meu amigo de longa data &lt;a href="https://pothix.com/"&gt;Willian Molinari&lt;/a&gt;, que está em sua segunda edição.&lt;/p&gt;

&lt;p&gt;Também tem o sensacional livro &lt;a href="https://www.amazon.com.br/Programming-Rust-Fast-Systems-Development/dp/1492052590/"&gt;Programming Rust&lt;/a&gt;, que cobre a linguagem de ponta a ponta além de diversos outros pontos em suas mais de setecentas páginas. &lt;/p&gt;

&lt;p&gt;Aprender uma nova linguagem de programação pode ser desafiador e excitante. Espero que embarque nessa viagem comigo.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
