Usuario:Dan047/Carbon (lenguaje de programación)

Carbon
Desarrollador(es)
?
Información general
Extensiones comunes .carbon
Paradigma Multiparadigma
Diseñado por Google
Sistema de tipos Fuerte, estático
Influido por C++, Rust, Swift [cita requerida]
Sistema operativo Multiplataforma

Carbon es un lenguaje de programación experimental diseñado para la interoperabilidad con C++ . [1]​ El proyecto es de código abierto y se inició en Google . El ingeniero de Google Chandler Carruth presentó Carbon por primera vez en la conferencia CppNorth en Toronto en julio de 2022. Afirmó que Carbon fue creado para ser un sucesor de C++. Se espera que el lenguaje tenga una versión experimental MVP 0.1 en 2025 y una versión 1.0 lista para producción después de 2027. [2]

El lenguaje pretende corregir varias deficiencias percibidas de C++ pero por lo demás proporciona un conjunto de características similar. Los objetivos principales del lenguaje son la legibilidad y la "interoperabilidad bidireccional" (que permite al usuario incluir código C++ en el archivo Carbon), a diferencia del uso de un lenguaje nuevo como Rust, que, si bien está influenciado por C++, no es bidireccionalmente compatible con los programas C++. Los cambios en el lenguaje serán decididos por los líderes de Carbon.

Los documentos, el diseño, la implementación y las herramientas relacionadas de Carbon están alojados en GitHub bajo la licencia Apache-2.0 con excepciones LLVM . [3]

Ejemplo

editar
Carbon C++
package Geometry;
import Math;

class Circle {
  var r: f32;
}

fn PrintTotalArea(circles: Slice(Circle)) {
  var area: f32 = 0;
  for (c: Circle in circles) {
    area += Math.Pi * c.r * c.r;
  }
  Print("Total area: {0}", area);
}

fn Main() -> i32 {
  // A dynamically sized array, like `std::vector`.
  var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
  // Implicitly converts `Array` to `Slice`.
  PrintTotalArea(circles);
  return 0;
}
#include <numbers>
#include <print>
#include <span>
#include <stdfloat>
#include <vector>
// or: import std;

struct Circle {
  std::float32_t r;
};

void PrintTotalArea(std::span<Circle> circles) {
  std::float32_t area = 0;
  for (const Circle& c : circles) {
    area += std::numbers::pi * c.r * c.r;
  }
  std::print("Total area: {}\n", area);
}

int main() {
  std::vector<Circle> circles{{.r = 1.0}, {.r = 2.0}};
  // Implicitly converts `vector` to `span`.
  PrintTotalArea(circles);
  return 0;
}

Véase también

editar
  1. «README». Consultado el 6 de septiembre de 2023. «It is designed around interoperability with C++ as well as large-scale adoption and migration for existing C++ codebases and developers.» 
  2. Carbon Language: Roadmap, carbon-language, 11 de enero de 2024, consultado el 18 de enero de 2024 .
  3. «carbon-lang/LICENSE». GitHub. 16 de junio de 2020. Consultado el 24 de julio de 2022.