O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

[video] Introdução à linguagem Rust

Iniciado por thi, 29/12/2019 às 23:38

29/12/2019 às 23:38 Última edição: 31/12/2019 às 13:52 por thi
Oi pessoal,
estou trabalhando numa série de videos de uma apresentação de introdução à linguagem de programação Rust.

Espero que gostem:


Críticas são muito bem-vindas, e se tiverem dúvidas é só falar
(aqui ou no video).

04/01/2020 às 12:47 #1 Última edição: 04/01/2020 às 12:51 por Syureri
Honestamente eu prefiro usar Rust que C++ qualquer hora, e olha que mexo com C++ faz um bom tempo já. A linguagem é moderna, baixo nível e rápida, tem um sistema de build e package manager padrão (ao contrário de C/C++ que tem um zilhão de build systems e nenhum é padrão, com nego te condenando por não usar CMake mesmo todos concordando que seja horrível) e uma standard library decente para realizar tarefas básicas e simples (conversão de encoding, IO). E, é claro, te permite criar código independente de uma única plataforma (mesmo que eu use principalmente windows, é uma boa não se apegar demais à API do sistema caso você queira, no futuro, reutilizar seu código em um console, por exemplo).

Sem falar que importa/exporta símbolos que podem ser usados em C# (assim como C/C++, só que com uma sintaxe mais óbvia).

É uma boa ver conteúdo em português sobre a linguagem, espero ver onde isso vai dar (O/

Não conheço essa linguagem, ela é utilizada para jogos ou possui uma outra função? Se somente com jogos, 2D ou 3D?

A minha sugestão é que você não crie uma playlist no youtube, mas sim monte um curso online bem estruturado na Udemy. Assim, vai aprender mais sobre a própria linguagem, porque terá que ensinar e ainda irá receber um valor por cada curso vendido.
Unique Destiny | um novo conceito de RPG Maker 2000!

19/01/2020 às 01:13 #3 Última edição: 19/01/2020 às 01:15 por thi
Legal Syureri, não fazia ideia de que mais gente aqui do fórum conhecia a linguagem!
E nossa.. ter que sair da linguagem (e ir pra C++ por exemplo) e perder as tuplas, os enums, traits, organização por módulo, derives.. é ruim demais!!

Recentemente eu vi num encontro de c++ sobre 2020, cppcon2020 eu acho - youtube -, que algumas features que são comuns no Rust vão entrar pra C++ (módulo, talvez pattern match em 2023), então deve até dar uma melhorada.. só que ainda tende a levar o que, uns 2, 3, 6 anos até estar tudo implementado..? sem contar que as coisas ficam todas tortas, portque entram na forma de gambiarra na linguagem..

mas vamo ver.. eu torço bastante para que vá pra frente.

---

Avenger, ela é uma linguagem que tem uma aparência de python, mas poder de C++.
Tem gente utilizando pra jogos 2D e 3D sim, mas ainda é uma área fraca na linguagem (GUI também, é muito fraco). Tem gente utilizando pra fazer jogos em webassembly também.

Este site cataloga alguns recursos que se utiliza pra fazer jogos: https://arewegameyet.com/
Este daqui, que vi lá, inclusive para um a la rpg maker: https://github.com/Machine-Hum/realm.one
Existem algumas frameworks também. Uma bastante famosa, pelo qe parece, é este: https://amethyst.rs/
E tem esta também: https://ggez.rs/
E este daqui é um dos jogos que, se eu não me engano, foi portado pra webassembly - e daí da pra jogar no browser: http://www.luduminis.com/pascal/

Aproveitando, uma das formas de você enxergar o webassembly/wasm é como um "javascript compilado", que daí ele roda no navegador só que tende a ser bem rápido.

---

Valeu, o material para as próximas aidna está muito crú, mas caso eu continue, vou testar o Udemy. Valeu!

19/01/2020 às 04:28 #4 Última edição: 19/01/2020 às 05:08 por Syureri
Citar[...] e perder as tuplas, os enums, traits, organização por módulo, derives.. é ruim demais!!
Suponho que tenha confundido C++ com C?

Tuplas-C++
[close]
Tuplas-C#
[close]
Enums-C
[close]
Enums-C++
[close]
Enums-C#
[close]
Traits/Derive-C++
Em C++, classes, structs, interfaces representam a mesma coisa: um bloco de memória alocada seja no heap ou no stack.
[close]
Traits/Derive-C#
[close]
Módulo-C++
[close]
Módulo-C#
[close]

Creio que a única coisa que Rust faça que C++ não seja capaz de fazer é analisar estaticamente durante o tempo de compilação se uma operação vai resultar em comportamento indefinido ou não (compiladores atualizados geram um aviso ao menos), coisa que Rust não permite acontecer. C++ assume que você saiba o que está fazendo e não irá lhe impedir de corromper memória por acidente. Ela é considerada a linguagem mais poderosa (tirando C) por essas e outras razões, mas não quer dizer que mexer nela seja agradável :feelsbatman:. O fato de que ela é tão antiga e contém tantos problemas históricos é uma das principais razões de Rust ter sido criado (o/




Mas honestamente, não curto muito trampar com C++. Geralmente quando preciso interoperar com alguma lib nativa (header only, por exemplo), crio uma Shared Library em C++, com uma API em C cujo propósito é exportar funções que eu vá usar em C# (que é exatamente o que a Unity e a CryEngine fazem).

09/02/2020 às 05:45 #5 Última edição: 09/02/2020 às 06:04 por thi
Syureri,

> Tuplas em C++
Verdade, eu me enganei. Elas existem em C++, apesar de faltar ergonomia (ao meu ver). Mas existem mesmo.

> Enums em C/C++
Existe algo chamado "enum" nestas linguagens, mas é diferente do "enum" em Rust.
Apesar disto, realmente, ainda continua possível de se replicar o mesmo comportamento em C/C++, bastaria que vc utilizasse uma estrutura que guarda: "uma tag" (pra indicar as variantes) e "um corpo", sendo este corpo uma union de várias definições de estruturas, uma pra cada variante.
Porém, novamente, isso peca na ergonomia por falta de pattern matching - o que pode mudar em c++23.

> Traits e Derive
Classe e herança não cobre realmente o sistema de traits.
Polimorfismo (+ override de método) por classe não vem de graça uma vez que quando métodos são virtuais o dispatch é dinâmico (vs estático), enquanto nas traits em Rust, sendo neste possível um poorman's polimorfismo, a implementação dos métodos (o que seria comparável com o method override) resulta em dispatch, a priori, estático (mas pode-se optar por dispatch dinâmico também).
Fora isso, as traits oferecem um 'guard' na hora de se criar funções genéricas, onde em c++ ainda é duck typing (o que tem suas vantagens e desvantagens..) - apesar de uma mudança estar vindo em c++20.

Mas sobre o derive, é uma noção de se gerar código (eg. implementação de traits) via macros, e o sistema de classe em c++ por si só não tem relação com isso..

> Módulos
Infelizmente os namespaces em c++ são bem diferentes de um sistema 'completo' de módulos.
eg. os namespaces não estão atrelados a 'um arquivo', ou a 'um ítem'. Todos os arquivos, inclusive código de terceiros, podem interferir em quaisquer namespaces, como introduzir ítens no escopo, etc.
Inclusive, código de dentro de um namespace de terceiros pode inteferir em todos os namespaces, como se aquele código redefenir uma palavra.
Já um sistema de módulos é de fato uma barreira entre o código dentro daquele módulo, e fora daquele módulo, o que contribui pra previsibilidade etc..
Porém, também, isto está para mudar em c++20 com um sistema de módulos mais robusto.

E concordo! C++ infelizmente arca com problemas históricos, e suporta código de décadas atrás..
Isso não é fácil e tem um custo muito alto. Um dos problemas é a complexidade da linguagem - e toda e qualquer complexidade 'desnecessária' acabada resultando em perda de produtividade - mesmo pq o trabalho de se absorver a complexidade em si poderia ter sido usado para outra coisa.
(Mas claro que existem outras formas de se ganhar/perder produtividade, complexidade é só uma delas..)
Porém, dentro do próprio C++ existe um movimento para que ele abandone o suporte para decisões antigas e que são erradas, através de um sistema de epoch da linguagem. Com isso viria fragmentação - mas do que adianta não haver fragmentação se realmente acontecer do pessoal migrar pra Rust, não é mesmo? Acredito que este é o raciocínio, e se realmente houver um fortalecimento desta migração, esta pressão sobre C++ de ter a complexidade reduzida deve se intensificar.