Desde a sua criação, C++ tem sido a principal escolha para a construção de aplicativos de alto desempenho. Mas a linguagem ainda apresenta algumas práticas desatualizadas causadas pelo seu “design por comitê”.

Em 19 de julho de 2022, durante a conferência CPP North C++ em Toronto, o engenheiro do Google Chandler Carruth apresentou o Carbon.

Descubra o que é Carbon e como pretende ter sucesso com o C++.

O que é Carbono?

Os engenheiros do Google desenvolveram o Carbono linguagem de programação para resolver as deficiências do C++.

Muitos existentes línguas como Golang e Rust já existem que espelham o desempenho de C++ sem suas deficiências. Infelizmente, essas linguagens apresentam barreiras significativas para a migração de bases de código C++ existentes.

O carbono pretende ser o que TypeScript é para JavaScript, e Kotlin é para Java. Não é uma substituição, mas uma linguagem sucessora projetada em torno da interoperabilidade com C++. Ele visa a adoção e migração em larga escala para bases de código e desenvolvedores existentes.

instagram viewer

Principais Características do Carbono

Alguns dos principais recursos do Carbon incluem interoperabilidade C++, genéricos modernos e segurança de memória.

Interoperabilidade com C++

O Carbon visa fornecer uma curva de aprendizado suave para desenvolvedores C++, com um conjunto padrão e consistente de construções de linguagem.

Por exemplo, pegue este código C++:

//C++:
#incluir
#incluir
#incluir
#incluir

estruturaCírculo {
flutuador r;
};

vazioImprimirÁreaTotal(padrão::período círculos){
flutuador área = 0;

por (const Círculo& c: círculos) {
área += M_PI * c.r * c.r;
}

padrão::cout << "Área total: " << área << fim;
}

autoa Principal(int argc, Caracteres** argv) ->; int {
padrão::vetor círculos = {{1.0}, {2.0}};

// Construa implicitamente `span` a partir de `vector`.
PrintTotalArea (círculos);
Retorna0;
}

Traduzido para Carbono, torna-se:

// Carbono:
pacote API de geometria;
importarMatemática;

classeCírculo{
var r: f32;
}

fn ImprimirÁreaTotal(círculos: Fatia (Círculo)) {
var área: f32 = 0;

for (c: Circule em círculos) {
área += Matemática.Pi * c.r * c.r;
}

Imprimir("Área total: {0}", área);
}

fn Principal() ->; i32 {
// Um ​​array de tamanho dinâmico, como `std:: vector`.
var círculos: Variedade(Círculo) = ({.r = 1.0}, {.r = 2.0});

// Construir implicitamente `Slice` a partir de `Array`.
PrintTotalArea (círculos);
Retorna0;
}

Você também pode migrar uma única biblioteca C++ para Carbon dentro de um aplicativo ou adicionar um novo código Carbon sobre o código C++ existente. Por exemplo:

// Código C++ usado em Carbon e C++:
estruturaCírculo {
flutuador r;
};

// Carbono expondo uma função para C++:
pacote Geometria api;
importar biblioteca Cpp"círculo.h";
importar Matemática;

fn ImprimirÁreaTotal(círculos: Fatia (Cpp. Círculo)){
var área: f32 = 0;

por (c: Cp. Circule em círculos) {
área += Math. Pi * c.r * c.r;
}

Print("Área total: {0}", área);
}

// C++ chamando Carbon:
#incluir
#incluir "círculo.h"
#incluir "geometria.carbon.h"

autoa Principal(int argc, Caracteres** argv) ->; int {
padrão::vetor círculos = {{1.0}, {2.0}};

// O `Slice` do Carbon suporta construção implícita de `std:: vector`,
// semelhante a `std:: span`.
Geometria:: PrintTotalArea (círculos);
Retorna0;
}

Um Sistema Genérico Moderno

Carbono fornece um sistema genérico moderno com definições verificadas. Mas ele ainda oferece suporte a modelos opt-in para interoperabilidade C++ perfeita.

Esse sistema genérico oferece muitas vantagens aos modelos C++:

  • Verificações de tipo para definições genéricas. Isso evita o custo de tempo de compilação de verificar novamente as definições para cada instanciação.
  • Interfaces fortes e verificadas. Isso reduz dependências acidentais em detalhes de implementação e cria um contrato mais explícito.

Segurança da memória

O Carbon procura abordar a segurança da memória, uma questão fundamental que assola o C++, por:

  • Rastreando melhor os estados não inicializados, aumentando a aplicação da inicialização e protegendo contra bugs de inicialização.
  • Projetando APIs e idiomas fundamentais para dar suporte a verificações de limites dinâmicos em compilações de depuração e reforçadas.
  • Ter um modo de compilação de depuração padrão que é mais abrangente do que os modos de compilação existentes do C++.

Introdução ao Carbono

Você pode explorar o Carbon agora mesmo verificando a base de código e usando o Carbon explorer:

# Instale o bazelisk usando o Homebrew.
$ brew instalar bazelisk

# Instale o Clang/LLVM usando o Homebrew.
# Muitas versões do Clang/LLVM não são construídas com opções nas quais confiamos.
$ brew install llvm
$ exportar PATH="$(brew --prefix llvm)/bin:${PATH}"

# Baixe o código do Carbon.
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbono-lang

# Construa e execute o explorador.
$ bazel run //explorer -- ./explorer/testdata/imprimir/format_only.carbon

O roteiro da Carbon revela um pensamento de longo prazo

De acordo com o roteiro da Carbon, o Google tornará o experimento público com o lançamento de uma versão de trabalho principal (0.1) até o final de 2022. Eles planejam seguir isso com uma versão 0.2 em 2023 e uma versão 1.0 completa em 2024-2025.

Se o Google será capaz de reproduzir o sucesso de seus outros idiomas, Golang e Kotlin, ainda não se sabe.