Zig é o sucessor de C (não Rust)
ฝัง
- เผยแพร่เมื่อ 10 ก.ย. 2024
- Rust tem ganhado uma popularidade tremenda nos últimos tempos, com muita gente falando que ela deve substituir linguagens como C e C++ no futuro. Mas outra queridinha vem chegando aos poucos e tomando a cena, Zig. E eu acho que no fim do dia é Zig quem vai servir como sucessor de C na área de systems programming. Aqui quero explicar pra vocês o porquê precisamos de um substituto para C em primeiro lugar, as características de Rust e Zig, suas semelhanças diferenças, e porque eu acho que duas funcionalidades de Zig são decisivas nessa questão: compatibilidade com C/C++ e suas capacidades em tempo de compilação.
LIVES: Toda terça e quinta as 21h
LINKS
Rust: www.rust-lang....
Rust Book: doc.rust-lang....
Zig: ziglang.org/
FluidX3D: github.com/Pro...
REDES
Site: www.wainejr.com/
Instagram: / waine_jr
TikTok: / waine_jr
GitHub: github.com/wai...
Discord: / discord
Quem é vc Waine ? Quais suas credenciais ( bacharelado em Ciências da Computação, mestrado, etc) ? Aonde trabalhou ou trabalha ? Por quanto tempo ? Vc já fez trabalho em "systems program" ? Eu acho que vc é mais um que quer click . Vc nem se deu o trabalho de explicar o sistema de 'borrow checker' do rust. Vc realmente entende ?
Sua explanação sobre C/RUST/ZIG é péssima meu camarada. Vc eh super raso no que tange essas 3 linguagens.
Vc usa a palavra 'mágica' para ZIG. MEU DEUS DO CÉU !!!!!!!!
Vc conhece de compiladores (pelo menos um pouco) ?
Vc eh a maior falcatrua que eu vi no youtube BR sobre Computação !
"Nossa Senhora, Meu Deus" . hahahahaahh
Todo dia nasce uma nova linguagem do futuro
kkkkkkkkkk de fato, mas com o potencial factural pra suceder C, só Zig que conheço (nem Rust ao meu ver)
Todo dia eu não diria. Mas hype é a doença da área! Todo mundo quer elevar a linguagem o mais rápido possível. Quem tem que ter cuidado é desenvolvedor precipitado!
@@waine_jr por que não Rust? Ao meu ver hoje é a melhor opção.
@@Comentador-qf9jq Po meio que o video eh a opiniao do brother Waine sobre isso
@@mateusacauhi8357KKKKKKKKKKLLLKKKKKKK
Para complementar, mais alguns usos de C e C++ são: Sistemas de Banco de dados, engines de Jogos, editores de video, softwares de modelagem 3D ou ilustração, navegadores, sistemas embarcados em microchips (maioria não tem sistema operacional), Inteligência artificial... Na maioria dos casos, o C e C++ estão na base ou core dos sistemas que usamos e por fora eles usam alguma outra linguagem para facilitar o desenvolvimento da parte de entrada de dados ou a parte de UI do sistema como editores, janelas, front end, apis...
Outra complementação. Desenvolvimentos de jogos retro, já que esses hardwares são tão limitados, que vc vai literalmente ter sorte se puder usar C/C++ e não ser obrigado a ir direto pro Assembly.
Eu por exemplo uso C pra fazer homebrews de Nintendo DS.
Pra mim que vim do Python, o Rust me ensinou a escrever código de qualidade, mas depois que entra no baixo nível ou vocês que já tem experiência com C/C++, basicamente o que vai definir qual linguagem utilizar é o projeto em si que você está trabalhando. O bom é que todas elas forçam você a saber o que está fazendo, então você não sai perdendo se tentar aprender qualquer uma delas. Acredito que tem espaço para todas e C/C++ só vai ser destronado quando reescreverem linux/drivers/game engines do zero, ou seja, nunca kkkk
Perfeito. Sem tirar nem por
rust n foi feito para bater o c c++, ele foi feito para ser seguro este é o ponto mais relevante de rust.
eu concordo com o fato de que programar em rust vai te fazer um programador muito melhor.
@@wonrey7779 E também não ha necessidade, não sei porque ficam criando 50000 linguagens novas, è só ir atualizando aos poucos
Já sai ganhando ao aprender os básicos de C só por poder fazer homebrews bestas de Nintendo DS kkkkk.
@@leandrojunior940
pra que criar um monte de carros diferentes deveria ser tudo Gurgel brasileiro
Acho que a galera esquece que TI é um mercado como qualquer outro. O tanto de comentário burro reclamando do cara especular sobre Zig me faz pensar que a não pessoa não tem capacidade de interpretação. Em nenhum momento do video ele fala "PAREM TUDO E USEM ZIG NO LUGAR DE C", ele até incentiva a também olhar Rust, além de só estar expressando uma opinião, o que é diferente do seu tiktoker tech favorito cuspindo frases como se fossem verdades absolutas. A Uber já usa Zig, então tem algo promissor na linguagem. Por favor, saia da internet um pouquinho e leia um livro.
Perfeito, errodememoria. Eu nem esquento a cabeça com esse tipo de comentário kkkkkkkk sei que quem prestou atenção ouviu e tirou suas próprias conclusões.
O problema é fanboy de linguagem, ele ama a linguagem e não o que ela oferece. Eu tenho acompanhado Zig e me parece muito promissor, mas falta muito pra uma versão 1.0 até lá muita água vai rolar.
Rust está mais evoluído por ter uma documentação excelente e um gerenciador de pacotes. Mas com certeza Zig já está no meu radar.
A documentação de Zig deixa mt a desejar, eles tem que investir mais nisso logo
O que eu projeto pro futuro é como você disse, o Zig se acoplando as bases de codigo C, se tornando o "novo modo de compilar C", enquanto Rust também ai tomar parte do papel de C, mas em projetos mais especificos e novos, justamente porque Rust conversa com C, mas ainda assim, Rust tem muito problema em conversar com coisas que não falam do jeito Rust de ser.
Sim, essa retrocompatibilidade com as bases de código em C é extremamente importante (e a facilidade em volta disso), e é uma coisa que não vejo tanta gente falando quando discutem Rust e Zig
@@waine_jr o zig foi criado pensando em ser 100% compativel, inclusive eles fazem alguns tipos serem duplamente compativeis
Sou leigo, então relevem. Mas essa retrocompatibilidade com C também não pode ser um problema? Visto que se eu começar um projeto em Zig, usando o código de bibliotecas C, os bugs dessas libs não poderiam ser importadas para meu novo projeto? Coisa que poderia ser evitada se tudo começasse a ser escrito em Rust?
@@GeorgeMatos possível, mas aí ta o poder do zig, vc pode pouco a pouco ir migrando a sua codebase pra zig. Nada te impede de corrige o bug em um código zig.
@@lucas_badico entendi, mas o que me pegou foi quando ele disse que Zig não tem algo como ownership e borrowing, sendo assim alguns daqueles one billion bugs ainda assombrariam os devs Zig. Ou n entendi direito?
O problema de qualquer nova linguagem é a sintaxe, quando eles começam a mudar muito e acaba ficando cada vez mais distante da do C, me desanima muito para tentar entender e aprender.
A gente scodtuma depois de um tempo, sinto isso com toda nova linguagem que vou ver
Gostei de Rust, é extremamente rápido para o meu caso de uso, web e interpretadores; mas acaba sendo muito complexo muitas vezes. Rust tem macros para criar funções em tempo de compilação, é um recurso muito bom também.
Quando vamos ter a rinha de linguagem de sistemas?
Hahahhahaha uma boa ideia. Quero organizar uma rinha pra LBM, ver quem faz o solver mais rápido
Dá para fazer algumas coisas em tempo de compilação também no Rust.
Ler arquivos seja pra string ou binário, eles vão dentro do executável entre outras coisas, por meio de macros.
Eu mesmo faço include de arquivos de shaders direto pra o binário pq são grandes e tbm n quero carregar em tempo de execução.
Enfim, Zig parece bem legal. Quando eu tava procurando uma linguagem para desenvolver meu motor eu pensei em Zig, mas como ela ainda está muito jovem eu preferi fazer em Rust.
Aham, essa parte de compilação dá pra fazer em diversas linguagens, mas a questão pra mim é ergonomia. Em C mesmo eu fazia mt coisa em tempo de compilação, mas era ou limitado ou "complicado demais". De Rust o que já ouvi os TH-camrs falando é que tem que ser o "mágico dos macros" (acho que o Primeagen usou um termo assim em um vídeo). Mas Zig torna toda essa tarefa mt mt mais fácil, você usa a mesma coisa tanto pra comptime quanto pra runtime, e isso facilita mt pras ferramentas em volta e pra ergonomia ao meu ver.
@@waine_jrcomptime do Zig é muito bom, mas macro não é esse pesadelo não, pra definir precisa saber sobre algumas coisas específicas de macros, mas pra chamar é como chamar uma função ou uma annotation, o qe fode é o intellisense do editor. Langs como Swift, Julia e Dart também possuem macro
Tomar decisões em tempo de compilação é só uma das coisas possíveis de fazer com macros. Você tbm pode mudar a sintax da linguagem e até mesmo programar em outra linguagem por meio das macros, por exemplo existe um crate que permite programar em lisp dentro do Rust
@@Lucs-ku5cb se não me engano o SQLx de rust também é em tempo de compilação, acho mt massa isso
@@waine_jr sim ele valida as querys em tempo de compilação e da pra ver os possíveis erros já no editor de texto.
O Navarro da rinha de back-ends fez uma demostração no canal dele
Zig é uma linguagem muito interessante, com certeza é uma evolução do C, quase como um C 2.0.
Porém talvez não se aplique ao C++. Eu tenho duvidas se ele realmente preenche o espaço ocupado pelo c++, pois tem muita coisa que hoje o c++ faz que vai demorar muito pro Zig bater de frente, muito devido ao ecossistema já estabelecido e também aos diferentes níveis de abstrações dessas duas linguagens.
Talvez eu esteja um pouco enviesado na minha analise, mas pra mim o C++ tem mais chance de ser substituído por um Rust, Go, ou um Carbon (talvez?), do que pelo Zig.
Sim, concordo com tudo o que você disse. Acho Zig muito mais voltado pra área de atuação do C e o que ele se propõe do que o C++. Acho que no vídeo uso as duas como se fossem "a mesma área", mas na verdade tem casos de uso e objetivos bem diferentes.
só o fato de rust ter "async fn" já indica que ele não foi criado apenas pra systems programming.. segue alguns outros exemplos de uso:
apis de todo tipo, servidores de jogos, message brokers, servidores iot, clis, guis, analise de dados, vpns, processamento de texto (compiladores e transpiladores), load balancers, banco de dados, etc..
ai que está o grande triunfo do rust, ele faz praticamente tudo (até frontend web em wasm, que vem ganhando forças e se tornando viável ultimamente), com maestria e extrema facilidade..
em relação a isso, ninguém chegou perto do rust ainda.. uma linguagem sem gc, com possibilidade de usar tanto features low level quanto high level, o bloco 'unsafe' te permitindo tacar o pau igual faria em cpp, etc..
nunca foi só hype, a linguagem de fato é única (até então), onde já se viu empresas como microsoft, discord, tesla, outras, confiarem numa linguagem só pelo hype?!
O interessante é que dá pra usar async fn em embarcados com crates como embassy. E eu já vi projetos de kernel usando async
Por isso também acho que Rust não tem como objetivo competir com C, mas sim Java, C++, Go e outras linguagens que são usadas nas aplicações que você comentou. Só não gosto de usar o termo "faz tudo" porque fica parecendo que é um pato a linguagem, pra mim ela continua tendo o escopo de uso que C++ tem, por exemplo.
Eu acho usar async como argumento pra não ser system programming um péssimo argumento, até porque até sistemas embarcados da pra fazer coisas em "paralelo", vide RTOS
A implementação do async vem da plataforma/hardware
Ele é uma palavra reservada, somente, e você não é obrigado a usar
C++ também tem "coroutines", mas é uma biblioteca externa.
C++ não foi feito pra system programming?
@@donizetevida2149 wtf?? paralelismo e async/await são coisas completamente diferentes, que que você tá falando kkkkkk
async/await vem de um event-loop (que pode ser single ou multi threaded), enquanto paralelismo vem de threads verdadeiras.. recomendo pedir uma explicação pro chatgpt..
@@donizetevida2149 mano, q q vc tá falando?? async/await vem de um event-loop (que pode ser single ou multi threaded), enquanto paralelismo vem de threads verdadeiras.. são coisas completamente diferentes kkkkk chapouu
Acho que pra fazer os programadores de C migrarem pra valer podiam fazer uma linguagem com sintaxe mais parecida com C, sua simplicidade e ser direto ao ponto. Eu particularmente ja acho C++ moderno um saco kkk Eu sou do tipo que se for pra usar C++ eu programo em C styler. Valeu!!
também sou do time que se for pra usar C++ eu uso estilo C kkkkkkk com relação a sintaxe, é muito de costume isso. Eu pensei a mesma coisa quando fui programar em Rust, mas depois de um tempo vi como era mais fácil digitar e entender as coisas kkkkkkk
Em C++ usando "constexpr" ja conseguimos definir funções que vão rodar em tempo de compilação.
Não sei se em Zig isso ta melhor ainda...
Não é a mesma coisa, o que o Waine tá falando é de metaprogramação, seria o substituto do pré-processador (#define #ifdef, essas coisas). Dá pra fazer algumas coisas com constexprs, mas não dá pra essencialmente gerar código.
@@GustavoNoronha sim é verdade não é essencialmente a mesma coisa
Depois tenho que dar uma boa olhada em Zig também...
perfeito, Gustavo, respondeu por mim hahahaha
Não me parece que o Zig e o Rust estejam disputando o mesmo nicho. Zig não é memory safe, mas justamente por isso que se pode permitir compilação de codigo C com o compilador do Zig. Rust propõe um outro paradigma de programação em que a segurança é garantida pelo compilador e não pelo programador e por conta disso é impossível compilar codigo C com o compilador do Rust. Mas isso não significa precisar reescrever todo projeto em rust pra poder usá-lo daqui pra frente, importar código C para Rust não é nenhuma novidade. Não é tão conveniente quanto simplesmente poder compilar tudo como se fosse escrito na mesma linguagem, mas é o preço a se pagar para garantir a segurança de memória no que for escrito daqui pra frente.
Outra coisa, é que Macros em Rust também podem fazer o que você descreveu com relação ao Zig. Funções "const" podem ser chamadas em tempo de compilação, structs inteiras e impls podem criadas em tempo de compilação. Eu mesmo uso isso com frequência para criar algo semelhante a herança e polimorfismo declarando uma espécie de "classe pai" na definição da macro e especificando as "classes filhas" na chamada da macro. É possível declarar valores constantes em tempo de compilação que são calculados em tempo de execução na primeira vez em que são requisitados, habilitando o uso de absolutamente qualquer função nesse tipo de declaração, enquanto valores gerados verdadeiramente em tempo de compilação precisam seguir algumas regras, e por aí vai.
Em resumo. Pra mim, a grande diferença entre Rust e Zig está na forma em que as duas linguagens trabalham a questão de segurança de memoria, Zig possibilitando a verificação em runtime, e rust forçando a segurança de memoria em comptime e o fato de que o compilador de Zig pode compilar codigo C diretamente o que é conveniente mas não é tão revolucionario como pode parecer a primeira vista. Tirando isso, as linguagens apresentam os mesmos recursos.
Acredito que essas diferentes abordagens de Zig e Rust devem coexistir no futuro.
Concordo.
Só com relação aos macros, nunca disse que não era possível. Dá pra fazer tudo isso em C, inclusive. Mas Zig dá MUITAS features em compilação, a linguagem toda pra ser mais específico, com uma keyword só. Convido a dar uma olhada nos problemas de comptime do ziglings que vai ter uma noção do poder e do que quero dizer.
por mais vídeos no youtube com essa qualidade! Obrigado!
Valeu! E vai ter muito mais vídeo assim pros membros também
Interessante essa Zig com este recurso compile-time, realmente é muito atrativo, mas pelo que eu percebi ela não vai concorrer com o Rust e sua principal bandeira, o gerenciamento mais fácil da memória. Compile-time é bom, é útil, mas eu não vejo como uma feature 'essencial' no desenvolvimento pra Rush, e se realmente quiser algo em tempo real tem o evcxr pra brincar um pouco. Mas é interessante, Zig parece que pode ter um lugar de fala também nesta seara de linguagens que dominarão o futuro, por pelo menos mais uns 10 ou 20 anos.. rs
Também acho que Zig não compete com Rust, mas sim com C (assim como Rust não vejo como competidor direto de C). Essa questão de comptime é meio nichada, como disse no vídeo, mas quem precisa tenho certeza que precisa MUITO e deve facilitar a vida pra caramba. Pra geral acho que o mais atrativo é o Zig como build tool pra várias arquiteturas e a retrocompatibilidade com código em C.
Quando se trata de compile-time, C++ eh o "playground", ja eh possivel alocar no heap em compile-time e nao existe UB em compile-time (existe, mas eh emitido um erro de compilacao). Compile-time em C++ chegou em um ponto que ja existe biblioteca de "static reflection" para diversas situacoes como "enum to string".
Uma excelente lib de serialiazacao eh a zppbits (c++20), ela resolve a serializacao em compile-time, emitindo memcpy para cada field da estrutura, o que resulta em um codigo final tao rapido quanto memcpy(dst, src, sizeof(struct)), ou seja, zero-overhead em runtime.
As macros do Rust permitiu a biblioteca sqlx ter acesso ao db em tempo de compilação
Acho que essa feature só não foi muito explorada ainda pq aplicação pra ela tem em muitos lugares @@waine_jr
Se eu escutasse todo TH-camr que vem e faz um vídeo assim eu já tinha mudado de linguagem umas 30 vezes 🤣
Exatamente
kkkkkkkkkkkkkkkk o bom de Zig é que dá pra usar junto de C, nem precisa mudar, só adicionar. Mas sério, muda só se precisar ou quiser experimentar, pro meu caso sei que vai ajudar MUITO (que é bem nichado), mas cada um sabe do seu
Eu uso rust dentro do elixir. Tentei usar zig, q tmb é possível porém pra trabalhar com csv etc achei melhor o suporte do Rust
Pra FFI eu acho que Zig tem uma ergonomia ruim mesmo, pelo que já vi, semelhante a como se faz em C
Cara eu comecei a usar Rust por causa da comunidade e o ecossistema, existem mts soluções atuais de libs e software que estão sendo feitos em Rust e isso (comunidade) que vai fazer que aos poucos está ir tomando lugar do C e não propriamente seus recursos ou desempenho.
Pra mim toma mais o lugar de C++, mas o ecossistema de Rust é bem rico mesmo e tem bastante coisa (menos uma biblioteca de matemática simbólica tipo o sympy)
Falta MUITO investimento em ferramentas de conversão de código legado. O fato do ZIG ser um drop in replacement é algo muito bom, na direção correta.
Mas como linguagem, o Rust é melhor justamente no tipo de erro mais difícil de encontrar, o acesso paralelo ao mesmo dado. E a computação está indo cada vez mais para a computação paralela, então esta é a direção correta a seguir (dificultar o compartilhamento de memória).
Zig também permite essas checagens de paralelismo e acesso concorrente com os mutexes de thread, assim como C++ ou qualquer outra linguagem moderna. O acesso concorrente que tá se referindo provavelmente é bloqueante, o que é um jeito bem fácil de deixar seguro, assim como é um jeito extremamente fácil de gerar um gargalo de desempenho no seu programa (só deixar tudo em volta de Mutex e Arc), mas por que usar paralelismo então? Não vejo nenhuma linguagem, fora Bend, se propondo a resolver os reais problemas de paralelismo de expressão de dependências, locais e globais
Com relação a ferramente de conversão, isso é muito verdade. Queria ir mais a fundo e ver a posição dessas empresas e dos devs lá dentro, entender tomada de decisão e coisa do tipo. Porque no fim do dia acho questão de incentivo e prioridades das empresas, e se quisermos migrar e "atualizar" os códigos, é elas que temos que convencer a investir nisso
@@waine_jr Não sei do ZIG, mas o borrow check é a primeira coisa que se aprende no Rust. E isto é exatamente a proteção de acesso paralelo ao mesmo dado que falamos.
A pergunta é se este controle é tão claro e 'obrigatório' no ZIG quanto no Rust. Se a linguagem não dirigir o desenvolvimento nesta direção,.como o Rust dirige, este controle nunca será feito até que o bug apareça.
O Rust, depois de um tempo, direciona seu pensamento pra programar de forma mais segura.
9:23 Foi um dos motivos do porque eu descobri essa linguagem: estava procurando fontes pra saber como usam o CMake pra fazer o build dos meus projetos e o video da apresentação do zig apareceu pra mim, isso lá em 2020, e já foi suficiente pra eu dar atenção a essa linguagem.
O fato dela também ter ferramentas para testes de unidade embutidas e funções em tempo de compilação foram um belo adicional, mas é, por vezes você não precisa de muito pra arriscar em outra ferramenta.
Agora é esperar isso sair do preview, e como ela vai evoluir com o tempo, até porque, talvez até lá já tenha legado pra cuidar(já tem o Bun usando ele, mesmo no preview).
Acho que só o tempo pra dizer mesmo. Mas ao mesmo tempo já vejo como madura o suficiente pra ser colocada em projetos atuais que tem manutenção e devem durar um bom tempo. Tem o TigerBeetle também que usa Zig pra bastante coisa e umas outras empresas nessa linha. Tô torcendo pra que vingue a linguagem e tenhamos uma alternativa pra C compatível com todo C que já existe kkkkkk
Legal, mas eu já tô saturado dessas falacias que linguagem X vai ser (ou pode ser) sucessora de Y.
Pra mim, isso é invenção, boatos, etc, de dev emocionado, pois nunca, em nenhuma documentação de qualquer linguagem existe esse tipo de colocação que a propria veio para substituir tal.
"Ai em 2025 lança a linguagem XPTO, e a XPTO será substituta da XYZ."
Sei que você disse no vídeo que não quer desmotivar as pessoas a aprender Rust, mas sim, esses assuntos tem esse poder de deixar as pessoas desanimadas a aprender. Hoje em dia, a internet e tudo que se cria para a internet, uma grande porcentagem é baseado em MARKETING, então se negativar tal algo, esse algo vai ter uma queda na aceitação das pessoas, assim é o mesmo quando se positiva tal algo.
SUBSTITUIR é uma palavra muito forte. Fortran mesmo, foi substituido? Se acessar o TIOBE Index, Fortran ainda está lá...
Fora essa minha discordância, seus vídeos são muito bons, continue assim, parabéns.
Sobre metaprogramação em Rust, não chega a ser tão livre como eu entendi que é pra Zig, mas é mais perto de Zig que de C. Com proc_macros você tem acesso a um bom pedaço da linguagem, pode chamar funções e tudo. Eu criei uma biblioteca por exemplo que garante que chamadas concorrentes a uma função com os mesmos argumentos vai gerar o resultado uma vez só e dar a resposta a todos os clientes. A ideia é evitar retrabalho desnecessário pra APIs REST, por exemplo. Você basicamente decora a função com #[mula] (mula de carga ;D) e a proc_macro gera o código que faz wrap da função pra fazer a sincronização, dá uma olhada. Acho que o TH-cam não gostou de eu postar links, então pode procurar a crate mula e olhar o código da proc_macro.
Interessante saber que é mais próximo de Zig que C/C++. Ainda quero ver como é em Rust essa questão dos macros. Mas tem muita mágica que dá pra fazer em Zig que me lembrou muito Python, e eu amo Python, então cai de amor com a linguagem kkkkkkkkk
As macros de Rust são meta programação também, assim como você mostrou ser em Zig.
É diferente e muito mais interessante do que fazer em C
Esse tipo de coisa quase todas linguagens tem, o mais famoso pra mim são os templates de C++. Mas a ergonomia e poder que Zig dá eu não cheguei a ver nada páreo. Com relação a Rust, já vi o pessoal comentando que essa parte de macro você vira "mago dos macros" (acho que o Primeagen falou isso), então ainda tem dificuldades semelhantes a C++ eu imagino.
Zig e Rust é o futuro mesmo, agora é claro que vai demorar uns anos, mas é inevitável!!
Quais ISAs estao disponiveis em ZIG? apenas x86 ??
Zig utiliza LLVM, então toda arquitetura que LLVM suporta (que é a grande maioria), Zig também suporta
Tô faz um tempo querendo pegar Zig pra brincar, mas acabei me enveredando pra ADA, agora vc me despertou o interesse de novo. Aproveitando, o solver llb resolve qualquer Edo/Edp?
É bem interessante Zig, recomendo dar uma olhada. Resolver os ziglings é um bom começo pra ter noção da linguagem.
Com relação ao solver de LBM, ele resolve qualquer EDP sim. Mas pra derivar o LBM pra cada EDP, boa sorte kkkkkkk não é nada fácil e tem muita muita matemágica pra isso
Levando em consideração seus pontos Zig seria melhor para fazer portes de programas C e C++. Já Rust seria melhor para fazer um programa do zero.
Chat GPT 10 daqui uns 6 anos: "Crie um novo OS similaro ao Win13 no visual, mas com kernel similar ao FreeBSD, eque seja focado em máquinas para games usando GPUs RTX8000 ou superior. Use Zig e já faça a instalação numa máquina virtual usando até 25% dos recursos da minha máquina. 4 minutos depois, done!
sonha kkkkk
Ainda teve a Crystal, mais antiga, syntaxe inspirada em Ruby e tem a Carbon, da Google, ainda em desenvolvimento...
7:00 Em que situação malloc() retorna -1? Dei uma pesquisada e não consegui encontrar
Na verdade eu falei errado, é NULL que retorna. Em caso de falta de memória cheia, por exemplo, o malloc pode dar erro. Inclusive esse é um dos motivos da MISRA C (padrão utilizado em indústrias pra escrever "C seguro") não permitir uso de malloc nos programas, pra não ter erro em runtime
O interessante de se explicar é que, não é que a linguagem é ruim ou insegura, é que os programadores sem experiência ou desatentos acabam criando os bugs.
Aí acaba por ser necessário criar linguagens com rodinhas para impedir as pessoas de cometerem os erros. Às vezes por falta de atenção ou por falta de conhecimento.
Creio que a migração possa ocorrer se for útil ou necessário, mas se for possível criar com C o que Rust e ZIG fazem, vão manter o C.
Por favor, faz um vídeo exibindo um roadmap para system programming, estou no sétimo período da faculdade, já estudei arquitetura de computadores, sistemas operacionais, engenharia de software e C, pretendo seguir nessa área.
Já tá no caminho então, meu querido. Pretendo fazer vídeo sobre isso sim, mas os conhecimentos de base principais aparentemente você já tem: C, sistemas operacionais, arquitetura de computadores.
Agora é especialização e buscar uma área de atuação em sistemas (que não é tão fácil de achar como web, mas com certeza existem vagas)
Waine, sei que o vídeo não é sobre isso, mas gostaria de perguntar: como entrar na área de systems programming? Eu termino Engenharia da Computação ano que vem, faço meus projetos pessoais em C e Rust, e já perguntei a mesma coisa para criadores de conteúdo gringo, mas sinto que a realidade deles é muito diferente de um br de interior (o que pode ser só coisa da minha cabeça me fazendo dificultar o processo).
Sobre a área de baixo nível, acho que o que mais vai ter oportunidade aqui no Brasil é com embarcados. As principais áreas de utilização de system programming são associadas a indústria (drivers de hardware, embarcados, hardware) e pesquisa e desenvolvimento (como o que eu faço), é muito difícil você achar uma empresa de serviços que utiliza C/C++/Rust pro seu sistema.
Desde os anos 90 o Brasil vive um processo constante de desindustrialização, o que acaba diminuindo vagas de emprego na indústria, o que diminui vagas na área de sistemas de programação. Não ajuda muito também que investimento em P&D é muito baixo aqui no Brasil.
A área que vejo como predominante e com muitas oportunidades é a de embarcados, porque várias empresas de prestação de serviço (agro, IoT, casa inteligentes, automação) precisam utilizar microcontroladores pros seus projetos.
Então estrategicamente falando, diria pra procurar empresas de embarcados que é onde devem ter maiores oportunidades. Se quiser trabalhar em sistemas operacionais, drivers abertos, computação de alto desempenho, etc. o caminho que vejo é ir pra fora, seguir carreira acadêmica ou montar o próprio negócio. Vale ressaltar que muitas das vagas pedem uma pós (ou veem ela com bons olhos), então fazer um mestrado acho uma boa tmb.
O que você acha do Fortran, pois ele tem um ótimo gerenciador de memória e até hoje usado para aplicações sérias como na faculdade ele é usado para ver o comportamento de enzimas em temperaturas diferentes na formação de proteínas, sim o que você acha de Fortran ?
Fortran é muito forte na computação científica e numérica, mas nunca trabalhei com ele. Acho mt massa a extensão de CoArray do Fortran
Eu tenho que vencer (como venci pra Rust) alguns preconceitos com a sintaxe e decisões de projeto, mas quero aprender Zig. Você pode ter razão, mas é impressionante a adoção de Rust já em grandes projetos em C/C+++ como Linux, GStreamer, Windows e empresas grandes como Facebook, Google, Amazon, todo mundo já tem alguma coisa com Rust.
Sim, Rust é uma linguagem muito mais madura nesse sentido e tem muito mais dinheiro e financiamento por trás por causa disso tmb kkkkkkkk Zig tá correndo em desvantagem, mesmo assim acho que tem melhores chances como sucessor de C do que Rust, por causa das capacidades e escolhas de design da linguagem
@@waine_jr pelo que eu tive pesquisando eu vou chutar aqui que Zig vai ter um futuro brilhante, ironicamente, na área de pesquisa de segurança. Como ela te permite lidar com memória de forma insegura de forma mais ergonômica e controlada, é uma linguagem muito boa pra fazer pesquisa e exploração de falhas de segurança!
@@GustavoNoronha isso é bem verdade mesmo hahahaha
Tomara que Zig substitua o C. Não aguento mais esquecer de limpar a memória.
kkkkkkkkkk aí é complicado
Ok, agora explique o motivo de zig não estar sendo prevista pro kernel do linux mas rust está. O que vc falou como vantagem em relação a chamar funções em tempo de compilação, as macros em rust fazem
Aí você pergunta pro Linus, infelizmente não sou manutentor do kernel do Linux
Essa pergunta é a mesma coisa de "me explique o motivo de C++ não estar no kernel do Linux". Significa que C++ não serve para tal? Não, mas também não é só ficar brincando de jogar linguagem nos projetos. Já foi tentado colocar C++ no projeto e acharam que adicionou um complexidade que não compensava. Rust existe há vários anos, como comentado no vídeo, e só agora que começaram a colocar uma coisa ou outra no projeto, e é nem no core, e sim em partes mais periféricas. Zig é mais novo que Rust, logo tem uma comunidade menor e, consequentemente, um ecossistema menos maduro.
As coisas não são usadas por simplesmente serem boas ou ruins. Não adianta você criar o melhor produto do mundo e ninguém comprar: sua empresa vai falir. Por outro lado você pode ter um produto ruim, por exemplo JS, que se for adotado, sair dele vai ser um tarefa custosa.
@@errodememoria "As coisas não são usadas por simplesmente serem boas ou ruins. "
Eu gostaria de saber a opinião de Linus Torvalds sobre isso
bom dia, entao como compilar o kernel linux ou bsd{open ou free} com zig. tem como voce fazer um video com esse conteudo. por que seria muito legal ver sendo feito.
É um bom vídeo mesmo, acho que vou fazer e mostrar o processo. Também com relação a SO, se virar membro vai ver um SO do zero em Zig, tá sendo mt massa fazer
Eu não tenho muito conhecimento de Zig (vi uma coisa ou outra em vídeos gringos), uso C para as coisas mais próximas de hardware e Rust quando quero fazer algo mais complexo, mas acredito que Zig parece estar mais próximo de C, enquanto que Rust se aproxima mais de C++.
Sim, também vejo dessa maneira. Tanto que eles mesmo se propõe a ser sucessor de C, não querendo adicionar 864651 features tipo C++ (inclusive retiraram o async porque julgaram que o modelo não estava maduro o suficiente, achei essa uma decisão muito corajosa e que mostra o caminho que querem levar a linguagem)
Eu adoro como na descrição do Zig tá a frase: "Foque em debugar sua aplicação, não seus conhecimentos da linguagem de programação"
Eu n consigo parar de pensar que isso é uma indireta se referindo ao Rust kkkk.
Kkkkkkkkkkkk errado não tá né
@@waine_jr Cara, eu gosto do Rust, só que ele é meio chatinho de usar, só isso....
O C é dos anos 70, de 80 é o C++.
muito bom o video. Uma outra lang que oferece recursos para compilation time é D, mas quase ninguém comenta.
Nunca vi nada sobre ela, vou dar uma pesquisada
borrow checker é maneiro, mas não significa que a gente vai estar imune a memory leaks em Rust.
Mano, eu codo em zig ha 2 anos. Acho muito legal o caminho que a linguagem ta seguindo, tipo o package manager ser declarativo, os memory allocators na std lib, o comptime ser bem intuitivo, e a facilidade que é usar libs em c.
Recomendo ela pra qualquer um que tenha um background em c e rust.
Muito massa ver programadores de Zig por aqui. Acho que a comunidade vai crescer muito nos próximos anos, justamente por tudo que você falou, minha experiência tá sendo mt boa com a linguagem
sobre comptime ser "mágica"... C++ tem "template metaprogramming" há muitos anos, e mais recentemente (mas há vários anos) constexpr, e rust tem metaprogramação (macros) poderosíssima, e esse tipo de coisa vem lá do lisp (macros), décadas atrás
Convido a dar uma olhada em como o comptime de Zig funciona. Não é igual nenhum dos dois
Cara, seu canal tem um conteúdo "raro" que é desenvolvimento de baixo nível. Estou estudando C++ e pretendo entrar nessa área de desenvolvimento baixo nível, principalmente no desenvolvimento de drivers. É uma área bem interessante
Valeu! É difícil encontrar conteúdo no TH-cam sobre esses assuntos, por isso tmb comecei a criar conteúdo. Essa área de drivers é bem interessante, eu só mexi com alguns em embarcados, mas curti bastante e pretendo voltar algum dia.
Já tem propostas de linguagem que unem o bom de Zig com o bom de Rust
Zig é capaz de portar bibliotecas escritas em linguagem C e utilizá-las em projetos Zig.
const c = @cImport({
@cInclude("stdio.h");
});
@@waine_jr depois de rust vou aprender zig
Gostei do vídeo. :) Um pouco exagerado o título, mas qual título de vídeo no TH-cam que não é? 😂
Valeu!
Hahahhahaah valeu, meu querido. E temos que jogar o jogo do algoritmo né kkkkkk não tem como fugir infelizmente
mas cade o link discord?
Na descrição, meu camarada
@@waine_jr porra viado, juro pra vc que procurei e nao achei de primeira, agora achei kk
Esse sistema operacional para arduino vai ser aqui pelo TH-cam vai ser na área de membros ou vai ser pago ?
Isso, aqui no TH-cam na área de membros. Já saíram 15 vídeos e deve sair mais essa semana
Vi um video aqui do youtube de um cara que fez um módulo externo para python usando Zig. Fiquei desapontado com o estado atual do ecossitema. Normalmente, os módulos externos do Python são escritos em C#. Apesar compatibilidade do Zig com C, é mais fácil fazer o módulo para Python em Rust do que Zig.
A compatibilidade com Python eu não curti muito também não. Acho que talvez seja mais fácil até fazer a lib pra C e usar ela em Python como se fosse uma de C.
@@waine_jr pode ser. Quando me sobrar um tempinho vou tentar
ja tem meu like, ziglover aqui. Apesar que enuns e pattern matching no rust é muito daora!
Hahahahaha mas Zig dá pra fazer essas coisas também, e em tempo de compilação ainda kkkkkkk
Se você gosta de enums e pattern match da uma olhada em linguagens funcionais como Ocaml
@@Lucs-ku5cb ainda falta no meu repertório uma linguagem funcional. Quem sabe não aprendo ocaml na sequência de Zig
@@waine_jr Ocaml é bem legal
Ele tbm tem macros procedural assim como Rust. A propósito tem muita coisa de Rust que vem de Ocaml, Options e Results por exemplo.
Rust é melhor que Zig. 😊
a linguagem Jai criada pelo Jonathan Blow me parece bem interessante, pena que ainda está em closed beta...
E linguagens como go ou carbon? São ou podem se tornar uma alternativa p system programming?
Go com certeza não, carbon nunca vi nada mais a fundo
Carbon nasceu morto
Nem o Google que criou ela adotou
Zig é muito novo e falta muitas funções, apesar disso é um otimo conceito, precisa apenas ser mais elaborada e simplificada.
Falta maturidade mesmo, dá pra ver pela documentação e a forma que é estruturada (amadora ao meu ver). Mas muito promissora ainda assim, vamos dar um tempo e ver o que dá
o problema de linguagens recentes ou pouco usadas, é por causa que o chatgpt nao tem muito conhecimento a respeito delas
kkkkkkkkkkkkkkkkkkkkkkkk aí é foda
kkkkkk esse nem eh o maior problema, o maior problema eh a documentacao de zig ser muito ruim, a lib standard vive mudando, nao tem package manager e o language server eh uma merda, zig de fato eh a linguagem do futuro porque do presente que nao eh! kkkkkkkkkkkkkkkkkk
@@Cuca-hn3md Cara, Rust a última vez que olhei não tinha uma ABI estável.
Como assim vei KKKKKKKKKKKKKKK wtf
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK mano, vou entender isso como uma brincadeira, foi massa!
todo dia está nascendo linguagens e frameworks e todos são do futuro... kkk...
Todo dia tem uma linguagem que "vai substituir o C". A real é o seguinte: pode ser a melhor linguagem do mundo, só vai prosperar se a comunidade e os grandes player apoiarem, e como a comunidade e as grandes Big techs abraçaram o Rust...
rust não foi feito para bater c c++
ele foi feito para ser seguro e rápido só isso.
@@GuilhermeAltran mostra aí onde eu disse que Rust veio para substituir estas linguagens. Cada uma tem seu nicho e o nicho do Rust é rodar baixo nível e com gerenciamento de memória sem falha humana e está começando a ocupar este nicho. Ainda que C e C++ deixem de ser usadas cada vez mais, sempre vão existir, assim como ainda existe COBOL hoje e precisa de profissionais que saibam a linguagem para dar manutenção nos sistemas feitos nele.
@@GuilhermeAltran só tu procurar aí no Google que vai ver centenas de opiniões no sentido, mas eu não afirmei isto. Me indica o artigo que escrevi sobre isto. O que deixei claro aqui como água e que talvez lhe falte interpretação de texto é: uma linguagem só vai substituir outra se mostrar algum custo-benefício e, mais que isto, desenvolvedores e techs se unirem para isto, que está sendo o caso do Rust.
@@3DandIA onde eu disse que vc disse isso?
me explica ai.
@@3DandIA rust não foi feito para bater c c++
ele foi feito para ser seguro e rápido só isso.
qual parte vc não concorda?
"Usar zig como uma forma substituta pra compilar códigos C/C++"
Isso significa que ele vai substituir os clangs, gcc e cmakes da vida nesse cenário? e os make files, como ficam? vc ainda vai precisar deles?
Sim, substitui tudo isso
@@waine_jr ......... bom, mesmo que eu continue usando C, ONDE QUE EU ASSINO? KKKKK!
Não sério, só como uma alternativa pros compiladores normais de C, já tá valendo muito a pena. Eu n acho que todos os meus projetos vão poder usar o Zig como compilador, já que alguns compilam pra arquiteturas bem especificas, mas pros que são feitos pra pc mesmo, e talz, vai ser uma mão na roda.
se em 30 anos zig der certo o pessoal vai começar a migrar.
Aliás, a linguagem C3C é otima e também quer substituir o C
Nunca ouvi falar dela, vou dar uma pesquisada
Nem Zig, nem Rust. A "linguagem do futuro" é o Go 👍
💀💀💀💀💀💀💀
Chegou iterador esses dias nesse tal de Go kkkkkkk
Brincadeiras a parte, pra serviços web, concorrência e escrever código rapidamente, o que mais ouço falar é de Go
Na vdd a linguagem do futuro é kree
É bem nova e poucos sabem a origem
Tá bem promissor estudar essa linguagem
Ela consegue substituir 2 tipos de linguagens ancestrais
unico defeito de rust é a comunidade dele Sr. waine
Kkkkkkkkkk por isso eu tiro as dúvidas olhando documentação, Deus me livre perguntar em fórum
Zig é pro C o que o Rust é pro C++
Sinto falta de alguma coisa que leia diretivas arquiteturais de um dispositivo e crie um drive, tipo você pegar todo o sistema de uma placa mãe e gerar todos os drives para o kernel, depois uma IA analisar o uso do equipamento, verificar forma de otimização, como se uma IA pegar o uso de um computador com Gentoo, gerar os fontes para compilar tudo ajustando todas as flags do Make, otimizando os programas ajustando para o uso do usuário, sonhar ainda não imposto kkkkkkk
A dúvida que fiquei, o Zig usa GC, Sabe dizer?
Não usa. As alocações são feitas manualmente, mas de uma forma mais interessante que em C.
Não usa não, como o amigo disse
@@atos8902 Tinha ouvido falar na época de lançamento do bun, mas agora tô empolgado! Ashuashu
é fato que c e c++ jaz obsoletas, mas felizmente e infelizmente vamos usar por muitos anos ainda!!!
C++ ainda reina
O problema é que Zig mal existe. Muito nova, a meu ver, nem dá pra falar de Zig de maneira séria e consistente ainda. Por enquanto, na minha opinião Zig ainda está em Zig-Zag.
Alguns projetos grandes, como o Bun e o TigerBeetle, já são todo escritos em Zig. Rust começou só na Mozilla também
C++ segue com muitas novidades, comite ISO super ativo. Vai demorar para aparecer algo melhor.
Sem preprocessadores? 😒
O maior mal depois do Null são os macros de C kkkkkkkkk
C/C++ vai morrer?
😂🤣
Claro.A politica a criou e a politica vai mata-la.Bendido seja o nome da politica
Kakaka, ganda piada.
kkkkkkkkkkkkk brinca muito
Zig é muito bom
AGORA SIM, ESSE É O FIM DO C. by 2006
está igual falar que Java vai acabar
Meu caro, ninguém falou que C nem Java vai acabar não. Estás a lutar com moinhos
otimo conteudo!!!!
Tá dizendo que rust já tá meio enferrujada? hahuhahuahua tá parei 😔
Kkkkkkkkkkkkkkkkk bobo
Java hoje e sempre !
A LINGUAGEM DO FUTURO É PPL - Prompt Programming Language 🤣
Talvez seja isso mesmo kkkkkk
se for isso daí mesmo aí que as IAs vão roubar os empregos dos devs kkkkkkkkkk
O que domina o presente é a PPK, isso não podemos negar, civilizações se formaram ao entorno dessa "linguagem" kkkkkk perdão pelo nível da piada, mas estamos num nível tão baixo que não podia deixar passar 🤣🤣
@@waine_jr resistence is futile (mas até lá tem muito backlog pra queimar...)
Daqui 20 anos quero ver onde estarão essas linguagens do futuro. Antes de "matar" o C, precisa combinar com os chineses ( que atualmente fazem todos os drivers ) 😊.
não ironicamente, boa parte do financiamento de Zig é chinês kkkkkkkk o pessoal de lá usa demais. Mas não vai matar C não, C só vai morrer quando a humanidade acabar (e olha lá ainda, pq o que mandamos pro espaço deve ter C)
Só quer superar C/C++ quem coda Fofo... 😅😅😅😅 (Zuera) Ou será que não? 😂😂😂
cobolscript é o futuro... do preterito!
kkkkkkkkkkkkkkkkkkkkk
Todo dia nasce uma linguagem do futuro e todo dia java morre
Rust eh bloated ao nivel do C++, eh ultra complexa, não tão rapida por não acessar memoria e seus binarios são 'gigantes'. Zig tem tudo q o C foi mas com as novidades do mercado sem ser complexa e chata.
Enquanto o Linus segue usando C e as distros seguem no C, e a performance é melhor com Malloc, free, define,etc eu continuo com o C. Rust, Zig, tudo modinha.
Não se limite, meu querido, abrace a diversidade
@@waine_jr obrigado pela dica. Eu busco não me limitar não. Nodejs e Python fazem parte do meu Toolbox. Mas a nível de performance o C segue imbatível. Em alguns momentos C++, mas eu gosto de ter controle da gestão da memória pra evitar problemas em baixo nível. Rust e Zig ainda precisam de muito chão pra superar mais de 40 anos de evolução do C. Tem um grupo do gov estadunidense que recomenda migrar C pra Rust. A Google migrou parte do C pro Python. Mas o core a Google mantém em C. O Linux e o Hit seguem em C. E isso não é a toa, a performance segue imbatível.
E o Carbon? A promessa é que Carbon tenha interoperabilidade com C++.
Já vi algumas coisas dela, mas nada a fundo. Quem sabe algum dia aprendo também
É um projeto experimental, pode ser que der certo ou não. Mas ainda tá muito cedo pra essa linguagem, assim como o cppfront de herb sutter.
Tudo indica que Julia deu uma flopada mesmo. Vejo pouco hype sobre essa linguagem.
Conteúdo de baixo nível = baixaria, paredão e afins.
Aham kkkk
É normal discordar de voce sabendo que voce esta certo? kkkkk
Hahahhahaha não existe certo e errado não, são só opiniões
Diziam isso do Rust. Eu desconfio de hype sempre! Prefiro experimentar e ficar observando a evolução. Tanto da linguagem quanto da comunidade, que no caso do Rust é uma das mais tóxicas que eu já tive o desprazer de ver.
Só o tempo pra responder mesmo. Com relação a comunidade, eu nem entro em fórum pra evitar o desgaste kkkkkkk
C foi desenvolvida no Bell Labs em 1973 .Mas antes disso ja existiam Sistemas Oepracionais,programas e uma industria da computação usando Cobol,Fortran,Pascal Algol.Inclusive o Compilador C foi criado usando Fortran dentro de uma PDP-11 (Existiam PDP 10 e gerações menores). 3:50 (Na realidade o C já nasceu com vários fortes competidores que faziam parte do Mainstream:Cobol,Fortran e Pascal).A linguagem C é só mais uma das linguagens de Alto nível.A linguagem que nunca morrerá é a Object Pascal.(70% da automação comercial do Brasil é mantida por ela )
Ainda não acho que dá pra negar que C "venceu" a batalha de linguagens de sistemas. Mas sempre vão existir sistemas construídos nas mais diversas linguagens que sobrevivem ao tempo, como vc disse. Inclusive não conhecia Object Pascal, interessante saber disso
@@waine_jr Sempre acompanho seu excelente conteúdo.Também sou estudiosos das linguagens como você.Gostei do seus video sobre construção de IP (usando VHDL).A IDE open source do object Pascal chama-se Lazarus (compilador Free Pascal,multiplataforma).Parabéns e continue firme
@@AlmirBispo-CSV-Comp-DB valeu, meu querido! Muito feliz saber que curte e acompanha os vídeos. Vou dar uma pesquisada na IDE e linguagem pq fiquei curioso kkkkkk
É Javascript
Batman
não é pra espalhar....
@@waine_jr 😬🤐