content: generics-proposal: new blog post

Change-Id: I0b69f26ac60ddc2509d2e15cca091f7fa949bf62
Reviewed-on: https://go-review.googlesource.com/c/blog/+/283272
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/content/generics-proposal.article b/content/generics-proposal.article
new file mode 100644
index 0000000..c75c3ea
--- /dev/null
+++ b/content/generics-proposal.article
@@ -0,0 +1,79 @@
+# A Proposal for Adding Generics to Go
+12 Jan 2021
+Tags: go2, proposals, generics
+Summary: Generics is entering the language change proposal process
+
+Ian Lance Taylor
+
+## Generics proposal
+
+We’ve filed [a Go language change
+proposal](https://golang.org/issue/43651) to add support for type
+parameters for types and functions, permitting a form of generic
+programming.
+
+## Why generics?
+
+Generics can give us powerful building blocks that let us share code
+and build programs more easily.
+Generic programming means writing functions and data structures where
+some types are left to be specified later.
+For example, you can write a function that operates on a slice of some
+arbitrary data type, where the actual data type is only specified when
+the function is called.
+Or, you can define a data structure that stores values of any type,
+where the actual type to be stored is specified when you create an
+instance of the data structure.
+
+Since Go was first released in 2009, support for generics has been one
+of the most commonly requested language features.
+You can read more about why generics are useful in 
+[an earlier blog post](https://blog.golang.org/why-generics).
+
+Although generics have clear use cases, fitting them cleanly into a
+language like Go is a difficult task.
+One of the [first (flawed) attempts to add generics to
+Go](https://golang.org/design/15292/2010-06-type-functions) dates back
+all the way to 2010.
+There have been several others over the last decade.
+
+For the last couple of years we’ve been working on a series of design
+drafts that have culminated in [a design based on type
+parameters](https://golang.org/design/go2draft-type-parameters).
+This design draft has had a lot of input from the Go programming
+community, and many people have experimented with it using the
+[generics playground](https://go2goplay.golang.org) described in [an
+earlier blog post](https://blog.golang.org/generics-next-step).
+Ian Lance Taylor gave [a talk at GopherCon
+2019](https://www.youtube.com/watch?v=WzgLqE-3IhY)
+about why to add generics and the strategy we are now following.
+Robert Griesemer gave [a follow-up talk about changes in the design,
+and the implementation, at GopherCon
+2020](https://www.youtube.com/watch?v=TborQFPY2IM).
+The language changes are fully backward compatible, so existing Go
+programs will continue to work exactly as they do today.
+We have reached the point where we think that the design draft is good
+enough, and simple enough, to propose adding it to Go.
+
+## What happens now?
+
+The [language change proposal process](https://golang.org/s/proposal)
+is how we make changes to the Go language.
+We have now [started this process](https://golang.org/issue/NNNNN)
+to add generics to a future version of Go.
+We invite substantive criticisms and comments, but please try to avoid
+repeating earlier comments, and please try to [avoid simple plus-one
+and minus-one comments](https://golang.org/wiki/NoPlusOne).
+Instead, add thumbs-up/thumbs-down emoji reactions to comments with
+which you agree or disagree, or to the proposal as a whole.
+
+As with all language change proposals, our goal is to drive toward a
+consensus to either add generics to the language or let the proposal
+drop.
+We understand that for a change of this magnitude it will be
+impossible to make everybody in the Go community happy, but we intend
+to get to a decision that everybody is willing to accept.
+
+If the proposal is accepted, our goal will be to have a complete,
+though perhaps not fully optimized, implementation for people to try
+by the end of the year, perhaps as part of the Go 1.18 betas.