diff --git a/docs/images/carbon_snippet.svg b/docs/images/carbon_snippet.svg index 9631bfb4b07c..80c089c7682b 100644 --- a/docs/images/carbon_snippet.svg +++ b/docs/images/carbon_snippet.svg @@ -1 +1 @@ - + diff --git a/docs/images/cpp_snippet.svg b/docs/images/cpp_snippet.svg index 37f30f695d74..26226fc2f560 100644 --- a/docs/images/cpp_snippet.svg +++ b/docs/images/cpp_snippet.svg @@ -1 +1 @@ - + diff --git a/docs/images/mixed_snippet.svg b/docs/images/mixed_snippet.svg index 3acacbbc8481..45800c22b0df 100644 --- a/docs/images/mixed_snippet.svg +++ b/docs/images/mixed_snippet.svg @@ -1 +1 @@ - + diff --git a/docs/images/quicksort_snippet.svg b/docs/images/quicksort_snippet.svg index 39c933f119e2..3f7806be983c 100644 --- a/docs/images/quicksort_snippet.svg +++ b/docs/images/quicksort_snippet.svg @@ -1 +1 @@ - + diff --git a/docs/images/snippets.md b/docs/images/snippets.md index 8e9f8a73d383..513616d54da5 100644 --- a/docs/images/snippets.md +++ b/docs/images/snippets.md @@ -6,6 +6,11 @@ Exceptions. See /LICENSE for license information. SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception --> +## Images + +Images are managed in +[Google Drive](https://drive.google.com/corp/drive/folders/1CsbHo3vamrxmBwHkoyz1kU0sGFqAh688). + ## Quicksort A sample of quicksort in Carbon. @@ -13,20 +18,20 @@ A sample of quicksort in Carbon. ```cpp package Sorting api; -fn Partition[T:! Comparable & Movable](s: Span(T)) +fn Partition[T:! Comparable & Movable](s: Slice(T)) -> i64 { var i: i64 = -1; - for (element: T in s) { - if (element <= s.Last()) { + for (e: T in s) { + if (e <= s.Last()) { ++i; - Swap(&s[i], &element); + Swap(&s[i], &e); } } return i; } -fn QuickSort[T:! Comparable & Movable](s: Span(T)) { +fn QuickSort[T:! Comparable & Movable](s: Slice(T)) { if (s.Size() <= 1) { return; } @@ -41,21 +46,28 @@ fn QuickSort[T:! Comparable & Movable](s: Span(T)) { ### C++ ```cpp -// C++ +// C++: +#include #include +#include #include -void WriteWithTotal(const std::vector& v) { - uint64_t sum = 0; - for (uint64_t e : v) { - sum += e; - std::cout << e << "\n"; +struct Circle { + float r; +}; + +void WriteTotalArea(std::span circles) { + float area = 0; + for (const Circle& c : circles) { + area += M_PI * c.r * c.r; } - std::cout << "Total: " << sum << "\n"; + std::cout << "Total area: " << area << "\n"; } auto main(int argc, char** argv) -> int { - WriteWithTotal({1, 2, 3}); + std::vector circles = {{1.0}, {2.0}}; + // Implicitly constructors `span` from `vector`. + WriteTotalArea(circles); return 0; } ``` @@ -63,20 +75,27 @@ auto main(int argc, char** argv) -> int { ### Carbon ```cpp -// Carbon -package Summing api; +// Carbon: +package Geometry api; +import Math; -fn WriteWithTotal(v: Vector(u64)) { - var sum: u64 = 0; - for (e: u64 in v) { - sum += e; - Console.WriteLine(e); - } - Console.WriteLine(f"Total: {0}", sum); +class Circle { + var r: f32; } -fn Main() -> i64 { - WriteWithTotal((1, 2, 3)); +fn WriteTotalArea(circles: Slice(Circle)) { + var area: f32 = 0; + for (c: Circle in circles) { + area += Math.Pi * c.r * c.r; + } + Console.WriteLine("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 constructs `Slice` from `Array`. + WriteTotalArea(circles); return 0; } ``` @@ -84,24 +103,34 @@ fn Main() -> i64 { ### Mixed ```cpp -// Carbon using C++'s vector -package Summing api; -import Cpp library ""; +// C++ code used in both Carbon and C++: +struct Circle { + float r; +}; -fn WriteWithTotal(v: Cpp.std.vector(u64)) { - var sum: u64 = 0; - for (e: u64 in v) { - sum += e; - Console.WriteLine(e); +// Carbon exposing a function for C++: +package Geometry api; +import Cpp library "circle.h"; +import Math; + +fn WriteTotalArea(circles: Slice(Cpp.Circle)) { + var area: f32 = 0; + for (c: Cpp.Circle in circles) { + area += Math.Pi * c.r * c.r; } - Console.WriteLine("Total: {0}", sum); + Console.WriteLine("Total area: {0}", area); } -// C++ calling Carbon -#include "summing.carbon.h" +// C++ calling Carbon: +#include +#include "circle.h" +#include "geometry.carbon.h" auto main(int argc, char** argv) -> int { - Summing::WriteWithTotal({1, 2, 3}); + std::vector circles = {{1.0}, {2.0}}; + // Carbon's `Slice` supports implicit construction from `std::vector`, + // similar to `std::span`. + Geometry::WriteTotalArea(circles); return 0; } ```