Sfrustrowani powolną ewolucją C++, inżynierowie Google uruchomili nowy „eksperymentalny” język programowania open source, zwany Carbon, jako możliwy następca czcigodnego, ale starzejącego się C++.
Tak jak Microsoft zbudował Typescript w celu aktualizacji JavaScript, a Kotlin został stworzony w celu uzupełnienia słabości Javy, Carbon może służyć jako następca języka C ++, który oferuje programistom łatwy punkt wyjścia do nowszego języka, który odnosi się do nowoczesnych koncepcji programistycznych, takich jak jako bezpieczeństwo pamięci i generyki.
Inżynier Google Chandler Carruth przedstawił język w tym tygodniu na konferencji CPP North C++ w Toronto.
Od dawna używany do tworzenia aplikacji krytycznych pod względem wydajności, C++ jest nękany wieloma problemami, które utrudniają współczesnym programistom, wyjaśnił Carruth na stronie GitHub. Nagromadził dziesięciolecia długu technicznego, przynosząc ze sobą wiele przestarzałych praktyk, które były częścią poprzednika języka C. Właściciele C++ traktują priorytetowo kompatybilność wsteczną, aby nadal wspierać szeroko używane projekty, takie jak Linux i jego pakiety.
Ewolucję języka hamuje również biurokratyczny proces komitetowy, zorientowany raczej na standaryzację niż na projektowanie. Co może utrudnić dodawanie nowych funkcji. C++ ma w dużej mierze sekwestrowany proces rozwoju, w którym komisja selekcyjna podejmuje ważne decyzje w procesie kaskadowym, który może trwać latami.
„Struktura komitetu ma na celu zapewnienie reprezentacji narodów i firm, a nie budowanie integracyjnego i przyjaznego zespołu oraz społeczności ekspertów i osób aktywnie przyczyniających się do rozwoju języka” – napisał Carruth. „Dostęp do komitetu i standardów jest ograniczony i kosztowny, frekwencja jest niezbędna, aby mieć głos, a decyzje podejmowane są głosami na żywo obecnych”.
Carruth chce budować Carbon przez bardziej otwarte środowisko kierowane przez społeczność . Projekt będzie utrzymywany na GitHub i omawiany na Discordzie .
Chociaż Carbon zaczynał jako wewnętrzny projekt Google, zespół programistów ostatecznie chce zmniejszyć wkład Google lub innej pojedynczej firmy do mniej niż 50% do końca roku. Docelowo chcą przekazać projekt niezależnej fundacji programistycznej, gdzie jego rozwojem będą kierować wolontariusze.
Co jest w boxie?
Projekt chce wydać podstawową działającą wersję („0.1”) do końca roku. Carbon zostanie zbudowany na podstawie nowoczesnych zasad programowania, w tym systemu generycznego, który usunie potrzebę podwójnego sprawdzania kodu.
Inną bardzo potrzebną funkcją, której brakuje w C++, jest bezpieczeństwo pamięci. Błędy dostępu do pamięci są jednymi z największych winowajców luk w zabezpieczeniach. Projektanci Carbon będą szukać sposobów na lepsze śledzenie niezainicjowanych stanów, projektowych interfejsów API i idiomów, które obsługują dynamiczne sprawdzanie granic, oraz zbudowanie kompleksowego domyślnego trybu kompilacji debugowania. Z czasem projektanci planują zbudować bezpieczny podzbiór węgla.
Zgodnie z dokumentacją język będzie wspierał:
Zespół programistów zajmie się również stworzeniem wbudowanego menedżera pakietów, czego bardzo brakuje w C++.
Zespół programistów planuje napisać narzędzia do tłumaczenia umożliwiające migrację kodu C++ do kodu Carbon.
Rust to kolejny nowy język stworzony specjalnie w celu zaspokojenia potrzeb aplikacji zapewniających wydajność bezpieczną w pamięci. Dlaczego więc po prostu nie użyć Rusta? W swojej prezentacji w CPP North, Carruth poradził osobom używającym Rust, aby nadal z niego korzystali. Carbon jest dla tych programistów, którzy mają już duże bazy kodu w C++, które są trudne do przekonwertowania na Rust. Carbon jest konkretnie tym, co Carruth nazwał „językiem następców”, który jest zbudowany na już istniejącym ekosystemie, w tym przypadku C++.
„Zaprojektowano go z myślą o interoperacyjności z C++, a także o przyjęciu i migracji na dużą skalę dla istniejących baz kodu C++ i programistów” — wyjaśnia dokumentacja. Oznacza to, że język powinien być tak wydajny jak C++, powinien zapewniać bezproblemową i dwukierunkową interoperacyjność z C++.