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

CTO da Microsoft Azure afirma que é hora de parar novos projetos escritos em C/C++

Em seu perfil no Twitter, Mark Russinovic, disse que deveria-se utilizar Rust para cenários onde uma linguagem sem garbage collection seja necessária.

Além disso, por uma questão de segurança e confiabilidade, a indústria deve declarar linguagens C/C++ como obsoletas.

Russinovich é um programador legendário, especialmente conhecido por seus trabalhos de engenharia reversa – foi ele quem descobriu e denunciou o escândalo do rootkit da Sony em 2005, por exemplo.

Carregando publicação patrocinada...
11

Interessante. Eu tive contato com C e C++ na faculdade, mas nunca tive contato com Rust, apesar de ter curiosidade sobre a linguagem.

C/C++ ou Rust com Node.js?

Uma das aplicações do C/C++ que, apesar de eu nunca ter usado, sei que existe, é no Node.js. O Node.js usa o motor V8 para executar código JavaScript, e o V8 é escrito em C++. Encontrei uma publicação no LinkedIn do Erick Wendel e lá ele diz algumas coisas interessantes sobre isso:

Ele usa o motor V8 do chrome para executar código JavaScript, a libuv para trabalhar com funções assíncronas, o event loop e mais.

Só que, o V8 é escrito em C++, a libuv, em C.

Então naturalmente, o Node.js pode ler C/C++ DLLs no runtime e chamar os métodos escritos em C++ direto do JavaScript.

Tá mas e como o Rust entra no Jogo?

Não só para o Rust, mas se quisermos interoperar qualquer outra linguagem, basta nós usarmos as "Foreign Function Interfaces" entre linguagens.

AS FFIs são um mecanismo em que um programa escrito em uma linguagem pode chamar rotinas e funções escritas em outras.

No Rust, podemos usar a biblioteca libc (biblioteca padrão do C), que permite que usamos e retornamos os tipos de dados da linguagem C direto do código Rust.

E nessa publicação, o Erick Wendel mencionou um artigo sobre o desenvolvimento de módulos nativos do Node.js com Rust, onde logo no início, em resumo, está escrito "Use Rust ao invés de C++ para escrever módulos nativos do Node.js".

Como eu já disse, nunca escrevi um módulo nativo, mas acredito que em breve precisarei, então continuei a leitura. O motivo pelo qual o Peter Czibik, autor do artigo, resolveu usar Rust ao invés de C++ foi:

  1. Atualizações: ele precisava usar alguma biblioteca para tratar URLs, e copiar e colocar código C/C++ da Internet não é uma boa opção porque não há uma maneira fácil de atualizar um enorme bloco de código que está no repositório.
  2. Facilidade de manutenção / segurança: uma pessoa com pouca experiência em C++ não pode validar se o código está correto, mas eventualmente esse código será executado nos servidores. C++ tem uma alta curva de aprendizado e leva muito tempo para dominar a linguagem.
  3. Segurança: existe código C++ com falhas, e o Peter prefere evitar isso porque não tem como auditá-lo sozinho. Usar módulos de código aberto bem mantidos dá confiança o suficiente para não precisar se preocupar com segurança.

Ponderações finais

Lendo o artigo, eu entendi que uma integração entre o Rust e o Node.js funciona, mas fiquei em dúvida se os pontos 1 e 3 são realmente bons motivos para não usar C/C++: não existe mesmo uma opção de usar um código C/C++ de terceiros com um gerenciador de pacotes e carregar em tempo de execução?

Encontrei alguns outros artigos que abordam esse assunto:

Essa foi uma leve leitura crítica sobre o que eu descobri porque não tenho conhecimento no assunto, mas foi legal descobrir que dá para usar Rust sem perder muito em desempenho em comparação ao C/C++, e talvez até ganhar em produtividade e segurança. Eu adoraria ler sobre a experiência de alguém com esse assunto, aqui no TabNews.

2

Sou da Elétrica e a programação de embarcados é basicamente Cpp. Acham Rust tem uso em sistemas embarcados? Ja vou começar a procurar pra nao ficar muito pra trás mas tenho dúvidas se nessa área outra linguagem vingue. Só tem velho kkkkkk