Executando verificação de segurança...
8

Viabilidade de C/C++ a médio e longo prazo!?

Olá pessoal, esse é meu primeiro post aqui, não imagino que sera de grande contribuição, mas espero um ambiente de respeito e crescimento! Vamos ao topico!

Por onde eu tenho olhado e navegado tenho visto amantes de Rust a todo lado, muitos deles militando a linguagem como se esta fosse o santo graal da programação a nivel de memoria e sistema.

A maioria desse alarde pelo que pude notar vem exatamente da ideia que C e C++ sao linguas antigas e antiguadas para o periodo vigente. Além de Rust fazer tudo melhor e mais simples, alem de seguro.

Meu ponto entra na ideia de saber o quanto disso é Hype e o quanto disso é verdade, pois foi necessário esperar cinquentas anos para criar algo diferente de C e C++?

Outra questão é órgãos como a NSA e Cia alegando que ninguém deveria mais imiciar projetos nessas linguagens. Isso não torna um ponto super negativo? Pois acredito que C++ deva em breve receber um update de memory safety, talvez mais tardar dentro da proxima decada.

Minha questão também fica a imaginar que mais da metade do mundo foi feito sobre esses dois pilares e agora em vez de resolver os défices, apenas estamos os deixando e seguindo... Posso estar com uma ideia um tanto quanto enferrujada, assumo.

Mas todo meu questionamento fica pois tenho lido noticias recentes até sobre essa desmotivação do mercado e governo ao uso de C/C++ e no seu lugar optar por Rust, C# e outras... Até pois mimha intenção é se especialzar nessas duas línguagens a partir do inicio do vigésimo quinto ano. Mas fico receoso de ser tempo perdido... mas tambem não gostei muito das ideias Rust, então se fosse substituir talvez apenas por Zig.

Felizmente eu aprendi a programar em C e depois migrei para outras. E por afeto como vontade de aprender arquitetura de máquina a fundo gostaria de retornar, mas tambem gostaria que meu aprendizado fosse usado no Mercado.

Uma dúvida dúvida que me resta é: No mundo do DataSciencie e IA essas duas gingantes vão permanecer ao lado de Python e R por muitos anos ou serão levada pelas modernas linguagens sendo implacadas pelo mercado?

Fica um texto de reflexão e dúvidas, ao mesmo tempo! Estou aberto a conselhos e diálogos, abraço a todos!

Carregando publicação patrocinada...
13

vamos aos fatos, sem clubismo. aqui vão algumas verdades que podem parecer duras.

  1. Não o rust não faz tudo mais simples, se não, não seria safety, ele é pouco ergonomico e muito burocratico, e isso não é um demerito mas uma das vantagens da linguagem.
    (enquanto C é bruto, Rust requer fazer algo mais "pensado)

  2. Não é porque um código é feito em C ou C++ que ele é inseguro, a questão é, o nível de habilidade de programadores, qualquer código de um inexperiente em C abre brechas, mas se o programador sabe o que está fazendo e esta apoiado de ferramentas de inspeção como valgrind, cppcheck, clang-tidy... etc etc não tera problemas na vida útil do software.

  3. Não é porque um código é feito em Rust que ele é 100% seguro em questão de memoria, ainda sim é possivel causar débitos e escrever código ruim, tudo depende da expertice do programador.

  4. C e C++ são linguagens completamente diferentes, apenas compartilham uma certa compatibilidade em comum.

  • C fracamente tipado, você sabe exatamente onde tudo sera alocado e quanto de espaço ira ocupar além do tamanho do binário e tempo de execução.
  • C++ tipagem forte e com inferencia, é muito mais opnativo, o compilador toma muitas decisões por você enquanto está apenas sugerindo um comportamento.
  1. Nenhuma linguagem é mais portátil que C, sabe porque o DOOM roda em qualquer lugar? pois foi escrito em ANSI C (dialeto de 1989) sem depender de libs, você apenas adpta os drivers de audio, video e inputs e toda a magica já acontece.
    (não precisa mais que 1 dia para portar DOOM)

  2. Você não aprender a usar C em 1 ano, nem 2 anos... Você precisa ter um background de computação, ou seja se fizer ciencia da computação ou então tem alguns anos de experiencia, você consegue usar a linguagem de maneira eficiente.

  3. C é um assembly, sim, você consegue traduzir muito código escrito em um assembly para C. *(volatile uint32_t*) 0x2020 = 50; é o mesmo que mov eax, 50 mov ebx, 0x2020 mov [ebx], eax em x86, isso siginifica que você tem um controle muito grande sobre código final. (claro que instruções especificas você acaba usando usando um asm, mas até algumas SIMD você também conseguiria escrever em C puro)

  4. Rust foi pensado para cobrir skill isues, sim, sem ser ofensivo esse é o proposito de Rust, te dar uma mãozinha em coisas que são muitos engenhoas de se fazer em C. e isso não é um problema, você não tem que se preocupar em escrever o suprasumo de engenharia o tempo todo, o importante é entregar o produto.

  5. C++ moderno não precisa de ponteiro, na verdade C++ moderno pode se até considerar safety pois existem diversos recursos da STL (inclusive recursos comuns em linguagens enterprises como C# e Java)

  6. Existem homologações muito rigidas em C e C++, se C fosse tão inseguro existiria o tempo todo carros quebrando, aviões caindo, caixas eletronicos guspindo dinheiro ou sendo hackeados.. SO, MISRA, DO, ARP, ASPICE, UNEC, AUTOSAR, PCI... etc etc, diria que uns 90% dos softwares criticos são escritos em C, e o mundo não é caótico por isso.

  7. C e C++ não são linguagens velhas, linguagens ultrapassadas são PASCAL, Perl, e inumeras outras que nem lembramos o nome. Não é porque está desagrando a bolhadev que o mercado se comporta diferente, e não é porque um software usa uma linguagem de 50 anos que ele é legado, em casos não existe outro caso de linguagem, você pode começar um software em C hoje.

  8. Você não deveria usar C no produto final (a não ser que seja um SO ou sistema critico), C é ótimo para escrever bibliotecas, drivers, kernels... algo que vai ser usado por terceiros, ele é lento de códificar, mas o que está escrito nele vai funcionar e ser estável, você não precisa de um software que funciona 100% e seja estavel 100% voce precisa é entregar valor o mais rápido possivel para o cliente final.

  • que atualizações um caixa eletronico sofre? qual periodo?
  • que atualizações um software instituicional sofre?
  1. Go, Rust, Zig, C e C++ tem propositos completamente diferentes e nenhum é um substituto completo para o outro, as peculiaridades de cada uma das linguagens são bem grandes, e produtos grandes compilados podem até no caso usar código feito em 2 ou mais dessas linguagens.

  2. IA não são feitas em Python, mas sim C, C++ e Fortran, a parte de python é apenas um wrapper em cima de uma lib gigantesca em C, na verdade maioria das libs famosas de python são escritas em C.
    (shadders "ia" hoje em dia são escritos uma especie de dialeto de C chamada open-cl)

se tratando de linguagens, eu acredito que 99% das opniões são erradas, pois a pessoa não entende contexto e design daquela tecnologia em especifico, quer usar uma regua da linguagem X na linguagem Y.

0
-2
6

Acredito que nenhuma dessas linguagens vai sumir tão cedo. <sarcasm>Se nem o C++ conseguiu substituir o C depois de todos esses anos...</sarcasm>

Pense na base de código existente nessas linguagens. Só pra citar alguns exemplos, temos programas extremamente complexos como o Kernel do Linux (e também do iOS, Android, OSX, Windows, etc), os interpretadores/compiladores de várias linguagens (por exemplo, PHP, Python, etc, e muitas outras tem partes em C ou C++), programas famosos como o Git, SQLite e outros bancos de dados (Oracle, MySQL, PostgreSQL, etc) e muito, muito mais.

Ou seja, ainda são linguagens fundamentais na nossa área, e amplamente usadas. Talvez as pessoas não tenham essa percepção porque "o mercado" (e os influencers em geral) foca muito em web e nas linguagens mais "da moda", mas C e C++ ainda são muito usados sim (o mundo é muito maior do que nossa linguagem preferida).

E é simplesmente inviável reescrever toda essa base de código em outra linguagem. Seria extremamente caro, demorado e arriscado. A meu ver, o mais factível é que códigos novos sejam feitos em outra linguagem desde o início, e algumas coisas antigas podem ser migradas de maneira gradual e controlada.

Sobre órgãos governamentais estarem obrigando a mudar tudo pra Rust, acho que foi um entendimento meio errôneo e exagerado. Veja aqui, no primeiro comentário, isso já é desmentido:

A manchete leva a crer que as agências estão exigindo a substituição completa de C e C++ por linguagens "seguras por design", como Rust, mas a realidade é muito mais moderada.

Na verdade, o documento especifica que "neither this document nor the U.S. government is calling for an immediate migration from C/C++ to Rust — as but one example." O foco está mais em boas práticas.

O relatório enfatiza que o problema maior está nas más práticas de gestão e nos processos de desenvolvimento e não na linguagem de programação. O direcionamento para linguagens que evitam vulnerabilidades de memória é apenas sugerido, mas o governo americano não está impondo nenhuma migração.


Outro detalhe é o fator humano: convencer as pessoas a mudar tudo pode ser bem difícil, ainda mais se for alguém com opiniões fortes (como um tal de Linus Torvalds).

Rust é legal, já dei uma estudada e achei bem interessante. Mas acho que não serve para tudo, e nem sempre é "a melhor solução" (como qualquer tecnologia, aliás). E existe um componente de bolha sim, no sentido de ter gente que ficou tão entusiasmada com a linguagem que quer usá-la pra tudo (tem um pouco de "martelo dourado" aí: aprendeu a usar o martelo e agora acha que tudo é prego). Embora eu ache que esses sejam minoria. Mesmo nos fóruns de Rust, vc encontra opiniões mais moderadas (selecionei algumas, mas sugiro que leia todo o tópico):

Technically it could, but rewriting billions of lines of existing C/C++ code and re-training existing C/C++ programmers is a huge cost, so it's unlikely to happen.

Obviously C and C++ are not going to be abandoned just because Rust shows up. C and C++ will be with us for a long time to come. I don't think anyone in the Rust community has that kind of overthrow in mind. Rather the name of the game is symbiosis. Rust can make use of all the existing C/C++ libraries and infrastructure. Rust can be used to extend existing C/C++ programs. Hence the emphasis on drop dead easy interfacing between Rust and C++ (Compared to many other new languages). Rust and C++ can be living together for a long time.

C++ is not going away and displacing C++ is not even the motivation for developing Rust. As far as I can tell. They can live together.

Em tradução livre:

Tecnicamente poderia (substituir), mas reescrever bilhões de linhas existentes em C/C++ e treinar os programadores C/C++ tem um custo muito alto, então é provável que não aconteça.

Obviamente C e C++ não serão abandonados só porque Rust apareceu. C e C++ estarão conosco por um bom tempo ainda. Não acho que alguém da comunidade Rust acredite nesta destruição (do C/C++). Em vez disso, o nome do jogo é "simbiose". Rust pode usar toda a infraestrutura e as bibliotecas do C/C++. Rust pode ser usado como extensão de programas em C/C++. Daí a ênfase na fácil interação entre Rust e C++ (se comparado a outras linguagens). Rust e C++ podem conviver juntas por muito tempo.

C++ não vai embora, e removê-la nem é a motivação para desenvolver em Rust, até onde sei. Elas podem conviver.

Claro que em tecnologia é difícil prever o futuro, mas minha opinião é parecida com esses comentários que destaquei acima: acredito que o mais provável é que Rust não irá substituir C/C++, em vez disso elas irão conviver juntas. Seja se apresentando como opções para projetos novos, ou se complementando conforme a necessidade.

1

Vou deixar aqui meus “2 tostões de prosa” sobre o assunto.

Comecei na computação em 1987, e desde o primeiro contato com o computador, já estava programando. De lá para cá, vi muita coisa nascer, desaparecer e até se tornar essencial. Manter-se atualizado exige um esforço diário, especialmente nessa área. Eu sempre brinco dizendo que sou só um programador – não me importo muito com rótulos como sênior ou pleno. O que me importa mesmo é aprender todos os dias, e acredito que é isso que mantém a gente no jogo.

Sobre as linguagens C, C++ e Rust, posso dizer que tive a sorte de estudar e trabalhar com as duas primeiras. Em Rust, estou me aprofundando há uns dois anos, e sempre procuro criar algo com ela, porque acho que é a melhor forma de realmente aprender. E honestamente? Eu acho que C e C++ vão continuar dominando por muito tempo, porque elas são literalmente a base da computação como conhecemos hoje. O legado dessas linguagens e o tanto de conhecimento construído em cima delas é gigantesco, e não é algo que some do dia para a noite.

Rust é uma linguagem excelente e, por ser mais nova, conseguiu inovar bastante e implementar algumas coisas que trazem segurança e controle – o sistema de segurança de memória é um ótimo exemplo disso. Mesmo assim, Rust não veio para "matar" o C e o C++, mas para coexistir. Até no kernel do Linux, Rust está entrando aos poucos, sem pressa, e isso é uma grande conquista. Ela permite escrever código seguro, mas ainda tem a opção do unsafe para acessar bibliotecas em C e C++ que já estão bem maduras, e essa compatibilidade é um ponto valioso.

No mundo da tecnologia, sempre vão existir "clubes" que defendem essa ou aquela linguagem, e isso é normal: SQL vs. NoSQL, Linux vs. Windows, C++ vs. Rust, e por aí vai. Às vezes, essas comparações nem fazem muito sentido, já que muitas dessas ferramentas atendem a propósitos diferentes.

Eu acredito que cada um tem suas razões para entrar na área de tecnologia: seja para crescer financeiramente, por pura paixão ou pela curiosidade. No fim das contas, a escolha da linguagem ou ferramenta depende do que você quer resolver. Cada tecnologia tem seu lugar, e o que realmente importa é como ela pode ajudar a gente a alcançar nossos objetivos.

1

Respondendo especificamante a parte de IA e DataScience:
As bibliotecas NumPy, Pandas e Scikit-learn (as mais comuns, ou pelo menos famosas no mundo de dados em Python) são escritas em C e C++. São expostas como APIs em Python, mas na verdade são wrappers dessa linguagem.
Uma outra biblioteca que vem ganhando espaço, por ser multithread, chamada Polars, é escrita em Rust.
Uma que é utilizada em Big Data, chamada PySpark, é escrita em Scala (derivada do Java).
Processamento utilizando GPUs, que utiliza principalmente CUDA (essencial para acelerar treinamento de modelos de Machine Learning), da NVidia, também é programada em C++.
MySQL e PostgreSQL são escritos em C++.

A realidade é que muitos profissionais nem sabem quais são as linguagens por trás dessas ferramentas essenciais para DS e IA/ML. O que importa mais é a facilidade de utilização, velocidade de processamento, e robustez.
E é pouco provável que reescrevam uma biblioteca inteira em outra linguagem as-is, sem oferecer nada a mais.
Por exemplo, no caso do Polars, ela oferece multi-threading e Lazy Evaluation a mais que o Pandas e mesmo assim, o share de mercado do Pandas ainda é muito maior.
Mas é difícil pensar numa aplicação em produção que não use um banco de dados escrito em C ou C++. E mais difícil ainda pensar em migrar para outro RDBMS SÓ pra trocar por alguma que é escrita em Rust.

Como uma analogia, motores elétricos e baterias existem há muitas décadas. E só agora estão aparecendo carros elétricos para o consumidor geral. Mas isso também não significa que TODOS os carros a combustão deixarão de existir (até que fiquem tão velhos que não sejam mais adequados para utilizar).

0