From 87f4e36ce7d7dffbf1f2a869f3014321f6cfff3c Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Fri, 4 Nov 2016 12:38:53 -0700 Subject: [PATCH] Revert "spec: add new language for alias declarations" This reverts commit aff37662d1f70f2bf9e47b4f962e85521e7c18d1. Reason: Decision to back out current alias implementation. https://github.com/golang/go/issues/16339#issuecomment-258527920 Fixes #16339. Fixes #17746. Fixes #17784. Change-Id: I5737b830d7f6fb79cf36f26403b4ad8533ba1dfe Reviewed-on: https://go-review.googlesource.com/32813 Reviewed-by: Russ Cox Reviewed-by: Rob Pike --- doc/go_spec.html | 75 ++++-------------------------------------------- 1 file changed, 6 insertions(+), 69 deletions(-) diff --git a/doc/go_spec.html b/doc/go_spec.html index 0819b758e6..934bf5db85 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -1,6 +1,6 @@ @@ -1726,12 +1726,8 @@ the left is bound to the value of the nth expression on the right.

-

-For constant aliases, see the section on alias declarations. -

-
-ConstDecl      = "const" ( ConstSpec | AliasSpec | "(" { ( ConstSpec | AliasSpec ) ";" } ")" ) .
+ConstDecl      = "const" ( ConstSpec | "(" { ConstSpec ";" } ")" ) .
 ConstSpec      = IdentifierList [ [ Type ] "=" ExpressionList ] .
 
 IdentifierList = identifier { "," identifier } .
@@ -1850,12 +1846,8 @@ and operations defined for the existing type are also defined for the new type.
 The new type is different from the existing type.
 

-

-For type aliases, see the section on alias declarations. -

-
-TypeDecl     = "type" ( TypeSpec | AliasSpec | "(" { ( TypeSpec | AliasSpec ) ";" } ")" ) .
+TypeDecl     = "type" ( TypeSpec | "(" { TypeSpec ";" } ")" ) .
 TypeSpec     = identifier Type .
 
@@ -1936,12 +1928,8 @@ A variable declaration creates one or more variables, binds corresponding identifiers to them, and gives each a type and an initial value.

-

-For variable aliases, see the section on alias declarations. -

-
-VarDecl     = "var" ( VarSpec | AliasSpec | "(" { ( VarSpec | AliasSpec ) ";" } ")" ) .
+VarDecl     = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .
 VarSpec     = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
 
@@ -1988,7 +1976,6 @@ inside a function body if the variable is never used.

-

Short variable declarations

@@ -2019,7 +2006,7 @@ _, y, _ := coord(p) // coord() returns three values; only interested in y coord

Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block -(or the parameter lists if the block is the function body) with the same type, +(or the parameter lists if the block is the function body) with the same type, and at least one of the non-blank variables is new. As a consequence, redeclaration can only appear in a multi-variable short declaration. Redeclaration does not introduce a new variable; it just assigns a new value to the original. @@ -2047,12 +2034,8 @@ A function declaration binds an identifier, the function name, to a function.

-

-For function aliases, see the section on alias declarations. -

-
-FunctionDecl = "func" ( FunctionName ( Function | Signature ) ) | AliasSpec .
+FunctionDecl = "func" FunctionName ( Function | Signature ) .
 FunctionName = identifier .
 Function     = Signature FunctionBody .
 FunctionBody = Block .
@@ -2165,52 +2148,6 @@ However, a function declared this way is not a method.
 

-

Alias declarations

- -

-An alias declaration binds an identifier, the alias, to a -constant, -type, -variable, or -function -denoted by a qualified identifier and -declared in a different package. -

- -
-AliasSpec = identifier "=>" QualifiedIdent .
-
- -

-The effect of referring to a constant, type, variable, or function by an alias -is indistinguishable from referring to it by its original name. -For example, the type denoted by a type alias and the aliased type are -identical. -

- -

-An alias declaration may appear only as a form of constant, type, variable, -or function declaration at the package level, and the aliased entity must be -a constant, type, variable, or function respectively. Alias declarations inside -functions are not permitted. -

- -
-const (
-	G  =  6.67408e-11      // regular and alias declarations may be grouped
-	Pi => math.Pi          // same effect as: Pi = math.Pi
-)
-
-type Struct => types.Struct    // re-export of types.Struct
-
-func sin => math.Sin           // non-exported shortcut for frequently used function
-
- -

-An alias declaration may not refer to package unsafe. -

- -

Expressions