On Wed, Jan 29, 2020 at 12:57 PM Nigel Tao <nigel...@golang.org> wrote:

> For example, the https://golang.org/pkg/io/#LimitedReader struct just
> exports its fields, and you use it like this
> (https://go.googlesource.com/go/+/refs/heads/master/src/io/io_test.go#39).
> There is no io.NewLimitedReader function.
>

Nit: It's not called that way, but there is
<https://golang.org/pkg/io/#LimitReader>.


>
>
> > True iterators are felt by their absence and would be easy to add.
>
> If you really want lazy lists, I'd use a generating function (a
> closure) instead of slices. It seems to me that that's what you
> discuss in your "Iterator variant A" example, so I'm not exactly sure
> what you're asking for? New rules for the built-in "range" keyword??
> But iteration can already be:
>
> ```
> it := foobar.iterator()
> for x := it(); x != nil; x = it() {
>   etc(x)
> }
> ```
>
> which doesn't seem so onerous to require changing the language. To map
> a function f isn't as terse as a Python list comprehension, but it's
> still easy:
>
> ```
> it := foobar.iterator()
> for x := it(); x != nil; x = it() {
>   fx = f(x)
>   etc(fx)
> }
> ```
>
>
> > A technical writer with an outside-in view of the language should be
> hired on to do an edit pass and reorganization of the documents.
>
> Out of curiosity, have you looked at "The Go Programming Language"
> book by Donovan and Kernighan? It's the same K as in K&R's "The C
> Programming Language", which is generally regarded as excellent
> language documentation.
>
> On a related point:
>
> > I got substantial help understanding interfaces from an old blog post by
> Ian Lance Taylor
>
> If it's https://research.swtch.com/interfaces then the blog post
> author is Russ Cox, not Ian Lance Taylor.
>
>
> > Lookbehinds should be added to the regexp library.
>
> See https://groups.google.com/d/msg/golang-nuts/7qgSDWPIh_E/OHTAm4wRZL0J
>
>
> Other thoughts below...
>
> ----
>
> The idiomatic form of
> ```
> switch child.(type) {
>   case *Commit:
>     successorBranches.Add(child.(Commit).branch)
> }
> ```
> is:
> ```
> // Yes, the inner 'child' deliberately shadows the outer 'child'.
> switch child := child.(type) {
>   case *Commit:
>     // Here, 'child' has the concrete type, not the interface type.
>     successorBranches.Add(child.branch)
> }
> ```
>
> ----
>
> ```
> func pipeline(source T) error {
> {
> result1, err1 := transform1(source)
> if err1 != nil {
>   return err
> }
>
> result2, err2 := transform2(result1)
> if err2 != nil {
>   return err
> }
>
> result3, err3 := transform3(result2)
> if err3 != nil {
>   return err
> }
>
> return nil
> }
> ```
>
> Is indeed "eyeball friction". That's the motivation for
> https://github.com/golang/proposal/blob/master/design/32437-try-builtin.md
> ,
> which would make it:
>
> ```
> func pipeline(source T) error {
> {
> result1 := try transform1(source)
> result2 := try transform2(result1)
> result3 := try transform3(result2)
> return nil
> }
> ```
>
> For much, much more discussion (too much) see
> https://github.com/golang/go/issues/32437
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/CAOeFMNUyWOXpFo6w8DL%3D7WMNGjXAvCc-rd8uSH8DXPyy9cY5zg%40mail.gmail.com
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFNAxNOfCHJ4FrPb_hzMjebjLkn%3Dzq8YrZbSZ2osrtm9Q%40mail.gmail.com.

Reply via email to