Просмотр исходного кода

Remove : in variable declarations (#503)

Starting to apply #339

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Jon Meow 5 лет назад
Родитель
Сommit
231264e0c0

+ 31 - 31
docs/design/README.md

@@ -164,7 +164,7 @@ package ExampleUser;
 
 
 import Geometry library("OneSide");
 import Geometry library("OneSide");
 
 
-fn Foo(var Geometry.Shapes.Flat.Circle: circle) { ... }
+fn Foo(Geometry.Shapes.Flat.Circle circle) { ... }
 ```
 ```
 
 
 ### Names and scopes
 ### Names and scopes
@@ -282,7 +282,7 @@ Some common expressions in Carbon include:
 Functions are the core unit of behavior. For example:
 Functions are the core unit of behavior. For example:
 
 
 ```carbon
 ```carbon
-fn Sum(Int: a, Int: b) -> Int;
+fn Sum(Int a, Int b) -> Int;
 ```
 ```
 
 
 Breaking this apart:
 Breaking this apart:
@@ -333,7 +333,7 @@ For example:
 
 
 ```carbon
 ```carbon
 fn Foo() {
 fn Foo() {
-  var Int: x = 42;
+  var Int x = 42;
 }
 }
 ```
 ```
 
 
@@ -371,7 +371,7 @@ conditional execution of statements.
 For example:
 For example:
 
 
 ```carbon
 ```carbon
-fn Foo(Int: x) {
+fn Foo(Int x) {
   if (x < 42) {
   if (x < 42) {
     Bar();
     Bar();
   } else if (x > 77) {
   } else if (x > 77) {
@@ -400,7 +400,7 @@ For example:
 
 
 ```carbon
 ```carbon
 fn Foo() {
 fn Foo() {
-  var Int: x = 0;
+  var Int x = 0;
   while (x < 42) {
   while (x < 42) {
     if (ShouldStop()) break;
     if (ShouldStop()) break;
     if (ShouldSkip(x)) {
     if (ShouldSkip(x)) {
@@ -435,7 +435,7 @@ value is provided by an expression in the return statement. This allows us to
 complete the definition of our `Sum` function from earlier as:
 complete the definition of our `Sum` function from earlier as:
 
 
 ```carbon
 ```carbon
-fn Sum(Int: a, Int: b) -> Int {
+fn Sum(Int a, Int b) -> Int {
   return a + b;
   return a + b;
 }
 }
 ```
 ```
@@ -502,7 +502,7 @@ tuple. In formal type theory, tuples are product types.
 An example use of tuples is:
 An example use of tuples is:
 
 
 ```carbon
 ```carbon
-fn DoubleBoth(Int: x, Int: y) -> (Int, Int) {
+fn DoubleBoth(Int x, Int y) -> (Int, Int) {
   return (2 * x, 2 * y);
   return (2 * x, 2 * y);
 }
 }
 ```
 ```
@@ -519,7 +519,7 @@ expression: one is a tuple of types, the other a tuple of values.
 Element access uses subscript syntax:
 Element access uses subscript syntax:
 
 
 ```carbon
 ```carbon
-fn DoubleTuple((Int, Int): x) -> (Int, Int) {
+fn DoubleTuple((Int, Int) x) -> (Int, Int) {
   return (2 * x[0], 2 * x[1]);
   return (2 * x[0], 2 * x[1]);
 }
 }
 ```
 ```
@@ -528,12 +528,12 @@ Tuples also support multiple indices and slicing to restructure tuple elements:
 
 
 ```carbon
 ```carbon
 // This reverses the tuple using multiple indices.
 // This reverses the tuple using multiple indices.
-fn Reverse((Int, Int, Int): x) -> (Int, Int, Int) {
+fn Reverse((Int, Int, Int) x) -> (Int, Int, Int) {
   return x[2, 1, 0];
   return x[2, 1, 0];
 }
 }
 
 
 // This slices the tuple by extracting elements [0, 2).
 // This slices the tuple by extracting elements [0, 2).
-fn RemoveLast((Int, Int, Int): x) -> (Int, Int) {
+fn RemoveLast((Int, Int, Int) x) -> (Int, Int) {
   return x[0 .. 2];
   return x[0 .. 2];
 }
 }
 ```
 ```
@@ -565,11 +565,11 @@ For example:
 
 
 ```carbon
 ```carbon
 struct Widget {
 struct Widget {
-  var Int: x;
-  var Int: y;
-  var Int: z;
+  var Int x;
+  var Int y;
+  var Int z;
 
 
-  var String: payload;
+  var String payload;
 }
 }
 ```
 ```
 
 
@@ -584,18 +584,18 @@ More advanced `struct`s may be created:
 ```carbon
 ```carbon
 struct AdvancedWidget {
 struct AdvancedWidget {
   // Do a thing!
   // Do a thing!
-  fn DoSomething(AdvancedWidget: self, Int: x, Int: y);
+  fn DoSomething(AdvancedWidget self, Int x, Int y);
 
 
   // A nested type.
   // A nested type.
   struct Nestedtype {
   struct Nestedtype {
     // ...
     // ...
   }
   }
 
 
-  private var Int: x;
-  private var Int: y;
+  private var Int x;
+  private var Int y;
 }
 }
 
 
-fn Foo(AdvancedWidget: thing) {
+fn Foo(AdvancedWidget thing) {
   thing.DoSomething(1, 2);
   thing.DoSomething(1, 2);
 }
 }
 ```
 ```
@@ -667,13 +667,13 @@ fn Bar() -> (Int, (Float, Float));
 
 
 fn Foo() -> Float {
 fn Foo() -> Float {
   match (Bar()...) {
   match (Bar()...) {
-    case (42, (Float: x, Float: y)) => {
+    case (42, (Float x, Float y)) => {
       return x - y;
       return x - y;
     }
     }
-    case (Int: p, (Float: x, Float: _)) if (p < 13) => {
+    case (Int p, (Float x, Float _)) if (p < 13) => {
       return p * x;
       return p * x;
     }
     }
-    case (Int: p, auto: _) if (p > 3) => {
+    case (Int p, auto _) if (p > 3) => {
       return p * Pi;
       return p * Pi;
     }
     }
     default => {
     default => {
@@ -690,7 +690,7 @@ Breaking apart this `match`:
     -   It then will find the _first_ `case` that matches this value, and
     -   It then will find the _first_ `case` that matches this value, and
         execute that block.
         execute that block.
     -   If none match, then it executes the default block.
     -   If none match, then it executes the default block.
--   Each `case` pattern contains a value pattern, such as `(Int: p, auto: _)`,
+-   Each `case` pattern contains a value pattern, such as `(Int p, auto _)`,
     followed by an optional boolean predicate introduced by the `if` keyword.
     followed by an optional boolean predicate introduced by the `if` keyword.
     -   The value pattern must first match, and then the predicate must also
     -   The value pattern must first match, and then the predicate must also
         evaluate to true for the overall `case` pattern to match.
         evaluate to true for the overall `case` pattern to match.
@@ -704,7 +704,7 @@ Value patterns may be composed of the following:
     -   The special identifier `_` may be used to discard the value once
     -   The special identifier `_` may be used to discard the value once
         matched.
         matched.
 -   A destructuring pattern containing a sequence of value patterns, such as
 -   A destructuring pattern containing a sequence of value patterns, such as
-    `(Float: x, Float: y)`, which match against tuples and tuple-like values by
+    `(Float x, Float y)`, which match against tuples and tuple-like values by
     recursively matching on their elements.
     recursively matching on their elements.
 -   An unwrapping pattern containing a nested value pattern which matches
 -   An unwrapping pattern containing a nested value pattern which matches
     against a variant or variant-like value by unwrapping it.
     against a variant or variant-like value by unwrapping it.
@@ -724,7 +724,7 @@ An example use is:
 ```carbon
 ```carbon
 fn Bar() -> (Int, (Float, Float));
 fn Bar() -> (Int, (Float, Float));
 fn Foo() -> Int {
 fn Foo() -> Int {
-  var (Int: p, auto: _) = Bar();
+  var (Int p, auto _) = Bar();
   return p;
   return p;
 }
 }
 ```
 ```
@@ -733,7 +733,7 @@ To break this apart:
 
 
 -   The `Int` returned by `Bar()` matches and is bound to `p`, then returned.
 -   The `Int` returned by `Bar()` matches and is bound to `p`, then returned.
 -   The `(Float, Float)` returned by `Bar()` matches and is discarded by
 -   The `(Float, Float)` returned by `Bar()` matches and is discarded by
-    `auto: _`.
+    `auto _`.
 
 
 ### Pattern matching as function overload resolution
 ### Pattern matching as function overload resolution
 
 
@@ -775,10 +775,10 @@ be used to instantiate the parameterized definition with the provided arguments
 in order to produce a complete type. For example:
 in order to produce a complete type. For example:
 
 
 ```carbon
 ```carbon
-struct Stack(Type:$$ T) {
-  var Array(T): storage;
+struct Stack(Type$$ T) {
+  var Array(T) storage;
 
 
-  fn Push(T: value);
+  fn Push(T value);
   fn Pop() -> T;
   fn Pop() -> T;
 }
 }
 ```
 ```
@@ -805,12 +805,12 @@ arguments. The runtime call then passes the remaining arguments to the resulting
 complete definition.
 complete definition.
 
 
 ```carbon
 ```carbon
-fn Convert[Type:$$ T](T: source, Type:$$ U) -> U {
-  var U: converted = source;
+fn Convert[Type$$ T](T source, Type$$ U) -> U {
+  var U converted = source;
   return converted;
   return converted;
 }
 }
 
 
-fn Foo(Int: i) -> Float {
+fn Foo(Int i) -> Float {
   // Instantiates with the `T` implicit argument set to `Int` and the `U`
   // Instantiates with the `T` implicit argument set to `Int` and the `U`
   // explicit argument set to `Float`, then calls with the runtime value `i`.
   // explicit argument set to `Float`, then calls with the runtime value `i`.
   return Convert(i, Float);
   return Convert(i, Float);

+ 7 - 7
docs/design/code_and_name_organization/README.md

@@ -434,7 +434,7 @@ package Checksums library "Sha" api;
 
 
 namespaces Sha256;
 namespaces Sha256;
 
 
-api fn Sha256.HexDigest(Bytes: data) -> String { ... }
+api fn Sha256.HexDigest(Bytes data) -> String { ... }
 ```
 ```
 
 
 Calling code may look like:
 Calling code may look like:
@@ -444,9 +444,9 @@ package Caller api;
 
 
 import Checksums library "Sha";
 import Checksums library "Sha";
 
 
-fn Process(Bytes: data) {
+fn Process(Bytes data) {
   ...
   ...
-  var String: digest = Checksums.Sha256.HexDigest(data);
+  var String digest = Checksums.Sha256.HexDigest(data);
   ...
   ...
 }
 }
 ```
 ```
@@ -514,7 +514,7 @@ package Geometry api;
 import Geometry library "Shapes";
 import Geometry library "Shapes";
 
 
 // Circle must be referenced using the Geometry namespace of the import.
 // Circle must be referenced using the Geometry namespace of the import.
-fn GetArea(Geometry.Circle: c) { ... }
+fn GetArea(Geometry.Circle c) { ... }
 ```
 ```
 
 
 ### Namespaces
 ### Namespaces
@@ -801,7 +801,7 @@ syntax. For example:
 ```carbon
 ```carbon
 import Cpp file("myproject/myclass.h");
 import Cpp file("myproject/myclass.h");
 
 
-fn MyCarbonCall(var Cpp.MyProject.MyClass: x);
+fn MyCarbonCall(Cpp.MyProject.MyClass x);
 ```
 ```
 
 
 ### Imports from URLs
 ### Imports from URLs
@@ -869,7 +869,7 @@ struct Quantiles {
   fn Stats();
   fn Stats();
   fn Build() {
   fn Build() {
     ...
     ...
-    var Math.Stats: b;
+    var Math.Stats b;
     ...
     ...
   }
   }
 }
 }
@@ -1790,7 +1790,7 @@ example:
 import Geometry library "Shapes" names *;
 import Geometry library "Shapes" names *;
 
 
 // Triangle was imported as part of "*".
 // Triangle was imported as part of "*".
-fn Draw(var Triangle: x) { ... }
+fn Draw(Triangle x) { ... }
 ```
 ```
 
 
 Advantages:
 Advantages:

+ 2 - 2
docs/design/control_flow.md

@@ -41,7 +41,7 @@ control flow constructs are mostly similar to those in C, C++, and other
 languages.
 languages.
 
 
 ```
 ```
-fn Foo(Int: x) {
+fn Foo(Int x) {
   if (x < 42) {
   if (x < 42) {
     Bar();
     Bar();
   } else if (x > 77) {
   } else if (x > 77) {
@@ -60,7 +60,7 @@ an expression in the return statement. This allows us to complete the definition
 of our `Sum` function from earlier as:
 of our `Sum` function from earlier as:
 
 
 ```
 ```
-fn Sum(Int: a, Int: b) -> Int {
+fn Sum(Int a, Int b) -> Int {
   return a + b;
   return a + b;
 }
 }
 ```
 ```

+ 2 - 2
docs/design/functions.md

@@ -30,7 +30,7 @@ primarily divided up into "functions" (or "procedures", "subroutines", or
 language. Let's look at a simple example to understand how these work:
 language. Let's look at a simple example to understand how these work:
 
 
 ```
 ```
-fn Sum(Int: a, Int: b) -> Int;
+fn Sum(Int a, Int b) -> Int;
 ```
 ```
 
 
 This declares a function called `Sum` which accepts two `Int` parameters, the
 This declares a function called `Sum` which accepts two `Int` parameters, the
@@ -47,7 +47,7 @@ auto Sum(std::int64_t a, std::int64_t b) -> std::int64_t;
 Let's look at how some specific parts of this work. The function declaration is
 Let's look at how some specific parts of this work. The function declaration is
 introduced with a keyword `fn` followed by the name of the function `Sum`. This
 introduced with a keyword `fn` followed by the name of the function `Sum`. This
 declares that name in the surrounding scope and opens up a new scope for this
 declares that name in the surrounding scope and opens up a new scope for this
-function. We declare the first parameter as `Int: a`. The `Int` part is an
+function. We declare the first parameter as `Int a`. The `Int` part is an
 expression (here referring to a constant) that computes the type of the
 expression (here referring to a constant) that computes the type of the
 parameter. The `:` marks the end of the type expression and introduces the
 parameter. The `:` marks the end of the type expression and introduces the
 identifier for the parameter, `a`. The parameter names are introduced into the
 identifier for the parameter, `a`. The parameter names are introduced into the

+ 3 - 3
docs/design/lexical_conventions/numeric_literals.md

@@ -440,8 +440,8 @@ Disadvantages:
 Advantages:
 Advantages:
 
 
 -   Simpler, more flexible rule, that may allow some groupings that are
 -   Simpler, more flexible rule, that may allow some groupings that are
-    conventional in a specific domain. For example, `var Date: d = 01_12_1983;`,
-    or `var Int64: time_in_microseconds = 123456_000000;`.
+    conventional in a specific domain. For example, `var Date d = 01_12_1983;`,
+    or `var Int64 time_in_microseconds = 123456_000000;`.
 -   Culturally agnostic. For example, the Indian convention for digit separators
 -   Culturally agnostic. For example, the Indian convention for digit separators
     would group the last three digits, and then every two digits before that
     would group the last three digits, and then every two digits before that
     (1,23,45,678 could be written `1_23_45_678`).
     (1,23,45,678 could be written `1_23_45_678`).
@@ -466,7 +466,7 @@ Disadvantages:
     be desirable. For example:
     be desirable. For example:
 
 
     ```carbon
     ```carbon
-    var Float32: flt_max =
+    var Float32 flt_max =
       BitCast(Float32, 0b0_11111110_11111111111111111111111);
       BitCast(Float32, 0b0_11111110_11111111111111111111111);
     ```
     ```
 
 

+ 1 - 1
docs/design/name_lookup.md

@@ -41,7 +41,7 @@ namespace Foo {
   }
   }
 }
 }
 
 
-fn F(Foo.Bar.MyInt: x);
+fn F(Foo.Bar.MyInt x);
 ```
 ```
 
 
 Carbon packages are also namespaces so to get to an imported name from the
 Carbon packages are also namespaces so to get to an imported name from the

+ 7 - 8
docs/design/pattern_matching.md

@@ -47,13 +47,13 @@ under active investigation for C++. Carbon's `match` can be used as follows:
 fn Bar() -> (Int, (Float, Float));
 fn Bar() -> (Int, (Float, Float));
 fn Foo() -> Float {
 fn Foo() -> Float {
   match (Bar()) {
   match (Bar()) {
-    case (42, (Float: x, Float: y)) => {
+    case (42, (Float x, Float y)) => {
       return x - y;
       return x - y;
     }
     }
-    case (Int: p, (Float: x, Float: _)) if (p < 13) => {
+    case (Int p, (Float x, Float _)) if (p < 13) => {
       return p * x;
       return p * x;
     }
     }
-    case (Int: p, auto: _) if (p > 3) => {
+    case (Int p, auto _) if (p > 3) => {
       return p * Pi;
       return p * Pi;
     }
     }
     default => {
     default => {
@@ -70,7 +70,7 @@ value, and execute that block. If none match, then it executes the default
 block.
 block.
 
 
 Each `case` contains a pattern. The first part is a value pattern
 Each `case` contains a pattern. The first part is a value pattern
-(`(Int: p, auto: _)` for example) followed by an optional boolean predicate
+(`(Int p, auto _)` for example) followed by an optional boolean predicate
 introduced by the `if` keyword. The value pattern has to match, and then the
 introduced by the `if` keyword. The value pattern has to match, and then the
 predicate has to evaluate to true for the overall pattern to match. Value
 predicate has to evaluate to true for the overall pattern to match. Value
 patterns can be composed of the following:
 patterns can be composed of the following:
@@ -80,14 +80,13 @@ patterns can be composed of the following:
     identifier to bind to the value or the special identifier `_` to discard the
     identifier to bind to the value or the special identifier `_` to discard the
     value once matched.
     value once matched.
 -   A destructuring pattern containing a sequence of value patterns
 -   A destructuring pattern containing a sequence of value patterns
-    (`(Float: x, Float: y)`) which match against tuples and tuple like values by
+    (`(Float x, Float y)`) which match against tuples and tuple like values by
     recursively matching on their elements.
     recursively matching on their elements.
 -   An unwrapping pattern containing a nested value pattern which matches
 -   An unwrapping pattern containing a nested value pattern which matches
     against a variant or variant-like value by unwrapping it.
     against a variant or variant-like value by unwrapping it.
 
 
 In order to match a value, whatever is specified in the pattern must match.
 In order to match a value, whatever is specified in the pattern must match.
-Using `auto` for a type will always match, making `auto: _` the wildcard
-pattern.
+Using `auto` for a type will always match, making `auto _` the wildcard pattern.
 
 
 ### Pattern matching in local variables
 ### Pattern matching in local variables
 
 
@@ -99,7 +98,7 @@ directly.
 ```
 ```
 fn Bar() -> (Int, (Float, Float));
 fn Bar() -> (Int, (Float, Float));
 fn Foo() -> Int {
 fn Foo() -> Int {
-  var (Int: p, auto: _) = Bar();
+  var (Int p, auto _) = Bar();
   return p;
   return p;
 }
 }
 ```
 ```

+ 8 - 8
docs/design/structs.md

@@ -36,11 +36,11 @@ structuring data:
 
 
 ```
 ```
 struct Widget {
 struct Widget {
-  var Int: x;
-  var Int: y;
-  var Int: z;
+  var Int x;
+  var Int y;
+  var Int z;
 
 
-  var String: payload;
+  var String payload;
 }
 }
 ```
 ```
 
 
@@ -50,18 +50,18 @@ often using different syntax:
 ```
 ```
 struct AdvancedWidget {
 struct AdvancedWidget {
   // Do a thing!
   // Do a thing!
-  fn DoSomething(AdvancedWidget: self, Int: x, Int: y);
+  fn DoSomething(AdvancedWidget self, Int x, Int y);
 
 
   // A nested type.
   // A nested type.
   struct NestedType {
   struct NestedType {
     // ...
     // ...
   }
   }
 
 
-  private var Int: x;
-  private var Int: y;
+  private var Int x;
+  private var Int y;
 }
 }
 
 
-fn Foo(AdvancedWidget: thing) {
+fn Foo(AdvancedWidget thing) {
   thing.DoSomething(1, 2);
   thing.DoSomething(1, 2);
 }
 }
 ```
 ```

+ 2 - 2
docs/design/syntactic_conventions.md

@@ -26,7 +26,7 @@ update as appropriate.
 
 
 ## Overview
 ## Overview
 
 
-Right now we expect variable syntax like: `Int: x`.
+Right now we expect variable syntax like: `Int x`.
 
 
 There are probably other syntactic conventions that can be added here, too.
 There are probably other syntactic conventions that can be added here, too.
 
 
@@ -45,7 +45,7 @@ One very important consideration here is the fundamental approach to type
 inference. Languages which use the syntax `<identifier>: <type>` typically allow
 inference. Languages which use the syntax `<identifier>: <type>` typically allow
 completely omitting the colon and the type to signify inference. With C++,
 completely omitting the colon and the type to signify inference. With C++,
 inference is achieved with a placeholder keyword `auto`, and Carbon is currently
 inference is achieved with a placeholder keyword `auto`, and Carbon is currently
-being consistent there as well with `auto: <identifier>`. For languages which
+being consistent there as well with `auto <identifier>`. For languages which
 simply allow omission, this seems an intentional incentive to encourage
 simply allow omission, this seems an intentional incentive to encourage
 inference. On the other hand, there has been strong advocacy in the C++
 inference. On the other hand, there has been strong advocacy in the C++
 community to not overly rely on inference and to write the explicit type
 community to not overly rely on inference and to write the explicit type

+ 6 - 6
docs/design/templates.md

@@ -44,10 +44,10 @@ are subject to full instantiation -- other parameters will be type checked and
 bound early to the extent possible. For example:
 bound early to the extent possible. For example:
 
 
 ```
 ```
-struct Stack(Type:$$ T) {
-  var Array(T): storage;
+struct Stack(Type$$ T) {
+  var Array(T) storage;
 
 
-  fn Push(T: value);
+  fn Push(T value);
   fn Pop() -> T;
   fn Pop() -> T;
 }
 }
 ```
 ```
@@ -67,12 +67,12 @@ arguments. The runtime call then passes the remaining arguments to the resulting
 complete definition.
 complete definition.
 
 
 ```
 ```
-fn Convert[Type:$$ T](T: source, Type:$$ U) -> U {
-  var U: converted = source;
+fn Convert[Type$$ T](T source, Type$$ U) -> U {
+  var U converted = source;
   return converted;
   return converted;
 }
 }
 
 
-fn Foo(Int: i) -> Float {
+fn Foo(Int i) -> Float {
   // Instantiates with the `T` implicit argument set to `Int` and the `U`
   // Instantiates with the `T` implicit argument set to `Int` and the `U`
   // explicit argument set to `Float`, then calls with the runtime value `i`.
   // explicit argument set to `Float`, then calls with the runtime value `i`.
   return Convert(i, Float);
   return Convert(i, Float);

+ 6 - 6
docs/design/tuples.md

@@ -34,7 +34,7 @@ The primary composite type involves simple aggregation of other types as a tuple
 (called a "product type" in formal type theory):
 (called a "product type" in formal type theory):
 
 
 ```
 ```
-fn DoubleBoth(Int: x, Int: y) -> (Int, Int) {
+fn DoubleBoth(Int x, Int y) -> (Int, Int) {
   return (2 * x, 2 * y);
   return (2 * x, 2 * y);
 }
 }
 ```
 ```
@@ -50,8 +50,8 @@ of types.
 Element access uses subscript syntax:
 Element access uses subscript syntax:
 
 
 ```
 ```
-fn Bar(Int: x, Int: y) -> Int {
-  var (Int, Int): t = (x, y);
+fn Bar(Int x, Int y) -> Int {
+  var (Int, Int) t = (x, y);
   return t[0] + t[1];
   return t[0] + t[1];
 }
 }
 ```
 ```
@@ -59,9 +59,9 @@ fn Bar(Int: x, Int: y) -> Int {
 Tuples also support multiple indices and slicing to restructure tuple elements:
 Tuples also support multiple indices and slicing to restructure tuple elements:
 
 
 ```
 ```
-fn Baz(Int: x, Int: y, Int: z) -> (Int, Int) {
-  var (Int, Int, Int): t1 = (x, y, z);
-  var (Int, Int, Int): t2 = t1[(2, 1, 0)];
+fn Baz(Int x, Int y, Int z) -> (Int, Int) {
+  var (Int, Int, Int) t1 = (x, y, z);
+  var (Int, Int, Int) t2 = t1[(2, 1, 0)];
   return t2[0 .. 2];
   return t2[0 .. 2];
 }
 }
 ```
 ```

+ 2 - 2
docs/design/variables.md

@@ -35,7 +35,7 @@ For example:
 
 
 ```
 ```
 fn Foo() {
 fn Foo() {
-  var Int: x = 42;
+  var Int x = 42;
 }
 }
 ```
 ```
 
 
@@ -52,7 +52,7 @@ Constants will use template-like syntax for declarations. For example, a simple
 integer constant looks like:
 integer constant looks like:
 
 
 ```carbon
 ```carbon
-var Int:$$ MyVal = 42;
+var Int$$ MyVal = 42;
 ```
 ```
 
 
 ## Alternatives
 ## Alternatives