Go <=> Ruby
 a selection of odd lightning talks



            @feyeleanor

http://slides.games-with-brains.net/
The Wild-Eyed
  Screamer
@feyeleanor
realtime
@feyeleanor
realtime

net working
@feyeleanor
realtime

net working

unix
@feyeleanor
realtime

net working

unix

languages
@feyeleanor
realtime

net working

unix

languages

virtual machines
Hacker 101
this presentation contains code
Hacker 101
this presentation contains code
that code is probably broken
Hacker 101
this presentation contains code
that code is probably broken
if this bothers you - fix it
Hacker 101
this presentation contains code
that code is probably broken
if this bothers you - fix it
it’s called a learning experience
Hacker 101
this presentation contains code
that code is probably broken
if this bothers you - fix it
it’s called a learning experience
and will make you a better persontm
Google Go
it’s not just for Google
meet Gordon
he’s a gopher
of very few words
who lives at google
package main

import "fmt"

const HELLO string = "hello"
var WORLD string = "world"

func main() {
	    fmt.Println(HELLO, WORLD)
}
package main

import "fmt"

const HELLO string = "hello"
var WORLD string = "world"

func main() {
	    fmt.Println(HELLO, WORLD)
}
package main

import "fmt"

const HELLO string = "hello"
var WORLD string = "world"

func main() {
	    fmt.Println(HELLO, WORLD)
}
package main

import "fmt"

const HELLO string = "hello"
var WORLD string = "world"

func main() {
	    fmt.Println(HELLO, WORLD)
}
package
organisation                    import

                           var, const, type
declaration
                 func, interface, map, struct, chan


                                if ... else
               switch ... case ... fallthrough ... default
                             select ... case
control flow                         for
                              for ... range
                           break, continue
                        go, goto, defer, return
boolean, numeric, array

  value
                    structure, interface



reference    pointer, slice, string, map, channel



invocation       function, method, closure
Go                       Ruby

compilation        static AOT            runtime mutable

 memory                     garbage collected

  syntax           minimalist               humanistic

                            strong dynamic
   type
                   embedding               inheritance

 dispatch     procedural invocation      message passing

semantics         statements               expressions
Ruby typing is tricksy
    lies we tell ourself about type
superclass   modules



class        modules


                   message
        instance
superclass   modules



         class        modules


type asserted
                 instance
instance               inherited
  class                  class

           expressed
             type




           modules
instance               inherited
  class                  class

           expressed
             type




           modules
instance               inherited
  class                  class

           expressed
             type




           modules
instance               inherited
  class                  class

           expressed
             type




           modules
class Counter
	    attr_writer	   :count

	    def initialize
	    	    @count = 0
	    end

	   def Tick
	   	    @count += 1
	   end
end

class DoubleCounter < Counter
	    def Tick
	    	    super
	    	    @count += 1
	    end
end

n = new(DoubleCounter)
puts n.Tick
puts n.superclass.Tick
class Counter
	    attr_writer	   :count

	    def initialize
	    	    @count = 0
	    end

	   def Tick
	   	    @count += 1
	   end
end

class DoubleCounter < Counter
	    def Tick
	    	    super
	    	    @count += 1
	    end
end

n = new(DoubleCounter)
puts n.Tick
puts n.superclass.Tick
class Counter
	    attr_writer	   :count

	    def initialize
	    	    @count = 0
	    end

	   def Tick
	   	    @count += 1
	   end
end

class DoubleCounter < Counter
	    def Tick
	    	    super
	    	    @count += 1
	    end
end

n = new(DoubleCounter)
puts n.Tick
puts n.superclass.Tick
class Counter
	    attr_writer	   :count

	    def initialize
	    	    @count = 0
	    end

	   def Tick
	   	    @count += 1
	   end
end

class DoubleCounter < Counter
	    def Tick
	    	    super
	    	    @count += 1
	    end
end

n = new(DoubleCounter)
puts n.Tick
puts n.superclass.Tick
class Counter
	    attr_writer	   :count

	    def initialize
	    	    @count = 0
	    end

	   def Tick
	   	    @count += 1
	   end
end

class DoubleCounter < Counter
	    def Tick
	    	    super
	    	    @count += 1
	    end
end

n = new(DoubleCounter)
puts n.Tick
puts n.superclass.Tick
class Counter
	    attr_writer	   :count

	    def initialize
	    	    @count = 0
	    end

	   def Tick
	   	    @count += 1
	   end
end

class DoubleCounter < Counter
	    def Tick
	    	    super
	    	    @count += 1
	    end
end

n = new(DoubleCounter)
puts n.Tick
puts n.superclass.Tick
down a rabbit hole
instances are their own classes
down a rabbit hole
instances are their own classes
and all classes are mutable at runtime
down a rabbit hole
instances are their own classes
all classes are mutable at runtime
so inheritance pathways can be altered
down a rabbit hole
instances are their own classes
and all classes are mutable at runtime
so inheritance pathways can be altered
making Ruby very flexible
down a rabbit hole
instances are their own classes
and all classes are mutable at runtime
so inheritance pathways can be altered
making Ruby very flexible
at the cost of type uncertainty
down a rabbit hole
instances are their own classes
and all classes are mutable at runtime
so inheritance pathways can be altered
making Ruby very flexible
at the cost of type uncertainty
which really bugs computer scientists
type in Go is                safetm
clearly defined areas of doubt and uncertainty
memory               method
 layout               set

           static
            type




          embedded
           types
memory               method
 layout               set

           static
            type




          embedded
           types
memory               method
 layout               set

           static
            type




          embedded
           types
memory               method
 layout               set

           static
            type




          embedded
           types
package Integer

type Int int

func (i *Int) Add(x int) {
	    *i += Int(x)
}
package Integer

type Int int

func (i *Int) Add(x int) {
	    *i += Int(x)
}
package Integer

type Int int

func (i *Int) Add(x int) {
	    *i += Int(x)
}
package Integer

type Int int

func (i *Int) Add(x int) {
	    *i += Int(x)
}
type Buffer []Int

func (b Buffer) Swap(i, j int) {
	    b[i], b[j] = b[j], b[i]
}

func (b Buffer) Clone() Buffer {
	    s := make(Buffer, len(b))
	    copy(s, b)
	    return s
}

func (b Buffer) Move(i, n int) {
	    if n > len(b) - i {
	    	     n = len(b) - i
	    }
	    segment_to_move := b[:i].Clone()
	    copy(b, b[i:i + n])
	    copy(b[n:i + n], segment_to_move)
}
type Buffer []Int

func (b Buffer) Swap(i, j int) {
	    b[i], b[j] = b[j], b[i]
}

func (b Buffer) Clone() Buffer {
	    s := make(Buffer, len(b))
	    copy(s, b)
	    return s
}

func (b Buffer) Move(i, n int) {
	    if n > len(b) - i {
	    	     n = len(b) - i
	    }
	    segment_to_move := b[:i].Clone()
	    copy(b, b[i:i + n])
	    copy(b[n:i + n], segment_to_move)
}
type Buffer []Int

func (b Buffer) Swap(i, j int) {
	    b[i], b[j] = b[j], b[i]
}

func (b Buffer) Clone() Buffer {
	    s := make(Buffer, len(b))
	    copy(s, b)
	    return s
}

func (b Buffer) Move(i, n int) {
	    if n > len(b) - i {
	    	     n = len(b) - i
	    }
	    segment_to_move := b[:i].Clone()
	    copy(b, b[i:i + n])
	    copy(b[n:i + n], segment_to_move)
}
package main

import "fmt"
import "Integer"

func main() {
	    i := Integer.Buffer{0, 1, 2, 3, 4, 5}
	    b := i.Clone()
	    b.Swap(1, 2)
	    b.Move(3, 2)
	    b[0].Add(3)                             produces:
	    fmt.Printf("b[0:2] = %vn", b[:2])         b[0:2] = [6 4]
}
package main

import "fmt"
import "Integer"

func main() {
	    i := Integer.Buffer{0, 1, 2, 3, 4, 5}
	    b := i.Clone()
	    b.Swap(1, 2)
	    b.Move(3, 2)
	    b[0].Add(3)                             produces:

    fmt.Printf(“b[0:2] = %vn”, b[:2])         b[0:2] = [6 4]
}
package main

import "fmt"
import "Integer"

func main() {
	    i := Integer.Buffer{0, 1, 2, 3, 4, 5}
	    b := i.Clone()
	    b.Swap(1, 2)
	    b.Move(3, 2)
	    b[0].Add(3)                             produces:
	    fmt.Printf("b[0:2] = %vn", b[:2])         b[0:2] = [6 4]
}
package main

import "fmt"
import "Integer"

func main() {
	    i := Integer.Buffer{0, 1, 2, 3, 4, 5}
	    b := i.Clone()
	    b.Swap(1, 2)
	    b.Move(3, 2)
	    b[0].Add(3)                             produces:
	    fmt.Printf("b[0:2] = %vn", b[:2])         b[0:2] = [6 4]
}
package main

import "fmt"
import "Integer"

func main() {
	    i := Integer.Buffer{0, 1, 2, 3, 4, 5}
	    b := i.Clone()
	    b.Swap(1, 2)
	    b.Move(3, 2)
	    b[0].Add(3)                             produces:
	    fmt.Printf("b[0:2] = %vn", b[:2])         b[0:2] = [6 4]
}
package Vector
import . "Integer"

type Vector struct {
	    Buffer
}

func (v *Vector) Clone() *Vector {
	    return &Vector{v.Buffer.Clone()}
}

func (v *Vector) Slice(i, j int) Buffer {
	    return v.Buffer[i:j]
}
package Vector
import . "Integer"

type Vector struct {
	    Buffer
}

func (v *Vector) Clone() *Vector {
	    return &Vector{v.Buffer.Clone()}
}

func (v *Vector) Slice(i, j int) Buffer {
	    return v.Buffer[i:j]
}
package Vector
import . "Integer"

type Vector struct {
	    Buffer
}

func (v *Vector) Clone() *Vector {
	    return &Vector{v.Buffer.Clone()}
}

func (v *Vector) Slice(i, j int) Buffer {
	    return v.Buffer[i:j]
}
package Vector
import . "Integer"

type Vector struct {
	    Buffer
}

func (v *Vector) Clone() *Vector {
	    return &Vector{v.Buffer.Clone()}
}

func (v *Vector) Slice(i, j int) Buffer {
	    return v.Buffer[i:j]
}
package Vector
import . "Integer"

type Vector struct {
	    Buffer
}

func (v *Vector) Clone() *Vector {
	    return &Vector{v.Buffer.Clone()}
}

func (v *Vector) Slice(i, j int) Buffer {
	    return v.Buffer[i:j]
}
type Adder interface {
	    Add(j int)
	    Subtract(j int)
	    Result() interface{}
	    Reset()
}
type Adder interface {
	    Add(j int)
	    Subtract(j int)
	    Result() interface{}
	    Reset()
}
type Adder interface {
	    Add(j int)
	    Subtract(j int)
	    Result() interface{}
	    Reset()
}
type IAdder int

func (i IAdder) Add(j int) {
	    i[0] += i[j]
}

func (i IAdder) Subtract(j int) {
	    i[0] -= i[j]
}

func (i IAdder) Result() interface{} {
	    return i[0]
}

func (i IAdder) Reset() {
	    i[0] = *new(int)
}

func (i IAdder) Increment() {
	    i[0]++
}
type IAdder int

func (i IAdder) Add(j int) {
	    i[0] += i[j]
}

func (i IAdder) Subtract(j int) {
	    i[0] -= i[j]
}

func (i IAdder) Result() interface{} {
	    return i[0]
}

func (i IAdder) Reset() {
	    i[0] = *new(int)
}

func (i IAdder) Increment() {
	    i[0]++
}
type IAdder int

func (i IAdder) Add(j int) {
	    i[0] += i[j]
}

func (i IAdder) Subtract(j int) {
	    i[0] -= i[j]
}

func (i IAdder) Result() interface{} {
	    return i[0]
}

func (i IAdder) Reset() {
	    i[0] = *new(int)
}

func (i IAdder) Increment() {
	    i[0]++
}
type FAdder []float32

func (f FAdder) Add(j int) {
	    f[0] += f[j]
}

func (f FAdder) Subtract(j int) {
	    f[0] -= f[j]
}

func (f FAdder) Result() interface{} {
	    return f[0]
}

func (f FAdder) Reset() {
	    f[0] = 0
}
type FAdder []float32

func (f FAdder) Add(j int) {
	    f[0] += f[j]
}

func (f FAdder) Subtract(j int) {
	    f[0] -= f[j]
}

func (f FAdder) Result() interface{} {
	    return f[0]
}

func (f FAdder) Reset() {
	    f[0] = 0
}
type FAdder []float32

func (f FAdder) Add(j int) {
	    f[0] += f[j]
}

func (f FAdder) Subtract(j int) {
	    f[0] -= f[j]
}

func (f FAdder) Result() interface{} {
	    return f[0]
}

func (f FAdder) Reset() {
	    f[0] = 0
}
func TestAdder(t *testing.T) {
	    var a	  Adder

	   a = IAdder{0, 1, 2}
	   a.Add(1)
	   if i.Result().(int) != 1 {
	   	     t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1)
	   }
	   a.Subtract(2)
	   if a.Result().(int) != -1 {
	   	     t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1)
	   }

	   a = FAdder{0.0, 1.0, 2.0}
	   a.Add(1)
	   if a.Result().(float32) != 1.0 {
	   	     t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0)
	   }
}
func TestAdder(t *testing.T) {
	    var a	  Adder

	   a = IAdder{0, 1, 2}
	   a.Add(1)
	   if i.Result().(int) != 1 {
	   	     t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1)
	   }
	   a.Subtract(2)
	   if a.Result().(int) != -1 {
	   	     t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1)
	   }

	   a = FAdder{0.0, 1.0, 2.0}
	   a.Add(1)
	   if a.Result().(float32) != 1.0 {
	   	     t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0)
	   }
}
func TestAdder(t *testing.T) {
	    var a	  Adder

	   a = IAdder{0, 1, 2}
	   a.Add(1)
	   if i.Result().(int) != 1 {
	   	     t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1)
	   }
	   a.Subtract(2)
	   if a.Result().(int) != -1 {
	   	     t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1)
	   }

	   a = FAdder{0.0, 1.0, 2.0}
	   a.Add(1)
	   if a.Result().(float32) != 1.0 {
	   	     t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0)
	   }
}
func TestAdder(t *testing.T) {
	    var a	  Adder

	   a = IAdder{0, 1, 2}
	   a.Add(1)
	   if i.Result().(int) != 1 {
	   	     t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1)
	   }
	   a.Subtract(2)
	   if a.Result().(int) != -1 {
	   	     t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1)
	   }

	   a = FAdder{0.0, 1.0, 2.0}
	   a.Add(1)
	   if a.Result().(float32) != 1.0 {
	   	     t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0)
	   }
}
func TestAdder(t *testing.T) {
	    var a	  Adder

	   a = IAdder{0, 1, 2}
	   a.Add(1)
	   if i.Result().(int) != 1 {
	   	     t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1)
	   }
	   a.Subtract(2)
	   if a.Result().(int) != -1 {
	   	     t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1)
	   }

	   a = FAdder{0.0, 1.0, 2.0}
	   a.Add(1)
	   if a.Result().(float32) != 1.0 {
	   	     t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0)
	   }
}
func TestAdder(t *testing.T) {
	    var a	  Adder

	   a = IAdder{0, 1, 2}
	   a.Add(1)
	   if i.Result().(int) != 1 {
	   	     t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1)
	   }
	   a.Subtract(2)
	   if a.Result().(int) != -1 {
	   	     t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1)
	   }

	   a = FAdder{0.0, 1.0, 2.0}
	   a.Add(1)
	   if a.Result().(float32) != 1.0 {
	   	     t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0)
	   }
}
func TestAdder(t *testing.T) {
	    var a	  Adder

	   a = IAdder{0, 1, 2}
	   a.Add(1)
	   if i.Result().(int) != 1 {
	   	     t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1)
	   }
	   a.Subtract(2)
	   if a.Result().(int) != -1 {
	   	     t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1)
	   }

	   a = FAdder{0.0, 1.0, 2.0}
	   a.Add(1)
	   if a.Result().(float32) != 1.0 {
	   	     t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0)
	   }
}
down a rabbit hole
an object has known static type
down a rabbit hole
an object has known static type
this fixed type is determined at linking
down a rabbit hole
an object has known static type
this fixed type is determined at linking
no new types can be created at runtime
down a rabbit hole
an object has known static type
this fixed type is determined at linking
no new types can be created at runtime
so dynamism is bounded to a fixed set
down a rabbit hole
an object has known static type
this fixed type is determined at linking
no new types can be created at runtime
so dynamism is bounded to this fixed set
and computer scientists are happier
unit tests as REPL
   testing that doesn’t suck
func (b Buffer) Eq(o Buffer) (r bool) {
	    if len(b) == len(o) {
	    	     for i := len(b) - 1; i > 0; i-- {
	    	     	     if b[i] != o[i] {
	    	     	     	     return
	    	     	     }
	    	     }
	    	     r = true
	    }
	    return
}
func (b Buffer) Eq(o Buffer) (r bool) {
	    if len(b) == len(o) {
	    	     for i := len(b) - 1; i > 0; i-- {
	    	     	     if b[i] != o[i] {
	    	     	     	     return
	    	     	     }
	    	     }
	    	     r = true
	    }
	    return
}
func (b Buffer) Eq(o Buffer) (r bool) {
	    if len(b) == len(o) {
	    	     for i := len(b) - 1; i > 0; i-- {
	    	     	     if b[i] != o[i] {
	    	     	     	     return
	    	     	     }
	    	     }
	    	     r = true
	    }
	    return
}
func (b Buffer) Eq(o Buffer) (r bool) {
	    if len(b) == len(o) {
	    	     for i := len(b) - 1; i > 0; i-- {
	    	     	     if b[i] != o[i] {
	    	     	     	     return
	    	     	     }
	    	     }
	    	     r = true
	    }
	    return
}
func (b Buffer) Eq(o Buffer) (r bool) {
	    if len(b) == len(o) {
	    	     for i := len(b) - 1; i > 0; i-- {
	    	     	     if b[i] != o[i] {
	    	     	     	     return
	    	     	     }
	    	     }
	    	     r = true
	    }
	    return
}
func (b Buffer) Eq(o Buffer) (r bool) {
	    if len(b) == len(o) {
	    	     for i := len(b) - 1; i > 0; i-- {
	    	     	     if b[i] != o[i] {
	    	     	     	     return
	    	     	     }
	    	     }
	    	     r = true
	    }
	    return
}
func (b Buffer) Eq(o Buffer) (r bool) {
	    if len(b) == len(o) {
	    	     for i := len(b) - 1; i > 0; i-- {
	    	     	     if b[i] != o[i] {
	    	     	     	     return
	    	     	     }
	    	     }
	    	     r = true
	    }
	    return
}
package Vector

import "testing"

func TestVectorSwap(t *testing.T) {
	    i := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    v := i.Clone()
	    v.Swap(1, 2)
	    r := Vector{Buffer{0, 2, 1, 3, 4, 5}}
	    switch {
	    case !v.Eq(r.Buffer):	 	       fallthrough
	    case !v.Buffer.Eq(r.Buffer):	 t.Fatalf("b[0:5] = %v", v)
	    }
}
package Vector

import "testing"

func TestVectorSwap(t *testing.T) {
	    i := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    v := i.Clone()
	    v.Swap(1, 2)
	    r := Vector{Buffer{0, 2, 1, 3, 4, 5}}
	    switch {
	    case !v.Eq(r.Buffer):	 	       fallthrough
	    case !v.Buffer.Eq(r.Buffer):	 t.Fatalf("b[0:5] = %v", v)
	    }
}
package Vector

import "testing"

func TestVectorSwap(t *testing.T) {
	    i := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    v := i.Clone()
	    v.Swap(1, 2)
	    r := Vector{Buffer{0, 2, 1, 3, 4, 5}}
	    switch {
	    case !v.Eq(r.Buffer):	 	       fallthrough
	    case !v.Buffer.Eq(r.Buffer):	 t.Fatalf("b[0:5] = %v", v)
	    }
}
package Vector

import "testing"

func TestVectorSwap(t *testing.T) {
	    i := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    v := i.Clone()
	    v.Swap(1, 2)
	    r := Vector{Buffer{0, 2, 1, 3, 4, 5}}
	    switch {
	    case !v.Eq(r.Buffer):	 	       fallthrough
	    case !v.Buffer.Eq(r.Buffer):	 t.Fatalf("b[0:5] = %v", v)
	    }
}
package Vector

import "testing"

func TestVectorSwap(t *testing.T) {
	    i := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    v := i.Clone()
	    v.Swap(1, 2)
	    r := Vector{Buffer{0, 2, 1, 3, 4, 5}}
	    switch {
	    case !v.Eq(r.Buffer):	 	       fallthrough
	    case !v.Buffer.Eq(r.Buffer):	 t.Fatalf("b[0:5] = %v", v)
	    }
}
package Vector

import "testing"

func TestVectorSwap(t *testing.T) {
	    i := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    v := i.Clone()
	    v.Swap(1, 2)
	    r := Vector{Buffer{0, 2, 1, 3, 4, 5}}
	    switch {
	    case !v.Eq(r.Buffer):	 	       fallthrough
	    case !v.Buffer.Eq(r.Buffer):	 t.Fatalf("b[0:5] = %v", v)
	    }
}
package Vector

import "testing"

func TestVectorSwap(t *testing.T) {
	    i := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    v := i.Clone()
	    v.Swap(1, 2)
	    r := Vector{Buffer{0, 2, 1, 3, 4, 5}}
	    switch {
	    case !v.Eq(r.Buffer):	 	       fallthrough
	    case !v.Buffer.Eq(r.Buffer):	 t.Fatalf("b[0:5] = %v", v)
	    }
}
package Vector

import "testing"

func TestVectorSwap(t *testing.T) {
	    i := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    v := i.Clone()
	    v.Swap(1, 2)
	    r := Vector{Buffer{0, 2, 1, 3, 4, 5}}
	    switch {
	    case !v.Eq(r.Buffer):	 	       fallthrough
	    case !v.Buffer.Eq(r.Buffer):	 t.Fatalf("b[0:5] = %v", v)
	    }
}
include $(GOROOT)/src/Make.inc

TARG=integer

GOFILES=
	   integer.go
	   vector.go

include $(GOROOT)/src/Make.pkg
package Vector

import "testing"
import "vector"

func BenchmarkVectorClone6(b *testing.B) {
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    for i := 0; i < b.N; i++ {
	    	     _ = v.Clone()
	    }
}

func BenchmarkVectorSwap(b *testing.B) {
	    b.StopTimer()
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    b.StartTimer()
	    for i := 0; i < b.N; i++ {
	    	     v.Swap(1, 2)
	    }
}
package Vector

import "testing"
import "vector"

func BenchmarkVectorClone6(b *testing.B) {
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    for i := 0; i < b.N; i++ {
	    	     _ = v.Clone()
	    }
}

func BenchmarkVectorSwap(b *testing.B) {
	    b.StopTimer()
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    b.StartTimer()
	    for i := 0; i < b.N; i++ {
	    	     v.Swap(1, 2)
	    }
}
package Vector

import "testing"
import "vector"

func BenchmarkVectorClone6(b *testing.B) {
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    for i := 0; i < b.N; i++ {
	    	     _ = v.Clone()
	    }
}

func BenchmarkVectorSwap(b *testing.B) {
	    b.StopTimer()
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    b.StartTimer()
	    for i := 0; i < b.N; i++ {
	    	     v.Swap(1, 2)
	    }
}
package Vector

import "testing"
import "vector"

func BenchmarkVectorClone6(b *testing.B) {
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    for i := 0; i < b.N; i++ {
	    	     _ = v.Clone()
	    }
}

func BenchmarkVectorSwap(b *testing.B) {
	    b.StopTimer()
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    b.StartTimer()
	    for i := 0; i < b.N; i++ {
	    	     v.Swap(1, 2)
	    }
}
package Vector

import "testing"
import "vector"

func BenchmarkVectorClone6(b *testing.B) {
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    for i := 0; i < b.N; i++ {
	    	     _ = v.Clone()
	    }
}

func BenchmarkVectorSwap(b *testing.B) {
	    b.StopTimer()
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    b.StartTimer()
	    for i := 0; i < b.N; i++ {
	    	     v.Swap(1, 2)
	    }
}
package Vector

import "testing"
import "vector"

func BenchmarkVectorClone6(b *testing.B) {
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    for i := 0; i < b.N; i++ {
	    	     _ = v.Clone()
	    }
}

func BenchmarkVectorSwap(b *testing.B) {
	    b.StopTimer()
	    v := Vector{Buffer{0, 1, 2, 3, 4, 5}}
	    b.StartTimer()
	    for i := 0; i < b.N; i++ {
	    	     v.Swap(1, 2)
	    }
}
$ gotest -bench="Benchmark"
rm -f _test/scripts.a
6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go
embedded_typing_benchmark_test.go embedded_typing_test.go
rm -f _test/scripts.a
gopack grc _test/scripts.a _gotest_.6
PASS
integer.BenchmarkVectorSwap	 200000000	               8 ns/op
integer.BenchmarkVectorClone6	 10000000	             300 ns/op
$ gotest -bench="Benchmark"
rm -f _test/scripts.a
6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go
embedded_typing_benchmark_test.go embedded_typing_test.go
rm -f _test/scripts.a
gopack grc _test/scripts.a _gotest_.6
PASS
integer.BenchmarkVectorSwap	 200000000	               8 ns/op
integer.BenchmarkVectorClone6	 10000000	             300 ns/op
$ gotest -bench="Benchmark"
rm -f _test/scripts.a
6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go
embedded_typing_benchmark_test.go embedded_typing_test.go
rm -f _test/scripts.a
gopack grc _test/scripts.a _gotest_.6
PASS
integer.BenchmarkVectorSwap	 200000000	               8 ns/op
integer.BenchmarkVectorClone6	 10000000	             300 ns/op
$ gotest -bench="Benchmark"
rm -f _test/scripts.a
6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go
embedded_typing_benchmark_test.go embedded_typing_test.go
rm -f _test/scripts.a
gopack grc _test/scripts.a _gotest_.6
PASS
integer.BenchmarkVectorSwap	 200000000	               8 ns/op
integer.BenchmarkVectorClone6	 10000000	             300 ns/op
$ gotest -bench="Benchmark"
rm -f _test/scripts.a
6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go
embedded_typing_benchmark_test.go embedded_typing_test.go
rm -f _test/scripts.a
gopack grc _test/scripts.a _gotest_.6
PASS
integer.BenchmarkVectorSwap	 200000000	               8 ns/op
integer.BenchmarkVectorClone6	 10000000	             300 ns/op
exceptional fun
because Go doesn’t have exceptions - honest!
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func Throw() {
	    panic(nil)
}

func Catch(f func()) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     panic(x)
	    	    }
	    }()
	    f()
}

func CatchAll(f func()) {
	    defer func() {
	    	    recover()
	    }()
	    f()
}
func throwsPanic(f func()) (b bool) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     b = true
	    	    }
	    }()
	    f()
	    return
}
func throwsPanic(f func()) (b bool) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     b = true
	    	    }
	    }()
	    f()
	    return
}
func throwsPanic(f func()) (b bool) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     b = true
	    	    }
	    }()
	    f()
	    return
}
func throwsPanic(f func()) (b bool) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     b = true
	    	    }
	    }()
	    f()
	    return
}
func throwsPanic(f func()) (b bool) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     b = true
	    	    }
	    }()
	    f()
	    return
}
func throwsPanic(f func()) (b bool) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     b = true
	    	    }
	    }()
	    f()
	    return
}
func throwsPanic(f func()) (b bool) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     b = true
	    	    }
	    }()
	    f()
	    return
}
func throwsPanic(f func()) (b bool) {
	    defer func() {
	    	    if x := recover(); x != nil {
	    	    	     b = true
	    	    }
	    }()
	    f()
	    return
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
import "fmt"
import "path"
import "runtime"

func StackTrace() {
	    var stack_trace	   []uintptr
	    var my_path	 	     string

	   runtime.Callers(1, stack_trace)
	   for i, u := range stack_trace {
	   	     if f := runtime.FuncForPC(u); f != nil {
	   	     	     file, line := f.FileLine(u)
	   	     	     switch filepath, filename := path.Split(file); {
	   	     	     case i == 0:	 	      	    	 my_path = filepath
	   	     	     case my_path != filepath:	 fmt.Printf("%v:%v", filename, line)
	   	     	     }
	   	     } else {
	   	     	     fmt.Println("(unknown)")
	   	     }
	   }
}
reflections on Go
dynamism through run-time type manipulation
package generalise

import "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := reflect.ValueOf(i); v.Kind() {
	    case reflect.Slice:	 	    l := v.Cap()
	    	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    	    }
	    	    	    	    	    	    n = reflect.MakeSlice(v.Type(), l, l).Interface()

	   case reflect.Map:	 	      n = reflect.MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := reflect.ValueOf(i); v.Kind() {
	    case reflect.Slice:	 	    l := v.Cap()
	    	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    	    }
	    	    	    	    	    	    n = reflect.MakeSlice(v.Type(), l, l).Interface()

	   case reflect.Map:	 	      n = reflect.MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
package generalise

import . "reflect"

func Allocate(i interface{}, limit... int) (n interface{}) {
	    switch v := ValueOf(i); v.Kind() {
	    case Slice:	 	      l := v.Cap()
	    	    	    	    	    if len(limit) > 0 {
	    	    	    	    	    	     l = limit[0]
	    	    	    	    	    }
	    	    	    	    	    n = MakeSlice(v.Type(), l, l).Interface()

	   case Map:	       	   n = MakeMap(v.Type()).Interface()
	   }
	   return
}
func TestAllocate(t *testing.T) {
	    var s2 []int

	   s1 := []int{0, 1, 2}
	   m := map[int] int{1: 1, 2: 2, 3: 3}
	   switch {
	   case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }):
	   	    t.Fatal("Unable to allocate new slice")

	   case len(s2) != 1 || cap(s2) != 1:
	   	    t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2)

	   case throwsPanic(func() { Allocate(m) }):
	   	    t.Fatal("Unable to allocate new map")
	   }
}
func TestAllocate(t *testing.T) {
	    var s2 []int

	   s1 := []int{0, 1, 2}
	   m := map[int] int{1: 1, 2: 2, 3: 3}
	   switch {
	   case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }):
	   	    t.Fatal("Unable to allocate new slice")

	   case len(s2) != 1 || cap(s2) != 1:
	   	    t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2)

	   case throwsPanic(func() { Allocate(m) }):
	   	    t.Fatal("Unable to allocate new map")
	   }
}
func TestAllocate(t *testing.T) {
	    var s2 []int

	   s1 := []int{0, 1, 2}
	   m := map[int] int{1: 1, 2: 2, 3: 3}
	   switch {
	   case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }):
	   	    t.Fatal("Unable to allocate new slice")

	   case len(s2) != 1 || cap(s2) != 1:
	   	    t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2)

	   case throwsPanic(func() { Allocate(m) }):
	   	    t.Fatal("Unable to allocate new map")
	   }
}
func TestAllocate(t *testing.T) {
	    var s2 []int

	   s1 := []int{0, 1, 2}
	   m := map[int] int{1: 1, 2: 2, 3: 3}
	   switch {
	   case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }):
	   	    t.Fatal("Unable to allocate new slice")

	   case len(s2) != 1 || cap(s2) != 1:
	   	    t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2)

	   case throwsPanic(func() { Allocate(m) }):
	   	    t.Fatal("Unable to allocate new map")
	   }
}
func TestAllocate(t *testing.T) {
	    var s2 []int

	   s1 := []int{0, 1, 2}
	   m := map[int] int{1: 1, 2: 2, 3: 3}
	   switch {
	   case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }):
	   	    t.Fatal("Unable to allocate new slice")

	   case len(s2) != 1 || cap(s2) != 1:
	   	    t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2)

	   case throwsPanic(func() { Allocate(m) }):
	   	    t.Fatal("Unable to allocate new map")
	   }
}
func TestAllocate(t *testing.T) {
	    var s2 []int

	   s1 := []int{0, 1, 2}
	   m := map[int] int{1: 1, 2: 2, 3: 3}
	   switch {
	   case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }):
	   	    t.Fatal("Unable to allocate new slice")

	   case len(s2) != 1 || cap(s2) != 1:
	   	    t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2)

	   case throwsPanic(func() { Allocate(m) }):
	   	    t.Fatal("Unable to allocate new map")
	   }
}
func TestAllocate(t *testing.T) {
	    var s2 []int

	   s1 := []int{0, 1, 2}
	   m := map[int] int{1: 1, 2: 2, 3: 3}
	   switch {
	   case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }):
	   	    t.Fatal("Unable to allocate new slice")

	   case len(s2) != 1 || cap(s2) != 1:
	   	    t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2)

	   case throwsPanic(func() { Allocate(m) }):
	   	    t.Fatal("Unable to allocate new map")
	   }
}
func TestAllocate(t *testing.T) {
	    var s2 []int

	   s1 := []int{0, 1, 2}
	   m := map[int] int{1: 1, 2: 2, 3: 3}
	   switch {
	   case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }):
	   	    t.Fatal("Unable to allocate new slice")

	   case len(s2) != 1 || cap(s2) != 1:
	   	    t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2)

	   case throwsPanic(func() { Allocate(m) }):
	   	    t.Fatal("Unable to allocate new map")
	   }
}
func TestAllocate(t *testing.T) {
	    var s2 []int

	   s1 := []int{0, 1, 2}
	   m := map[int] int{1: 1, 2: 2, 3: 3}
	   switch {
	   case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }):
	   	    t.Fatal("Unable to allocate new slice")

	   case len(s2) != 1 || cap(s2) != 1:
	   	    t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2)

	   case throwsPanic(func() { Allocate(m) }):
	   	    t.Fatal("Unable to allocate new map")
	   }
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
func Duplicate(i interface{}) (clone interface{}) {
	    if clone = Allocate(i); clone != nil {
	    	     switch clone := ValueOf(clone); clone.Kind() {
	    	     case Slice:	 	      	    Copy(clone, ValueOf(i))

	   	    case Map:	     	    	    m := ValueOf(i)
	   	    	    	   	     	    	    for _, k := range m.Keys() {
	   	    	    	   	     	    	    	    clone.SetMapIndex(k, m.MapIndex(k))
	   	    	    	   	     	    	    }
	   	    }
	   }
	   return
}
metallic k.o.
sometimes a bit-buffer is just a bit-buffer
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
package raw

import . "reflect"
import "unsafe"

var _BYTE_SLICE Type = Typeof([]byte(nil))

type MemoryBlock interface {
	    ByteSlice() []byte
}

func valueHeader(v Value) (header *SliceHeader) {
	    if v.IsValid() {
	    	     s := int(v.Type().Size())
	    	     header = &SliceHeader{ v.UnsafeAddr(), s, s }
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func SliceHeader(i interface{}) (Header *SliceHeader, Size, Align int) {
	    switch value := Indirect(ValueOf(i)); value.Kind() {
	    case Slice:	 	      Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr()))
	    	    	    	    	    t := value.Type().Elem()
	    	    	    	    	    Size = int(t.Size())
	    	    	    	    	    Align = t.Align()
	    case Interface:	    Header, Size, Align = SliceHeader(value.Elem())
	    }
	    return
}

func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) {
	    if oldHeader != nil {
	    	     s := float64(oldESize) / float64(newESize)
	    	     h = &SliceHeader{ Data: oldHeader.Data }
	    	     h.Len = int(float64(oldHeader.Len) * s)
	    	     h.Cap = int(float64(oldHeader.Cap) * s)
	    }
	    return
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
func ByteSlice(i interface{}) []byte {
	    switch i := i.(type) {
	    case []byte:	 	      	  	    return i
	    case MemoryBlock:	   	  return i.ByteSlice()
	    }

	   var header *SliceHeader
	   switch v := ValueOf(i); value.Kind() {
	   case Interface, Ptr:	header = valueHeader(v.Elem())

	   case Slice:	   	    	    h, s, _ := SliceHeader(i)
	   	    	    	    	    	    header = Scale(h, s, 1)

	   case String:	 	     	    s := v.Get()
	   	    	    	   	     	    h := *(*StringHeader)(unsafe.Pointer(&s))
	   	    	    	   	     	    header = &SliceHeader{ h.Data, h.Len, h.Len }

	   default:	 	   	   	    header = valueHeader(v)
	   }
	   return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte)
}
go f(){}() / yourself
            /
   map/reduce for all the family
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func() {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-c)           produces:
	   	     }                                 0110011101011010
	   }()
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func() {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-c)           produces:
	   	     }                                 0110011101011010
	   }()
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func() {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-c)           produces:
	   	     }                                 0110011101011010
	   }()
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func() {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-c)           produces:
	   	     }                                 0110011101011010
	   }()
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func() {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-c)           produces:
	   	     }                                 0110011101011010
	   }()
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func() {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-c)           produces:
	   	     }                                 0110011101011010
	   }()
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func() {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-c)           produces:
	   	     }                                 0110011101011010
	   }()
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func(in chan int) {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-in)          produces:
	   	     }                                 0110011101011010
	   }(c)
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func(in chan int) {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-in)          produces:
	   	     }                                 0110011101011010
	   }(c)
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func(in chan int) {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-in)          produces:
	   	     }                                 0110011101011010
	   }(c)
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func(in chan int) {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-in)          produces:
	   	     }                                 0110011101011010
	   }(c)
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func(in chan int) {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-in)          produces:
	   	     }                                 0110011101011010
	   }(c)
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func(in chan int) {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-in)          produces:
	   	     }                                 0110011101011010
	   }(c)
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func(in chan int) {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-in)          produces:
	   	     }                                 0110011101011010
	   }(c)
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
package main
import "fmt"

func main() {
	    var c chan int

	   c = make(chan int)
	   limit := 16
	   go func(in chan int) {
	   	     for i := limit; i > 0; i-- {
	   	     	     fmt.Print(<-in)          produces:
	   	     }                                 0110011101011010
	   }(c)
	   for i := limit; i > 0; i-- {
	   	     select {
	   	     case c <- 0:
	   	     case c <- 1:
	   	     }
	   }
}
func main() {
	    var c chan int

	   c = make(chan int, 16)
	   go func() {
	   	    for i := 16; i > 0; i-- {
	   	    	     fmt.Print(<-c)
	   	    }
	   }()
	   go func() {
	   	    select {                    produces:
	   	    case c <- 0:                   0110011101011010
	   	    case c <- 1:
	   	    }
	   }()
	   for {}
}
func main() {
	    var c chan int

	   c = make(chan int, 16)
	   go func() {
	   	    for i := 16; i > 0; i-- {
	   	    	     fmt.Print(<-c)
	   	    }
	   }()
	   go func() {
	   	    select {                    produces:
	   	    case c <- 0:                   0110011101011010
	   	    case c <- 1:
	   	    }
	   }()
	   for {}
}
func main() {
	    var c chan int

	   c = make(chan int, 16)
	   go func() {
	   	    for i := 16; i > 0; i-- {
	   	    	     fmt.Print(<-c)
	   	    }
	   }()
	   go func() {
	   	    select {                    produces:
	   	    case c <- 0:                   0110011101011010
	   	    case c <- 1:
	   	    }
	   }()
	   for {}
}
func main() {
	    var c chan int

	   c = make(chan int, 16)
	   go func() {
	   	    for i := 16; i > 0; i-- {
	   	    	     fmt.Print(<-c)
	   	    }
	   }()
	   go func() {
	   	    select {                    produces:
	   	    case c <- 0:                   0110011101011010
	   	    case c <- 1:
	   	    }
	   }()
	   for {}
}
package generalise

type SignalSource func(status chan bool)

func Wait(s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    <-done
}

func WaitAll(count int, s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    for i := 0; i < count; i++ {
	    	     <- done
	    }
}
package generalise

type SignalSource func(status chan bool)

func Wait(s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    <-done
}

func WaitAll(count int, s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    for i := 0; i < count; i++ {
	    	     <- done
	    }
}
package generalise

type SignalSource func(status chan bool)

func Wait(s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    <-done
}

func WaitAll(count int, s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    for i := 0; i < count; i++ {
	    	     <- done
	    }
}
package generalise

type SignalSource func(status chan bool)

func Wait(s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    <-done
}

func WaitAll(count int, s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    for i := 0; i < count; i++ {
	    	     <- done
	    }
}
package generalise

type SignalSource func(status chan bool)

func Wait(s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    <-done
}

func WaitAll(count int, s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    for i := 0; i < count; i++ {
	    	     <- done
	    }
}
package generalise

type SignalSource func(status chan bool)

func Wait(s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    <-done
}

func WaitAll(count int, s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    for i := 0; i < count; i++ {
	    	     <- done
	    }
}
package generalise

type SignalSource func(status chan bool)

func Wait(s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    <-done
}

func WaitAll(count int, s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    for i := 0; i < count; i++ {
	    	     <- done
	    }
}
package generalise

type SignalSource func(status chan bool)

func Wait(s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    <-done
}

func WaitAll(count int, s SignalSource) {
	    done := make(chan bool)
	    defer close(done)
	    go s(done)
	    for i := 0; i < count; i++ {
	    	     <- done
	    }
}
type Iteration func(k, x interface{}) bool

func (i Iteration) apply(k, v interface{}, c chan bool) {
	    go func() {
	    	     c <-i(k, v)
	    }()
}

func (f Iteration) Each(c interface{}) {
	    switch c := ValueOf(c); c.Kind() {
	    case Slice:	 	     WaitAll(c.Len(), SignalSource(func(done chan bool) {
	    	     	    	   	   	     for i := 0; i < c.Len(); i++ {
	    	     	    	   	   	     	     f.apply(i, c.Elem(i).Interface(), done) }}))

	   case Map:	     	    WaitAll(c.Len(), SignalSource(func(done chan bool) {
	   	    	   	     	    	   for _, k := range c.Keys() {
	   	    	   	     	    	   	    f.apply(k, c.Elem(k).Interface(), done) }}))
	   }
}
type Iteration func(k, x interface{}) bool

func (i Iteration) apply(k, v interface{}, c chan bool) {
	    go func() {
	    	     c <-i(k, v)
	    }()
}

func (f Iteration) Each(c interface{}) {
	    switch c := ValueOf(c); c.Kind() {
	    case Slice:	 	     WaitAll(c.Len(), SignalSource(func(done chan bool) {
	    	     	    	   	   	     for i := 0; i < c.Len(); i++ {
	    	     	    	   	   	     	     f.apply(i, c.Elem(i).Interface(), done) }}))

	   case Map:	     	    WaitAll(c.Len(), SignalSource(func(done chan bool) {
	   	    	   	     	    	   for _, k := range c.Keys() {
	   	    	   	     	    	   	    f.apply(k, c.Elem(k).Interface(), done) }}))
	   }
}
type Iteration func(k, x interface{}) bool

func (i Iteration) apply(k, v interface{}, c chan bool) {
	    go func() {
	    	     c <-i(k, v)
	    }()
}

func (f Iteration) Each(c interface{}) {
	    switch c := ValueOf(c); c.Kind() {
	    case Slice:	 	     WaitAll(c.Len(), SignalSource(func(done chan bool) {
	    	     	    	   	   	     for i := 0; i < c.Len(); i++ {
	    	     	    	   	   	     	     f.apply(i, c.Elem(i).Interface(), done) }}))

	   case Map:	     	    WaitAll(c.Len(), SignalSource(func(done chan bool) {
	   	    	   	     	    	   for _, k := range c.Keys() {
	   	    	   	     	    	   	    f.apply(k, c.Elem(k).Interface(), done) }}))
	   }
}
type Iteration func(k, x interface{}) bool

func (i Iteration) apply(k, v interface{}, c chan bool) {
	    go func() {
	    	     c <-i(k, v)
	    }()
}

func (f Iteration) Each(c interface{}) {
	    switch c := ValueOf(c); c.Kind() {
	    case Slice:	 	     WaitAll(c.Len(), SignalSource(func(done chan bool) {
	    	     	    	   	   	     for i := 0; i < c.Len(); i++ {
	    	     	    	   	   	     	     f.apply(i, c.Elem(i).Interface(), done) }}))

	   case Map:	     	    WaitAll(c.Len(), SignalSource(func(done chan bool) {
	   	    	   	     	    	   for _, k := range c.Keys() {
	   	    	   	     	    	   	    f.apply(k, c.Elem(k).Interface(), done) }}))
	   }
}
type Iteration func(k, x interface{}) bool

func (i Iteration) apply(k, v interface{}, c chan bool) {
	    go func() {
	    	     c <-i(k, v)
	    }()
}

func (f Iteration) Each(c interface{}) {
	    switch c := ValueOf(c); c.Kind() {
	    case Slice:	 	     WaitAll(c.Len(), SignalSource(func(done chan bool) {
	    	     	    	   	   	     for i := 0; i < c.Len(); i++ {
	    	     	    	   	   	     	     f.apply(i, c.Elem(i).Interface(), done) }}))

	   case Map:	     	    WaitAll(c.Len(), SignalSource(func(done chan bool) {
	   	    	   	     	    	   for _, k := range c.Keys() {
	   	    	   	     	    	   	    f.apply(k, c.Elem(k).Interface(), done) }}))
	   }
}
type Iteration func(k, x interface{}) bool

func (i Iteration) apply(k, v interface{}, c chan bool) {
	    go func() {
	    	     c <-i(k, v)
	    }()
}

func (f Iteration) Each(c interface{}) {
	    switch c := ValueOf(c); c.Kind() {
	    case Slice:	 	     WaitAll(c.Len(), SignalSource(func(done chan bool) {
	    	     	    	   	   	     for i := 0; i < c.Len(); i++ {
	    	     	    	   	   	     	     f.apply(i, c.Elem(i).Interface(), done) }}))

	   case Map:	     	    WaitAll(c.Len(), SignalSource(func(done chan bool) {
	   	    	   	     	    	   for _, k := range c.Keys() {
	   	    	   	     	    	   	    f.apply(k, c.Elem(k).Interface(), done) }}))
	   }
}
type Iteration func(k, x interface{}) bool

func (i Iteration) apply(k, v interface{}, c chan bool) {
	    go func() {
	    	     c <-i(k, v)
	    }()
}

func (f Iteration) Each(c interface{}) {
	    switch c := ValueOf(c); c.Kind() {
	    case Slice:	 	     WaitAll(c.Len(), SignalSource(func(done chan bool) {
	    	     	    	   	   	     for i := 0; i < c.Len(); i++ {
	    	     	    	   	   	     	     f.apply(i, c.Elem(i).Interface(), done) }}))

	   case Map:	     	    WaitAll(c.Len(), SignalSource(func(done chan bool) {
	   	    	   	     	    	   for _, k := range c.Keys() {
	   	    	   	     	    	   	    f.apply(k, c.Elem(k).Interface(), done) }}))
	   }
}
type Iteration func(k, x interface{}) bool

func (i Iteration) apply(k, v interface{}, c chan bool) {
	    go func() {
	    	     c <-i(k, v)
	    }()
}

func (f Iteration) Each(c interface{}) {
	    switch c := ValueOf(c); c.Kind() {
	    case Slice:	 	     WaitAll(c.Len(), SignalSource(func(done chan bool) {
	    	     	    	   	   	     for i := 0; i < c.Len(); i++ {
	    	     	    	   	   	     	     f.apply(i, c.Elem(i).Interface(), done) }}))

	   case Map:	     	    WaitAll(c.Len(), SignalSource(func(done chan bool) {
	   	    	   	     	    	   for _, k := range c.Keys() {
	   	    	   	     	    	   	    f.apply(k, c.Elem(k).Interface(), done) }}))
	   }
}
type Iteration func(k, x interface{}) bool

func (i Iteration) apply(k, v interface{}, c chan bool) {
	    go func() {
	    	     c <-i(k, v)
	    }()
}

func (f Iteration) Each(c interface{}) {
	    switch c := ValueOf(c); c.Kind() {
	    case Slice:	 	     WaitAll(c.Len(), SignalSource(func(done chan bool) {
	    	     	    	   	   	     for i := 0; i < c.Len(); i++ {
	    	     	    	   	   	     	     f.apply(i, c.Elem(i).Interface(), done) }}))

	   case Map:	     	    WaitAll(c.Len(), SignalSource(func(done chan bool) {
	   	    	   	     	    	   for _, k := range c.Keys() {
	   	    	   	     	    	   	    f.apply(k, c.Elem(k).Interface(), done) }}))
	   }
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Results chan interface{}

type Combination func(x, y interface{}) interface{}

func (f Combination) Reduce(c, s interface{}) (r Results) {
	    r = make(Results)
	    go func() {
	    	    Iteration(func(k, x interface{}) bool {
	    	    	     s = f(s, x)
	    	    	     return true
	    	    }).Each(c)
	    	    r <- s
	    }()
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
type Transformation func(x interface{}) interface{}

func (t Transformation) Transform(x interface{}) Value {
	    return ValueOf(t(x))
}

func (t Transformation) Map(c interface{}) (r interface{}) {
	    r = Allocate(c)
	    if i := MapIterator(r); i != nil {
	    	      i.Each(c)
	    }
	    return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func MapIterator(c interface{}) (i Iteration) {
	    switch n := ValueOf(c); n.Kind() {
	    case Slice:	 	     i = Iteration(func(k, x interface{}) bool {
	    	    	    	    	   	     n.Elem(k.(int)).SetValue(t.GetValue(x))
	    	    	    	    	   	     return true
	    	    	    	    	   })

	   case Map:	     	   i = Iteration(func(k, x interface{}) bool {
	   	    	   	     	   	     n.SetMapIndex(ValueOf(k), t.GetValue(x))
	   	    	   	     	   	     return true
	   	    	   	     	   })
	   }
	   return
}
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
func main() {
	    s := []int{0, 1, 2, 3, 4, 5}
	    d := Transformation(func(x interface{}) interface{} {
	    	     return x.(int) * 2
	    }).Map(s)
	    sum := Combination(func(x, y interface{}) interface{} {
	    	     return x.(int) + y.(int)
	    })
	    fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0))
	    fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0))
}




                                                 produces:
                                                    s = [0 1 2 3 4 5], sum = 15
                                                    d = [0 2 4 6 8 10], sum = 30
ruby can do that!
channels with atomic queues and thread variables
require 'socket'
require 'thread'

class ThreadGroup
	    def all_but_me &block
	    	    list. delete_if { |t|
	    	    	     t.name == Thread.current.name
	    	    }.each { |t| yield t }
	    end

	     def select *names, &block
	     	    list.delete_if { |t|
	     	    	     !names.include? t.name
	     	    }.each { |t| yield t }
	     end
end
class Thread
	     def initialize
	     	     self[:Q] = Queue.new
	     end

	    def send *messages
	    	     messages.each { |m| self[:Q].enq m }
	    end

	    def bind_transmitter socket
	    	     key? :XMIT ? raise ArgumentError : self[:XMIT] = Thread.new() {
	    	     	    loop do
	    	     	    	     (m = self[:Q].deq) == :EXIT ? Thread.current.exit : socket.puts m
	    	     	    	     Thread.pass
	    	     	    end
	    	     	    socket.close
	    	     	    exit
	    	     }
	    end

	   def disconnect
	   	     send "Goodbye #{name}", :EXIT
	   end
end
class ChatServer < TCPServer
	     def initialize port
	     	     @receivers = ThreadGroup.new
	     	     @transmitters = ThreadGroup.new
	     	     @deceased = ThreadGroup.new super
	     end

	    def register name, socket
	    	     @receivers.add(t = Thread.current)
	    	     t.name = name
	    	     @transmitters.add t.bind_transmitter(socket)
	    	     broadcast "#{name} has joined the conversation"
	    	     t.send "Welcome #{name}"
	    end

	    def connect socket
	    	     loop do
	    	     	     begin
	    	     	     	     socket.print "Please enter your name: "
	    	     	     	     register socket.readline.chomp).downcase, socket
	    	     	     	     break
	    	     	     rescue ArgumentError
	    	     	     	     socket.puts "That name is already in use"
	    	     	     end
	    	     end
	    end
def send message, name = Thread.current.name
	   	    @receivers.select(name) { |t| t.send message }
	   end

	   def broadcast message
	   	    @receivers.all_but_me { |t| t.send message }
	   end

	   def listen socket t = Thread.current
	   	     loop do
	   	     	    message = socket.readline.chomp
	   	     	    case message.downcase
	   	     	    when "bye":	 	     raise EOFError
	   	     	    when "known":	 list_known_users
	   	     	    when "quit":	 	    raise SystemExit
	   	     	    else	 	   	   	    broadcast "#{t.name}: #{message}"
	   	     	    end
	   	     end
	   end
def run
	     	    while socket = accept
	     	    Thread.new(socket) do |socket|
	     	    	    begin
	     	    	    	    connect socket
	     	    	    	    listen socket
	     	    	    rescue SystemExit
	     	    	    	    broadcast "#{Thread.current.name} terminated this conversation"
	     	    	    	    broadcast :EXIT
	     	    	    	    send :EXIT
	     	    	    	    @receivers.all_but_me { |t| t.transmitter.join }
	     	    	    	    	    Kernel.exit 0
	     	    	    	    rescue EOFError
	     	    	    	    	    disconnect
	     	    	    	    end
	     	    	    end
	     	    end
	     end
end

ChatServer.new(3939).run
great artists steal
the Thompson-Pike approach to legacy C assimilation
include $(GOROOT)/src/Make.inc

TARG=sqlite3

CGOFILES=
	   sqlite3.go
	   database.go

ifeq ($(GOOS),darwin)
CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib
else
CGO_LDFLAGS=-lsqlite3
endif

include $(GOROOT)/src/Make.pkg
include $(GOROOT)/src/Make.inc

TARG=sqlite3

CGOFILES=
	   sqlite3.go
	   database.go

ifeq ($(GOOS),darwin)
CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib
else
CGO_LDFLAGS=-lsqlite3
endif

include $(GOROOT)/src/Make.pkg
include $(GOROOT)/src/Make.inc

TARG=sqlite3

CGOFILES=
	   sqlite3.go
	   database.go

ifeq ($(GOOS),darwin)
CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib
else
CGO_LDFLAGS=-lsqlite3
endif

include $(GOROOT)/src/Make.pkg
include $(GOROOT)/src/Make.inc

TARG=sqlite3

CGOFILES=
	   sqlite3.go
	   database.go

ifeq ($(GOOS),darwin)
CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib
else
CGO_LDFLAGS=-lsqlite3
endif

include $(GOROOT)/src/Make.pkg
include $(GOROOT)/src/Make.inc

TARG=sqlite3

CGOFILES=
	   sqlite3.go
	   database.go

ifeq ($(GOOS),darwin)
CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib
else
CGO_LDFLAGS=-lsqlite3
endif

include $(GOROOT)/src/Make.pkg
package sqlite3

// #include <sqlite3.h>
import "C"
import "fmt"
import "os"

type Database struct {
	    handle	 	     	   	    *C.sqlite3
	    Filename		    	   string
	    Flags	   	    	   	    C.int
}

func (db *Database) Error() os.Error {
	    return Errno(C.sqlite3_errcode(db.handle))
}
package sqlite3

// #include <sqlite3.h>
import "C"
import "fmt"
import "os"

type Database struct {
	    handle	 	     	   	    *C.sqlite3
	    Filename		    	   string
	    Flags	   	    	   	    C.int
}

func (db *Database) Error() os.Error {
	    return Errno(C.sqlite3_errcode(db.handle))
}
package sqlite3

// #include <sqlite3.h>
import "C"
import "fmt"
import "os"

type Database struct {
	    handle	 	     	   *C.sqlite3
	    Filename		    	   string
	    Flags	   	    	   C.int
}

func (db *Database) Error() os.Error {
	    return Errno(C.sqlite3_errcode(db.handle))
}
package sqlite3

// #include <sqlite3.h>
import "C"
import "fmt"
import "os"

type Database struct {
	    handle	 	     	   *C.sqlite3
	    Filename		    	   string
	    Flags	   	    	   C.int
}

func (db *Database) Error() os.Error {
	    return Errno(C.sqlite3_errcode(db.handle))
}
package sqlite3

// #include <sqlite3.h>
import "C"
import "fmt"
import "os"

type Database struct {
	    handle	 	     	   *C.sqlite3
	    Filename		    	   string
	    Flags	   	    	   C.int
}

func (db *Database) Error() os.Error {
	    return Errno(C.sqlite3_errcode(db.handle))
}
package sqlite3

// #include <sqlite3.h>
import "C"
import "fmt"
import "os"

type Database struct {
	    handle	 	     	   *C.sqlite3
	    Filename		    	   string
	    Flags	   	    	   C.int
}

func (db *Database) Error() os.Error {
	    return Errno(C.sqlite3_errcode(db.handle))
}
package sqlite3

// #include <sqlite3.h>
import "C"
import "fmt"
import "os"

type Database struct {
	    handle	 	     	   *C.sqlite3
	    Filename		    	   string
	    Flags	   	    	   C.int
}

func (db *Database) Error() os.Error {
	    return Errno(C.sqlite3_errcode(db.handle))
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
const(
	   OK	 	  	  = Errno(iota)
	   ERROR
	   CANTOPEN	 = Errno(14)
)

var errText = map[Errno]string {
	    ERROR: 	 	   "SQL error or missing database",
	    CANTOPEN:	 "Unable to open the database file",
}

type Errno int

func (e Errno) String() (err string) {
	    if err = errText[e]; err == "" {
	    	     err = fmt.Sprintf("errno %v", int(e))
	    }
	    return
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func (db *Database) Open(flags... int) (e os.Error) {
	    db.Flags = 0
	    for _, v := range flags {
	    	     db.Flags = db.Flags | C.int(v)
	    }
	    f := C.CString(db.Filename)
	    if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK {
	    	     e = err
	    } else if db.handle == nil {
	    	     e = CANTOPEN
	    }
	    return
}

func (db *Database) Close() {
	    C.sqlite3_close(db.handle)
	    db.handle = nil
}
func Open(filename string, flags... int) (db *Database, e os.Error) {
	    defer func() {
	    	     if x := recover(); x != nil {
	    	     	     db.Close()
	    	     	     db = nil
	    	     	     e = ERROR
	    	     }
	    }()
	    db = &Database{ Filename: filename }
	    if len(flags) == 0 {
	    	     e = db.Open(	 	      C.SQLITE_OPEN_FULLMUTEX,
	    	     	     	    	    	    C.SQLITE_OPEN_READWRITE,
	    	     	     	    	    	    C.SQLITE_OPEN_CREATE )
	    } else {
	    	     e = db.Open(flags...)
	    }
	    return
}
func Open(filename string, flags... int) (db *Database, e os.Error) {
	    defer func() {
	    	     if x := recover(); x != nil {
	    	     	     db.Close()
	    	     	     db = nil
	    	     	     e = ERROR
	    	     }
	    }()
	    db = &Database{ Filename: filename }
	    if len(flags) == 0 {
	    	     e = db.Open(	 	      C.SQLITE_OPEN_FULLMUTEX,
	    	     	     	    	    	    C.SQLITE_OPEN_READWRITE,
	    	     	     	    	    	    C.SQLITE_OPEN_CREATE )
	    } else {
	    	     e = db.Open(flags...)
	    }
	    return
}
func Open(filename string, flags... int) (db *Database, e os.Error) {
	    defer func() {
	    	     if x := recover(); x != nil {
	    	     	     db.Close()
	    	     	     db = nil
	    	     	     e = ERROR
	    	     }
	    }()
	    db = &Database{ Filename: filename }
	    if len(flags) == 0 {
	    	     e = db.Open(	 	      C.SQLITE_OPEN_FULLMUTEX,
	    	     	     	    	    	    C.SQLITE_OPEN_READWRITE,
	    	     	     	    	    	    C.SQLITE_OPEN_CREATE )
	    } else {
	    	     e = db.Open(flags...)
	    }
	    return
}
func Open(filename string, flags... int) (db *Database, e os.Error) {
	    defer func() {
	    	     if x := recover(); x != nil {
	    	     	     db.Close()
	    	     	     db = nil
	    	     	     e = ERROR
	    	     }
	    }()
	    db = &Database{ Filename: filename }
	    if len(flags) == 0 {
	    	     e = db.Open(	 	      C.SQLITE_OPEN_FULLMUTEX,
	    	     	     	    	    	    C.SQLITE_OPEN_READWRITE,
	    	     	     	    	    	    C.SQLITE_OPEN_CREATE )
	    } else {
	    	     e = db.Open(flags...)
	    }
	    return
}
func Open(filename string, flags... int) (db *Database, e os.Error) {
	    defer func() {
	    	     if x := recover(); x != nil {
	    	     	     db.Close()
	    	     	     db = nil
	    	     	     e = ERROR
	    	     }
	    }()
	    db = &Database{ Filename: filename }
	    if len(flags) == 0 {
	    	     e = db.Open(	 	      C.SQLITE_OPEN_FULLMUTEX,
	    	     	     	    	    	    C.SQLITE_OPEN_READWRITE,
	    	     	     	    	    	    C.SQLITE_OPEN_CREATE )
	    } else {
	    	     e = db.Open(flags...)
	    }
	    return
}
func Open(filename string, flags... int) (db *Database, e os.Error) {
	    defer func() {
	    	     if x := recover(); x != nil {
	    	     	     db.Close()
	    	     	     db = nil
	    	     	     e = ERROR
	    	     }
	    }()
	    db = &Database{ Filename: filename }
	    if len(flags) == 0 {
	    	     e = db.Open(	 	      C.SQLITE_OPEN_FULLMUTEX,
	    	     	     	    	    	    C.SQLITE_OPEN_READWRITE,
	    	     	     	    	    	    C.SQLITE_OPEN_CREATE )
	    } else {
	    	     e = db.Open(flags...)
	    }
	    return
}
func Open(filename string, flags... int) (db *Database, e os.Error) {
	    defer func() {
	    	     if x := recover(); x != nil {
	    	     	     db.Close()
	    	     	     db = nil
	    	     	     e = ERROR
	    	     }
	    }()
	    db = &Database{ Filename: filename }
	    if len(flags) == 0 {
	    	     e = db.Open(	 	      C.SQLITE_OPEN_FULLMUTEX,
	    	     	     	    	    	    C.SQLITE_OPEN_READWRITE,
	    	     	     	    	    	    C.SQLITE_OPEN_CREATE )
	    } else {
	    	     e = db.Open(flags...)
	    }
	    return
}
func Open(filename string, flags... int) (db *Database, e os.Error) {
	    defer func() {
	    	     if x := recover(); x != nil {
	    	     	     db.Close()
	    	     	     db = nil
	    	     	     e = ERROR
	    	     }
	    }()
	    db = &Database{ Filename: filename }
	    if len(flags) == 0 {
	    	     e = db.Open(	 	      C.SQLITE_OPEN_FULLMUTEX,
	    	     	     	    	    	    C.SQLITE_OPEN_READWRITE,
	    	     	     	    	    	    C.SQLITE_OPEN_CREATE )
	    } else {
	    	     e = db.Open(flags...)
	    }
	    return
}
package main

//	 #include "ruby.h"
import "C"
import "fmt"
import "os"

type VALUE struct {
	    cptr	*C.VALUE
}

func main() {
	    var stack_frame	 VALUE
	    defer func() { C.ruby_cleanup(0) }()

	   C.ruby_sysinit(len(os.Args), &os.Args[0])
	   C.ruby_init_stack(stack_frame.cptr)
	   C.ruby_init()
	   C.ruby_init_loadpath()
	   run_ruby()
}
package main

//	 #include "ruby.h"
import "C"
import "fmt"
import "os"

type VALUE struct {
	    cptr	*C.VALUE
}

func main() {
	    var stack_frame	 VALUE
	    defer func() { C.ruby_cleanup(0) }()

	   C.ruby_sysinit(len(os.Args), &os.Args[0])
	   C.ruby_init_stack(stack_frame.cptr)
	   C.ruby_init()
	   C.ruby_init_loadpath()
	   run_ruby()
}
package main

//	 #include "ruby.h"
import "C"
import "fmt"
import "os"

type VALUE struct {
	    cptr	*C.VALUE
}

func main() {
	    var stack_frame	 VALUE
	    defer func() { C.ruby_cleanup(0) }()

	   C.ruby_sysinit(len(os.Args), &os.Args[0])
	   C.ruby_init_stack(stack_frame.cptr)
	   C.ruby_init()
	   C.ruby_init_loadpath()
	   run_ruby()
}
package main

//	 #include "ruby.h"
import "C"
import "fmt"
import "os"

type VALUE struct {
	    cptr	*C.VALUE
}

func main() {
	    var stack_frame	 VALUE
	    defer func() { C.ruby_cleanup(0) }()

	   C.ruby_sysinit(len(os.Args), &os.Args[0])
	   C.ruby_init_stack(stack_frame.cptr)
	   C.ruby_init()
	   C.ruby_init_loadpath()
	   run_ruby()
}
package main

//	 #include "ruby.h"
import "C"
import "fmt"
import "os"

type VALUE struct {
	    cptr	*C.VALUE
}

func main() {
	    var stack_frame	 VALUE
	    defer func() { C.ruby_cleanup(0) }()

	   C.ruby_sysinit(len(os.Args), &os.Args[0])
	   C.ruby_init_stack(stack_frame.cptr)
	   C.ruby_init()
	   C.ruby_init_loadpath()
	   run_ruby()
}
package main

//	 #include "ruby.h"
import "C"
import "fmt"
import "os"

type VALUE struct {
	    cptr	*C.VALUE
}

func main() {
	    var stack_frame	 VALUE
	    defer func() { C.ruby_cleanup(0) }()

	   C.ruby_sysinit(len(os.Args), &os.Args[0])
	   C.ruby_init_stack(stack_frame.cptr)
	   C.ruby_init()
	   C.ruby_init_loadpath()
	   run_ruby()
}
package main

//	 #include "ruby.h"
import "C"
import "fmt"
import "os"

type VALUE struct {
	    cptr	*C.VALUE
}

func main() {
	    var stack_frame	 VALUE
	    defer func() { C.ruby_cleanup(0) }()

	   C.ruby_sysinit(len(os.Args), &os.Args[0])
	   C.ruby_init_stack(stack_frame.cptr)
	   C.ruby_init()
	   C.ruby_init_loadpath()
	   run_ruby()
}
package main

//	 #include "ruby.h"
import "C"
import "fmt"
import "os"

type VALUE struct {
	    cptr	*C.VALUE
}

func main() {
	    var stack_frame	 VALUE
	    defer func() { C.ruby_cleanup(0) }()

	   C.ruby_sysinit(len(os.Args), &os.Args[0])
	   C.ruby_init_stack(stack_frame.cptr)
	   C.ruby_init()
	   C.ruby_init_loadpath()
	   run_ruby()
}
func run_ruby() {
	    C.rb_require("sum.rb")
	    C.rb_eval_string("$summer = Summer.new")
	    C.rb_eval_string("$result = $summer.sum(10)")
	    result := C.rb_gv_get("result")
	    fmt.Printf("Result = %vn", C.NUM2INT(result))
}
homework
homework
embedded your favourite ruby in go
homework
embedded your favourite ruby in go
you’ll need a dynamic shared library
homework
embedded your favourite ruby in go
you’ll need a dynamic shared library
the Ruby header files
homework
embedded your favourite ruby in go
you’ll need a dynamic shared library
and the Ruby header files
the non-gcc go toolchain
homework
embedded your favourite ruby in go
you’ll need a dynamic shared library
and the Ruby header files
the non-gcc go toolchain
and some code that looks a bit like this...
finding out more
golang.org
finding out more
golang.org
#golang
finding out more
golang.org
#golang
pledgie.com/accounts/@feyeleanor
finding out more
golang.org
#golang
pledgie.com/accounts/@feyeleanor
github.com/feyeleanor
finding out more
golang.org
#golang
pledgie.com/accounts/@feyeleanor
github.com/feyeleanor
slides.games-with-brains.net

Go &lt;-> Ruby

  • 1.
    Go <=> Ruby a selection of odd lightning talks @feyeleanor http://slides.games-with-brains.net/
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
    Hacker 101 this presentationcontains code that code is probably broken
  • 10.
    Hacker 101 this presentationcontains code that code is probably broken if this bothers you - fix it
  • 11.
    Hacker 101 this presentationcontains code that code is probably broken if this bothers you - fix it it’s called a learning experience
  • 12.
    Hacker 101 this presentationcontains code that code is probably broken if this bothers you - fix it it’s called a learning experience and will make you a better persontm
  • 13.
    Google Go it’s notjust for Google
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
    package main import "fmt" constHELLO string = "hello" var WORLD string = "world" func main() { fmt.Println(HELLO, WORLD) }
  • 19.
    package main import "fmt" constHELLO string = "hello" var WORLD string = "world" func main() { fmt.Println(HELLO, WORLD) }
  • 20.
    package main import "fmt" constHELLO string = "hello" var WORLD string = "world" func main() { fmt.Println(HELLO, WORLD) }
  • 21.
    package main import "fmt" constHELLO string = "hello" var WORLD string = "world" func main() { fmt.Println(HELLO, WORLD) }
  • 22.
    package organisation import var, const, type declaration func, interface, map, struct, chan if ... else switch ... case ... fallthrough ... default select ... case control flow for for ... range break, continue go, goto, defer, return
  • 23.
    boolean, numeric, array value structure, interface reference pointer, slice, string, map, channel invocation function, method, closure
  • 24.
    Go Ruby compilation static AOT runtime mutable memory garbage collected syntax minimalist humanistic strong dynamic type embedding inheritance dispatch procedural invocation message passing semantics statements expressions
  • 25.
    Ruby typing istricksy lies we tell ourself about type
  • 26.
    superclass modules class modules message instance
  • 27.
    superclass modules class modules type asserted instance
  • 28.
    instance inherited class class expressed type modules
  • 29.
    instance inherited class class expressed type modules
  • 30.
    instance inherited class class expressed type modules
  • 31.
    instance inherited class class expressed type modules
  • 32.
    class Counter attr_writer :count def initialize @count = 0 end def Tick @count += 1 end end class DoubleCounter < Counter def Tick super @count += 1 end end n = new(DoubleCounter) puts n.Tick puts n.superclass.Tick
  • 33.
    class Counter attr_writer :count def initialize @count = 0 end def Tick @count += 1 end end class DoubleCounter < Counter def Tick super @count += 1 end end n = new(DoubleCounter) puts n.Tick puts n.superclass.Tick
  • 34.
    class Counter attr_writer :count def initialize @count = 0 end def Tick @count += 1 end end class DoubleCounter < Counter def Tick super @count += 1 end end n = new(DoubleCounter) puts n.Tick puts n.superclass.Tick
  • 35.
    class Counter attr_writer :count def initialize @count = 0 end def Tick @count += 1 end end class DoubleCounter < Counter def Tick super @count += 1 end end n = new(DoubleCounter) puts n.Tick puts n.superclass.Tick
  • 36.
    class Counter attr_writer :count def initialize @count = 0 end def Tick @count += 1 end end class DoubleCounter < Counter def Tick super @count += 1 end end n = new(DoubleCounter) puts n.Tick puts n.superclass.Tick
  • 37.
    class Counter attr_writer :count def initialize @count = 0 end def Tick @count += 1 end end class DoubleCounter < Counter def Tick super @count += 1 end end n = new(DoubleCounter) puts n.Tick puts n.superclass.Tick
  • 38.
    down a rabbithole instances are their own classes
  • 39.
    down a rabbithole instances are their own classes and all classes are mutable at runtime
  • 40.
    down a rabbithole instances are their own classes all classes are mutable at runtime so inheritance pathways can be altered
  • 41.
    down a rabbithole instances are their own classes and all classes are mutable at runtime so inheritance pathways can be altered making Ruby very flexible
  • 42.
    down a rabbithole instances are their own classes and all classes are mutable at runtime so inheritance pathways can be altered making Ruby very flexible at the cost of type uncertainty
  • 43.
    down a rabbithole instances are their own classes and all classes are mutable at runtime so inheritance pathways can be altered making Ruby very flexible at the cost of type uncertainty which really bugs computer scientists
  • 44.
    type in Gois safetm clearly defined areas of doubt and uncertainty
  • 45.
    memory method layout set static type embedded types
  • 46.
    memory method layout set static type embedded types
  • 47.
    memory method layout set static type embedded types
  • 48.
    memory method layout set static type embedded types
  • 49.
    package Integer type Intint func (i *Int) Add(x int) { *i += Int(x) }
  • 50.
    package Integer type Intint func (i *Int) Add(x int) { *i += Int(x) }
  • 51.
    package Integer type Intint func (i *Int) Add(x int) { *i += Int(x) }
  • 52.
    package Integer type Intint func (i *Int) Add(x int) { *i += Int(x) }
  • 53.
    type Buffer []Int func(b Buffer) Swap(i, j int) { b[i], b[j] = b[j], b[i] } func (b Buffer) Clone() Buffer { s := make(Buffer, len(b)) copy(s, b) return s } func (b Buffer) Move(i, n int) { if n > len(b) - i { n = len(b) - i } segment_to_move := b[:i].Clone() copy(b, b[i:i + n]) copy(b[n:i + n], segment_to_move) }
  • 54.
    type Buffer []Int func(b Buffer) Swap(i, j int) { b[i], b[j] = b[j], b[i] } func (b Buffer) Clone() Buffer { s := make(Buffer, len(b)) copy(s, b) return s } func (b Buffer) Move(i, n int) { if n > len(b) - i { n = len(b) - i } segment_to_move := b[:i].Clone() copy(b, b[i:i + n]) copy(b[n:i + n], segment_to_move) }
  • 55.
    type Buffer []Int func(b Buffer) Swap(i, j int) { b[i], b[j] = b[j], b[i] } func (b Buffer) Clone() Buffer { s := make(Buffer, len(b)) copy(s, b) return s } func (b Buffer) Move(i, n int) { if n > len(b) - i { n = len(b) - i } segment_to_move := b[:i].Clone() copy(b, b[i:i + n]) copy(b[n:i + n], segment_to_move) }
  • 56.
    package main import "fmt" import"Integer" func main() { i := Integer.Buffer{0, 1, 2, 3, 4, 5} b := i.Clone() b.Swap(1, 2) b.Move(3, 2) b[0].Add(3) produces: fmt.Printf("b[0:2] = %vn", b[:2]) b[0:2] = [6 4] }
  • 57.
    package main import "fmt" import"Integer" func main() { i := Integer.Buffer{0, 1, 2, 3, 4, 5} b := i.Clone() b.Swap(1, 2) b.Move(3, 2) b[0].Add(3) produces: fmt.Printf(“b[0:2] = %vn”, b[:2]) b[0:2] = [6 4] }
  • 58.
    package main import "fmt" import"Integer" func main() { i := Integer.Buffer{0, 1, 2, 3, 4, 5} b := i.Clone() b.Swap(1, 2) b.Move(3, 2) b[0].Add(3) produces: fmt.Printf("b[0:2] = %vn", b[:2]) b[0:2] = [6 4] }
  • 59.
    package main import "fmt" import"Integer" func main() { i := Integer.Buffer{0, 1, 2, 3, 4, 5} b := i.Clone() b.Swap(1, 2) b.Move(3, 2) b[0].Add(3) produces: fmt.Printf("b[0:2] = %vn", b[:2]) b[0:2] = [6 4] }
  • 60.
    package main import "fmt" import"Integer" func main() { i := Integer.Buffer{0, 1, 2, 3, 4, 5} b := i.Clone() b.Swap(1, 2) b.Move(3, 2) b[0].Add(3) produces: fmt.Printf("b[0:2] = %vn", b[:2]) b[0:2] = [6 4] }
  • 61.
    package Vector import ."Integer" type Vector struct { Buffer } func (v *Vector) Clone() *Vector { return &Vector{v.Buffer.Clone()} } func (v *Vector) Slice(i, j int) Buffer { return v.Buffer[i:j] }
  • 62.
    package Vector import ."Integer" type Vector struct { Buffer } func (v *Vector) Clone() *Vector { return &Vector{v.Buffer.Clone()} } func (v *Vector) Slice(i, j int) Buffer { return v.Buffer[i:j] }
  • 63.
    package Vector import ."Integer" type Vector struct { Buffer } func (v *Vector) Clone() *Vector { return &Vector{v.Buffer.Clone()} } func (v *Vector) Slice(i, j int) Buffer { return v.Buffer[i:j] }
  • 64.
    package Vector import ."Integer" type Vector struct { Buffer } func (v *Vector) Clone() *Vector { return &Vector{v.Buffer.Clone()} } func (v *Vector) Slice(i, j int) Buffer { return v.Buffer[i:j] }
  • 65.
    package Vector import ."Integer" type Vector struct { Buffer } func (v *Vector) Clone() *Vector { return &Vector{v.Buffer.Clone()} } func (v *Vector) Slice(i, j int) Buffer { return v.Buffer[i:j] }
  • 66.
    type Adder interface{ Add(j int) Subtract(j int) Result() interface{} Reset() }
  • 67.
    type Adder interface{ Add(j int) Subtract(j int) Result() interface{} Reset() }
  • 68.
    type Adder interface{ Add(j int) Subtract(j int) Result() interface{} Reset() }
  • 69.
    type IAdder int func(i IAdder) Add(j int) { i[0] += i[j] } func (i IAdder) Subtract(j int) { i[0] -= i[j] } func (i IAdder) Result() interface{} { return i[0] } func (i IAdder) Reset() { i[0] = *new(int) } func (i IAdder) Increment() { i[0]++ }
  • 70.
    type IAdder int func(i IAdder) Add(j int) { i[0] += i[j] } func (i IAdder) Subtract(j int) { i[0] -= i[j] } func (i IAdder) Result() interface{} { return i[0] } func (i IAdder) Reset() { i[0] = *new(int) } func (i IAdder) Increment() { i[0]++ }
  • 71.
    type IAdder int func(i IAdder) Add(j int) { i[0] += i[j] } func (i IAdder) Subtract(j int) { i[0] -= i[j] } func (i IAdder) Result() interface{} { return i[0] } func (i IAdder) Reset() { i[0] = *new(int) } func (i IAdder) Increment() { i[0]++ }
  • 72.
    type FAdder []float32 func(f FAdder) Add(j int) { f[0] += f[j] } func (f FAdder) Subtract(j int) { f[0] -= f[j] } func (f FAdder) Result() interface{} { return f[0] } func (f FAdder) Reset() { f[0] = 0 }
  • 73.
    type FAdder []float32 func(f FAdder) Add(j int) { f[0] += f[j] } func (f FAdder) Subtract(j int) { f[0] -= f[j] } func (f FAdder) Result() interface{} { return f[0] } func (f FAdder) Reset() { f[0] = 0 }
  • 74.
    type FAdder []float32 func(f FAdder) Add(j int) { f[0] += f[j] } func (f FAdder) Subtract(j int) { f[0] -= f[j] } func (f FAdder) Result() interface{} { return f[0] } func (f FAdder) Reset() { f[0] = 0 }
  • 75.
    func TestAdder(t *testing.T){ var a Adder a = IAdder{0, 1, 2} a.Add(1) if i.Result().(int) != 1 { t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1) } a.Subtract(2) if a.Result().(int) != -1 { t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1) } a = FAdder{0.0, 1.0, 2.0} a.Add(1) if a.Result().(float32) != 1.0 { t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0) } }
  • 76.
    func TestAdder(t *testing.T){ var a Adder a = IAdder{0, 1, 2} a.Add(1) if i.Result().(int) != 1 { t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1) } a.Subtract(2) if a.Result().(int) != -1 { t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1) } a = FAdder{0.0, 1.0, 2.0} a.Add(1) if a.Result().(float32) != 1.0 { t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0) } }
  • 77.
    func TestAdder(t *testing.T){ var a Adder a = IAdder{0, 1, 2} a.Add(1) if i.Result().(int) != 1 { t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1) } a.Subtract(2) if a.Result().(int) != -1 { t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1) } a = FAdder{0.0, 1.0, 2.0} a.Add(1) if a.Result().(float32) != 1.0 { t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0) } }
  • 78.
    func TestAdder(t *testing.T){ var a Adder a = IAdder{0, 1, 2} a.Add(1) if i.Result().(int) != 1 { t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1) } a.Subtract(2) if a.Result().(int) != -1 { t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1) } a = FAdder{0.0, 1.0, 2.0} a.Add(1) if a.Result().(float32) != 1.0 { t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0) } }
  • 79.
    func TestAdder(t *testing.T){ var a Adder a = IAdder{0, 1, 2} a.Add(1) if i.Result().(int) != 1 { t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1) } a.Subtract(2) if a.Result().(int) != -1 { t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1) } a = FAdder{0.0, 1.0, 2.0} a.Add(1) if a.Result().(float32) != 1.0 { t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0) } }
  • 80.
    func TestAdder(t *testing.T){ var a Adder a = IAdder{0, 1, 2} a.Add(1) if i.Result().(int) != 1 { t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1) } a.Subtract(2) if a.Result().(int) != -1 { t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1) } a = FAdder{0.0, 1.0, 2.0} a.Add(1) if a.Result().(float32) != 1.0 { t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0) } }
  • 81.
    func TestAdder(t *testing.T){ var a Adder a = IAdder{0, 1, 2} a.Add(1) if i.Result().(int) != 1 { t.Fatalf("IAdder::Add(1) %v != %v", a.Result(), 1) } a.Subtract(2) if a.Result().(int) != -1 { t.Fatalf("IAdder::Subtract(2) %v != %v", a.Result(), -1) } a = FAdder{0.0, 1.0, 2.0} a.Add(1) if a.Result().(float32) != 1.0 { t.Fatalf("FAdder::Add(1) %v != %v", a.Result(), 1.0) } }
  • 82.
    down a rabbithole an object has known static type
  • 83.
    down a rabbithole an object has known static type this fixed type is determined at linking
  • 84.
    down a rabbithole an object has known static type this fixed type is determined at linking no new types can be created at runtime
  • 85.
    down a rabbithole an object has known static type this fixed type is determined at linking no new types can be created at runtime so dynamism is bounded to a fixed set
  • 86.
    down a rabbithole an object has known static type this fixed type is determined at linking no new types can be created at runtime so dynamism is bounded to this fixed set and computer scientists are happier
  • 87.
    unit tests asREPL testing that doesn’t suck
  • 88.
    func (b Buffer)Eq(o Buffer) (r bool) { if len(b) == len(o) { for i := len(b) - 1; i > 0; i-- { if b[i] != o[i] { return } } r = true } return }
  • 89.
    func (b Buffer)Eq(o Buffer) (r bool) { if len(b) == len(o) { for i := len(b) - 1; i > 0; i-- { if b[i] != o[i] { return } } r = true } return }
  • 90.
    func (b Buffer)Eq(o Buffer) (r bool) { if len(b) == len(o) { for i := len(b) - 1; i > 0; i-- { if b[i] != o[i] { return } } r = true } return }
  • 91.
    func (b Buffer)Eq(o Buffer) (r bool) { if len(b) == len(o) { for i := len(b) - 1; i > 0; i-- { if b[i] != o[i] { return } } r = true } return }
  • 92.
    func (b Buffer)Eq(o Buffer) (r bool) { if len(b) == len(o) { for i := len(b) - 1; i > 0; i-- { if b[i] != o[i] { return } } r = true } return }
  • 93.
    func (b Buffer)Eq(o Buffer) (r bool) { if len(b) == len(o) { for i := len(b) - 1; i > 0; i-- { if b[i] != o[i] { return } } r = true } return }
  • 94.
    func (b Buffer)Eq(o Buffer) (r bool) { if len(b) == len(o) { for i := len(b) - 1; i > 0; i-- { if b[i] != o[i] { return } } r = true } return }
  • 95.
    package Vector import "testing" funcTestVectorSwap(t *testing.T) { i := Vector{Buffer{0, 1, 2, 3, 4, 5}} v := i.Clone() v.Swap(1, 2) r := Vector{Buffer{0, 2, 1, 3, 4, 5}} switch { case !v.Eq(r.Buffer): fallthrough case !v.Buffer.Eq(r.Buffer): t.Fatalf("b[0:5] = %v", v) } }
  • 96.
    package Vector import "testing" funcTestVectorSwap(t *testing.T) { i := Vector{Buffer{0, 1, 2, 3, 4, 5}} v := i.Clone() v.Swap(1, 2) r := Vector{Buffer{0, 2, 1, 3, 4, 5}} switch { case !v.Eq(r.Buffer): fallthrough case !v.Buffer.Eq(r.Buffer): t.Fatalf("b[0:5] = %v", v) } }
  • 97.
    package Vector import "testing" funcTestVectorSwap(t *testing.T) { i := Vector{Buffer{0, 1, 2, 3, 4, 5}} v := i.Clone() v.Swap(1, 2) r := Vector{Buffer{0, 2, 1, 3, 4, 5}} switch { case !v.Eq(r.Buffer): fallthrough case !v.Buffer.Eq(r.Buffer): t.Fatalf("b[0:5] = %v", v) } }
  • 98.
    package Vector import "testing" funcTestVectorSwap(t *testing.T) { i := Vector{Buffer{0, 1, 2, 3, 4, 5}} v := i.Clone() v.Swap(1, 2) r := Vector{Buffer{0, 2, 1, 3, 4, 5}} switch { case !v.Eq(r.Buffer): fallthrough case !v.Buffer.Eq(r.Buffer): t.Fatalf("b[0:5] = %v", v) } }
  • 99.
    package Vector import "testing" funcTestVectorSwap(t *testing.T) { i := Vector{Buffer{0, 1, 2, 3, 4, 5}} v := i.Clone() v.Swap(1, 2) r := Vector{Buffer{0, 2, 1, 3, 4, 5}} switch { case !v.Eq(r.Buffer): fallthrough case !v.Buffer.Eq(r.Buffer): t.Fatalf("b[0:5] = %v", v) } }
  • 100.
    package Vector import "testing" funcTestVectorSwap(t *testing.T) { i := Vector{Buffer{0, 1, 2, 3, 4, 5}} v := i.Clone() v.Swap(1, 2) r := Vector{Buffer{0, 2, 1, 3, 4, 5}} switch { case !v.Eq(r.Buffer): fallthrough case !v.Buffer.Eq(r.Buffer): t.Fatalf("b[0:5] = %v", v) } }
  • 101.
    package Vector import "testing" funcTestVectorSwap(t *testing.T) { i := Vector{Buffer{0, 1, 2, 3, 4, 5}} v := i.Clone() v.Swap(1, 2) r := Vector{Buffer{0, 2, 1, 3, 4, 5}} switch { case !v.Eq(r.Buffer): fallthrough case !v.Buffer.Eq(r.Buffer): t.Fatalf("b[0:5] = %v", v) } }
  • 102.
    package Vector import "testing" funcTestVectorSwap(t *testing.T) { i := Vector{Buffer{0, 1, 2, 3, 4, 5}} v := i.Clone() v.Swap(1, 2) r := Vector{Buffer{0, 2, 1, 3, 4, 5}} switch { case !v.Eq(r.Buffer): fallthrough case !v.Buffer.Eq(r.Buffer): t.Fatalf("b[0:5] = %v", v) } }
  • 103.
    include $(GOROOT)/src/Make.inc TARG=integer GOFILES= integer.go vector.go include $(GOROOT)/src/Make.pkg
  • 104.
    package Vector import "testing" import"vector" func BenchmarkVectorClone6(b *testing.B) { v := Vector{Buffer{0, 1, 2, 3, 4, 5}} for i := 0; i < b.N; i++ { _ = v.Clone() } } func BenchmarkVectorSwap(b *testing.B) { b.StopTimer() v := Vector{Buffer{0, 1, 2, 3, 4, 5}} b.StartTimer() for i := 0; i < b.N; i++ { v.Swap(1, 2) } }
  • 105.
    package Vector import "testing" import"vector" func BenchmarkVectorClone6(b *testing.B) { v := Vector{Buffer{0, 1, 2, 3, 4, 5}} for i := 0; i < b.N; i++ { _ = v.Clone() } } func BenchmarkVectorSwap(b *testing.B) { b.StopTimer() v := Vector{Buffer{0, 1, 2, 3, 4, 5}} b.StartTimer() for i := 0; i < b.N; i++ { v.Swap(1, 2) } }
  • 106.
    package Vector import "testing" import"vector" func BenchmarkVectorClone6(b *testing.B) { v := Vector{Buffer{0, 1, 2, 3, 4, 5}} for i := 0; i < b.N; i++ { _ = v.Clone() } } func BenchmarkVectorSwap(b *testing.B) { b.StopTimer() v := Vector{Buffer{0, 1, 2, 3, 4, 5}} b.StartTimer() for i := 0; i < b.N; i++ { v.Swap(1, 2) } }
  • 107.
    package Vector import "testing" import"vector" func BenchmarkVectorClone6(b *testing.B) { v := Vector{Buffer{0, 1, 2, 3, 4, 5}} for i := 0; i < b.N; i++ { _ = v.Clone() } } func BenchmarkVectorSwap(b *testing.B) { b.StopTimer() v := Vector{Buffer{0, 1, 2, 3, 4, 5}} b.StartTimer() for i := 0; i < b.N; i++ { v.Swap(1, 2) } }
  • 108.
    package Vector import "testing" import"vector" func BenchmarkVectorClone6(b *testing.B) { v := Vector{Buffer{0, 1, 2, 3, 4, 5}} for i := 0; i < b.N; i++ { _ = v.Clone() } } func BenchmarkVectorSwap(b *testing.B) { b.StopTimer() v := Vector{Buffer{0, 1, 2, 3, 4, 5}} b.StartTimer() for i := 0; i < b.N; i++ { v.Swap(1, 2) } }
  • 109.
    package Vector import "testing" import"vector" func BenchmarkVectorClone6(b *testing.B) { v := Vector{Buffer{0, 1, 2, 3, 4, 5}} for i := 0; i < b.N; i++ { _ = v.Clone() } } func BenchmarkVectorSwap(b *testing.B) { b.StopTimer() v := Vector{Buffer{0, 1, 2, 3, 4, 5}} b.StartTimer() for i := 0; i < b.N; i++ { v.Swap(1, 2) } }
  • 110.
    $ gotest -bench="Benchmark" rm-f _test/scripts.a 6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go embedded_typing_benchmark_test.go embedded_typing_test.go rm -f _test/scripts.a gopack grc _test/scripts.a _gotest_.6 PASS integer.BenchmarkVectorSwap 200000000 8 ns/op integer.BenchmarkVectorClone6 10000000 300 ns/op
  • 111.
    $ gotest -bench="Benchmark" rm-f _test/scripts.a 6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go embedded_typing_benchmark_test.go embedded_typing_test.go rm -f _test/scripts.a gopack grc _test/scripts.a _gotest_.6 PASS integer.BenchmarkVectorSwap 200000000 8 ns/op integer.BenchmarkVectorClone6 10000000 300 ns/op
  • 112.
    $ gotest -bench="Benchmark" rm-f _test/scripts.a 6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go embedded_typing_benchmark_test.go embedded_typing_test.go rm -f _test/scripts.a gopack grc _test/scripts.a _gotest_.6 PASS integer.BenchmarkVectorSwap 200000000 8 ns/op integer.BenchmarkVectorClone6 10000000 300 ns/op
  • 113.
    $ gotest -bench="Benchmark" rm-f _test/scripts.a 6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go embedded_typing_benchmark_test.go embedded_typing_test.go rm -f _test/scripts.a gopack grc _test/scripts.a _gotest_.6 PASS integer.BenchmarkVectorSwap 200000000 8 ns/op integer.BenchmarkVectorClone6 10000000 300 ns/op
  • 114.
    $ gotest -bench="Benchmark" rm-f _test/scripts.a 6g -o _gotest_.6 integer.go vector.go nominal_typing_test.go embedded_typing_benchmark_test.go embedded_typing_test.go rm -f _test/scripts.a gopack grc _test/scripts.a _gotest_.6 PASS integer.BenchmarkVectorSwap 200000000 8 ns/op integer.BenchmarkVectorClone6 10000000 300 ns/op
  • 115.
    exceptional fun because Godoesn’t have exceptions - honest!
  • 116.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 117.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 118.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 119.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 120.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 121.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 122.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 123.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 124.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 125.
    func Throw() { panic(nil) } func Catch(f func()) { defer func() { if x := recover(); x != nil { panic(x) } }() f() } func CatchAll(f func()) { defer func() { recover() }() f() }
  • 126.
    func throwsPanic(f func())(b bool) { defer func() { if x := recover(); x != nil { b = true } }() f() return }
  • 127.
    func throwsPanic(f func())(b bool) { defer func() { if x := recover(); x != nil { b = true } }() f() return }
  • 128.
    func throwsPanic(f func())(b bool) { defer func() { if x := recover(); x != nil { b = true } }() f() return }
  • 129.
    func throwsPanic(f func())(b bool) { defer func() { if x := recover(); x != nil { b = true } }() f() return }
  • 130.
    func throwsPanic(f func())(b bool) { defer func() { if x := recover(); x != nil { b = true } }() f() return }
  • 131.
    func throwsPanic(f func())(b bool) { defer func() { if x := recover(); x != nil { b = true } }() f() return }
  • 132.
    func throwsPanic(f func())(b bool) { defer func() { if x := recover(); x != nil { b = true } }() f() return }
  • 133.
    func throwsPanic(f func())(b bool) { defer func() { if x := recover(); x != nil { b = true } }() f() return }
  • 134.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 135.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 136.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 137.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 138.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 139.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 140.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 141.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 142.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 143.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 144.
    import "fmt" import "path" import"runtime" func StackTrace() { var stack_trace []uintptr var my_path string runtime.Callers(1, stack_trace) for i, u := range stack_trace { if f := runtime.FuncForPC(u); f != nil { file, line := f.FileLine(u) switch filepath, filename := path.Split(file); { case i == 0: my_path = filepath case my_path != filepath: fmt.Printf("%v:%v", filename, line) } } else { fmt.Println("(unknown)") } } }
  • 145.
    reflections on Go dynamismthrough run-time type manipulation
  • 146.
    package generalise import "reflect" funcAllocate(i interface{}, limit... int) (n interface{}) { switch v := reflect.ValueOf(i); v.Kind() { case reflect.Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = reflect.MakeSlice(v.Type(), l, l).Interface() case reflect.Map: n = reflect.MakeMap(v.Type()).Interface() } return }
  • 147.
    package generalise import "reflect" funcAllocate(i interface{}, limit... int) (n interface{}) { switch v := reflect.ValueOf(i); v.Kind() { case reflect.Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = reflect.MakeSlice(v.Type(), l, l).Interface() case reflect.Map: n = reflect.MakeMap(v.Type()).Interface() } return }
  • 148.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 149.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 150.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 151.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 152.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 153.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 154.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 155.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 156.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 157.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 158.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 159.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 160.
    package generalise import ."reflect" func Allocate(i interface{}, limit... int) (n interface{}) { switch v := ValueOf(i); v.Kind() { case Slice: l := v.Cap() if len(limit) > 0 { l = limit[0] } n = MakeSlice(v.Type(), l, l).Interface() case Map: n = MakeMap(v.Type()).Interface() } return }
  • 161.
    func TestAllocate(t *testing.T){ var s2 []int s1 := []int{0, 1, 2} m := map[int] int{1: 1, 2: 2, 3: 3} switch { case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }): t.Fatal("Unable to allocate new slice") case len(s2) != 1 || cap(s2) != 1: t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2) case throwsPanic(func() { Allocate(m) }): t.Fatal("Unable to allocate new map") } }
  • 162.
    func TestAllocate(t *testing.T){ var s2 []int s1 := []int{0, 1, 2} m := map[int] int{1: 1, 2: 2, 3: 3} switch { case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }): t.Fatal("Unable to allocate new slice") case len(s2) != 1 || cap(s2) != 1: t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2) case throwsPanic(func() { Allocate(m) }): t.Fatal("Unable to allocate new map") } }
  • 163.
    func TestAllocate(t *testing.T){ var s2 []int s1 := []int{0, 1, 2} m := map[int] int{1: 1, 2: 2, 3: 3} switch { case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }): t.Fatal("Unable to allocate new slice") case len(s2) != 1 || cap(s2) != 1: t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2) case throwsPanic(func() { Allocate(m) }): t.Fatal("Unable to allocate new map") } }
  • 164.
    func TestAllocate(t *testing.T){ var s2 []int s1 := []int{0, 1, 2} m := map[int] int{1: 1, 2: 2, 3: 3} switch { case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }): t.Fatal("Unable to allocate new slice") case len(s2) != 1 || cap(s2) != 1: t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2) case throwsPanic(func() { Allocate(m) }): t.Fatal("Unable to allocate new map") } }
  • 165.
    func TestAllocate(t *testing.T){ var s2 []int s1 := []int{0, 1, 2} m := map[int] int{1: 1, 2: 2, 3: 3} switch { case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }): t.Fatal("Unable to allocate new slice") case len(s2) != 1 || cap(s2) != 1: t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2) case throwsPanic(func() { Allocate(m) }): t.Fatal("Unable to allocate new map") } }
  • 166.
    func TestAllocate(t *testing.T){ var s2 []int s1 := []int{0, 1, 2} m := map[int] int{1: 1, 2: 2, 3: 3} switch { case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }): t.Fatal("Unable to allocate new slice") case len(s2) != 1 || cap(s2) != 1: t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2) case throwsPanic(func() { Allocate(m) }): t.Fatal("Unable to allocate new map") } }
  • 167.
    func TestAllocate(t *testing.T){ var s2 []int s1 := []int{0, 1, 2} m := map[int] int{1: 1, 2: 2, 3: 3} switch { case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }): t.Fatal("Unable to allocate new slice") case len(s2) != 1 || cap(s2) != 1: t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2) case throwsPanic(func() { Allocate(m) }): t.Fatal("Unable to allocate new map") } }
  • 168.
    func TestAllocate(t *testing.T){ var s2 []int s1 := []int{0, 1, 2} m := map[int] int{1: 1, 2: 2, 3: 3} switch { case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }): t.Fatal("Unable to allocate new slice") case len(s2) != 1 || cap(s2) != 1: t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2) case throwsPanic(func() { Allocate(m) }): t.Fatal("Unable to allocate new map") } }
  • 169.
    func TestAllocate(t *testing.T){ var s2 []int s1 := []int{0, 1, 2} m := map[int] int{1: 1, 2: 2, 3: 3} switch { case throwsPanic(func() { s2 = Allocate(s1, 1).([]int) }): t.Fatal("Unable to allocate new slice") case len(s2) != 1 || cap(s2) != 1: t.Fatalf("New slice should be %v not %v", make([]int, 0, 1), s2) case throwsPanic(func() { Allocate(m) }): t.Fatal("Unable to allocate new map") } }
  • 170.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 171.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 172.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 173.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 174.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 175.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 176.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 177.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 178.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 179.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 180.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 181.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 182.
    func Duplicate(i interface{})(clone interface{}) { if clone = Allocate(i); clone != nil { switch clone := ValueOf(clone); clone.Kind() { case Slice: Copy(clone, ValueOf(i)) case Map: m := ValueOf(i) for _, k := range m.Keys() { clone.SetMapIndex(k, m.MapIndex(k)) } } } return }
  • 183.
    metallic k.o. sometimes abit-buffer is just a bit-buffer
  • 184.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 185.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 186.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 187.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 188.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 189.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 190.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 191.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 192.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 193.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 194.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 195.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 196.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 197.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 198.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 199.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 200.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 201.
    package raw import ."reflect" import "unsafe" var _BYTE_SLICE Type = Typeof([]byte(nil)) type MemoryBlock interface { ByteSlice() []byte } func valueHeader(v Value) (header *SliceHeader) { if v.IsValid() { s := int(v.Type().Size()) header = &SliceHeader{ v.UnsafeAddr(), s, s } } return }
  • 202.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 203.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 204.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 205.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 206.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 207.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 208.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 209.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 210.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 211.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 212.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 213.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 214.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 215.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 216.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 217.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 218.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 219.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 220.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 221.
    func SliceHeader(i interface{})(Header *SliceHeader, Size, Align int) { switch value := Indirect(ValueOf(i)); value.Kind() { case Slice: Header = (*SliceHeader)(unsafe.Pointer(value.UnsafeAddr())) t := value.Type().Elem() Size = int(t.Size()) Align = t.Align() case Interface: Header, Size, Align = SliceHeader(value.Elem()) } return } func Scale(oldHeader *SliceHeader, oldESize, newESize int) (h *SliceHeader) { if oldHeader != nil { s := float64(oldESize) / float64(newESize) h = &SliceHeader{ Data: oldHeader.Data } h.Len = int(float64(oldHeader.Len) * s) h.Cap = int(float64(oldHeader.Cap) * s) } return }
  • 222.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 223.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 224.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 225.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 226.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 227.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 228.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 229.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 230.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 231.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 232.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 233.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 234.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 235.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 236.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 237.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 238.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 239.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 240.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 241.
    func ByteSlice(i interface{})[]byte { switch i := i.(type) { case []byte: return i case MemoryBlock: return i.ByteSlice() } var header *SliceHeader switch v := ValueOf(i); value.Kind() { case Interface, Ptr: header = valueHeader(v.Elem()) case Slice: h, s, _ := SliceHeader(i) header = Scale(h, s, 1) case String: s := v.Get() h := *(*StringHeader)(unsafe.Pointer(&s)) header = &SliceHeader{ h.Data, h.Len, h.Len } default: header = valueHeader(v) } return unsafe.Unreflect(_BYTE_SLICE, unsafe.Pointer(header)).([]byte) }
  • 242.
    go f(){}() /yourself / map/reduce for all the family
  • 243.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func() { for i := limit; i > 0; i-- { fmt.Print(<-c) produces: } 0110011101011010 }() for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 244.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func() { for i := limit; i > 0; i-- { fmt.Print(<-c) produces: } 0110011101011010 }() for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 245.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func() { for i := limit; i > 0; i-- { fmt.Print(<-c) produces: } 0110011101011010 }() for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 246.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func() { for i := limit; i > 0; i-- { fmt.Print(<-c) produces: } 0110011101011010 }() for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 247.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func() { for i := limit; i > 0; i-- { fmt.Print(<-c) produces: } 0110011101011010 }() for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 248.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func() { for i := limit; i > 0; i-- { fmt.Print(<-c) produces: } 0110011101011010 }() for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 249.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func() { for i := limit; i > 0; i-- { fmt.Print(<-c) produces: } 0110011101011010 }() for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 250.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func(in chan int) { for i := limit; i > 0; i-- { fmt.Print(<-in) produces: } 0110011101011010 }(c) for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 251.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func(in chan int) { for i := limit; i > 0; i-- { fmt.Print(<-in) produces: } 0110011101011010 }(c) for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 252.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func(in chan int) { for i := limit; i > 0; i-- { fmt.Print(<-in) produces: } 0110011101011010 }(c) for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 253.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func(in chan int) { for i := limit; i > 0; i-- { fmt.Print(<-in) produces: } 0110011101011010 }(c) for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 254.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func(in chan int) { for i := limit; i > 0; i-- { fmt.Print(<-in) produces: } 0110011101011010 }(c) for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 255.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func(in chan int) { for i := limit; i > 0; i-- { fmt.Print(<-in) produces: } 0110011101011010 }(c) for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 256.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func(in chan int) { for i := limit; i > 0; i-- { fmt.Print(<-in) produces: } 0110011101011010 }(c) for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 257.
    package main import "fmt" funcmain() { var c chan int c = make(chan int) limit := 16 go func(in chan int) { for i := limit; i > 0; i-- { fmt.Print(<-in) produces: } 0110011101011010 }(c) for i := limit; i > 0; i-- { select { case c <- 0: case c <- 1: } } }
  • 258.
    func main() { var c chan int c = make(chan int, 16) go func() { for i := 16; i > 0; i-- { fmt.Print(<-c) } }() go func() { select { produces: case c <- 0: 0110011101011010 case c <- 1: } }() for {} }
  • 259.
    func main() { var c chan int c = make(chan int, 16) go func() { for i := 16; i > 0; i-- { fmt.Print(<-c) } }() go func() { select { produces: case c <- 0: 0110011101011010 case c <- 1: } }() for {} }
  • 260.
    func main() { var c chan int c = make(chan int, 16) go func() { for i := 16; i > 0; i-- { fmt.Print(<-c) } }() go func() { select { produces: case c <- 0: 0110011101011010 case c <- 1: } }() for {} }
  • 261.
    func main() { var c chan int c = make(chan int, 16) go func() { for i := 16; i > 0; i-- { fmt.Print(<-c) } }() go func() { select { produces: case c <- 0: 0110011101011010 case c <- 1: } }() for {} }
  • 262.
    package generalise type SignalSourcefunc(status chan bool) func Wait(s SignalSource) { done := make(chan bool) defer close(done) go s(done) <-done } func WaitAll(count int, s SignalSource) { done := make(chan bool) defer close(done) go s(done) for i := 0; i < count; i++ { <- done } }
  • 263.
    package generalise type SignalSourcefunc(status chan bool) func Wait(s SignalSource) { done := make(chan bool) defer close(done) go s(done) <-done } func WaitAll(count int, s SignalSource) { done := make(chan bool) defer close(done) go s(done) for i := 0; i < count; i++ { <- done } }
  • 264.
    package generalise type SignalSourcefunc(status chan bool) func Wait(s SignalSource) { done := make(chan bool) defer close(done) go s(done) <-done } func WaitAll(count int, s SignalSource) { done := make(chan bool) defer close(done) go s(done) for i := 0; i < count; i++ { <- done } }
  • 265.
    package generalise type SignalSourcefunc(status chan bool) func Wait(s SignalSource) { done := make(chan bool) defer close(done) go s(done) <-done } func WaitAll(count int, s SignalSource) { done := make(chan bool) defer close(done) go s(done) for i := 0; i < count; i++ { <- done } }
  • 266.
    package generalise type SignalSourcefunc(status chan bool) func Wait(s SignalSource) { done := make(chan bool) defer close(done) go s(done) <-done } func WaitAll(count int, s SignalSource) { done := make(chan bool) defer close(done) go s(done) for i := 0; i < count; i++ { <- done } }
  • 267.
    package generalise type SignalSourcefunc(status chan bool) func Wait(s SignalSource) { done := make(chan bool) defer close(done) go s(done) <-done } func WaitAll(count int, s SignalSource) { done := make(chan bool) defer close(done) go s(done) for i := 0; i < count; i++ { <- done } }
  • 268.
    package generalise type SignalSourcefunc(status chan bool) func Wait(s SignalSource) { done := make(chan bool) defer close(done) go s(done) <-done } func WaitAll(count int, s SignalSource) { done := make(chan bool) defer close(done) go s(done) for i := 0; i < count; i++ { <- done } }
  • 269.
    package generalise type SignalSourcefunc(status chan bool) func Wait(s SignalSource) { done := make(chan bool) defer close(done) go s(done) <-done } func WaitAll(count int, s SignalSource) { done := make(chan bool) defer close(done) go s(done) for i := 0; i < count; i++ { <- done } }
  • 270.
    type Iteration func(k,x interface{}) bool func (i Iteration) apply(k, v interface{}, c chan bool) { go func() { c <-i(k, v) }() } func (f Iteration) Each(c interface{}) { switch c := ValueOf(c); c.Kind() { case Slice: WaitAll(c.Len(), SignalSource(func(done chan bool) { for i := 0; i < c.Len(); i++ { f.apply(i, c.Elem(i).Interface(), done) }})) case Map: WaitAll(c.Len(), SignalSource(func(done chan bool) { for _, k := range c.Keys() { f.apply(k, c.Elem(k).Interface(), done) }})) } }
  • 271.
    type Iteration func(k,x interface{}) bool func (i Iteration) apply(k, v interface{}, c chan bool) { go func() { c <-i(k, v) }() } func (f Iteration) Each(c interface{}) { switch c := ValueOf(c); c.Kind() { case Slice: WaitAll(c.Len(), SignalSource(func(done chan bool) { for i := 0; i < c.Len(); i++ { f.apply(i, c.Elem(i).Interface(), done) }})) case Map: WaitAll(c.Len(), SignalSource(func(done chan bool) { for _, k := range c.Keys() { f.apply(k, c.Elem(k).Interface(), done) }})) } }
  • 272.
    type Iteration func(k,x interface{}) bool func (i Iteration) apply(k, v interface{}, c chan bool) { go func() { c <-i(k, v) }() } func (f Iteration) Each(c interface{}) { switch c := ValueOf(c); c.Kind() { case Slice: WaitAll(c.Len(), SignalSource(func(done chan bool) { for i := 0; i < c.Len(); i++ { f.apply(i, c.Elem(i).Interface(), done) }})) case Map: WaitAll(c.Len(), SignalSource(func(done chan bool) { for _, k := range c.Keys() { f.apply(k, c.Elem(k).Interface(), done) }})) } }
  • 273.
    type Iteration func(k,x interface{}) bool func (i Iteration) apply(k, v interface{}, c chan bool) { go func() { c <-i(k, v) }() } func (f Iteration) Each(c interface{}) { switch c := ValueOf(c); c.Kind() { case Slice: WaitAll(c.Len(), SignalSource(func(done chan bool) { for i := 0; i < c.Len(); i++ { f.apply(i, c.Elem(i).Interface(), done) }})) case Map: WaitAll(c.Len(), SignalSource(func(done chan bool) { for _, k := range c.Keys() { f.apply(k, c.Elem(k).Interface(), done) }})) } }
  • 274.
    type Iteration func(k,x interface{}) bool func (i Iteration) apply(k, v interface{}, c chan bool) { go func() { c <-i(k, v) }() } func (f Iteration) Each(c interface{}) { switch c := ValueOf(c); c.Kind() { case Slice: WaitAll(c.Len(), SignalSource(func(done chan bool) { for i := 0; i < c.Len(); i++ { f.apply(i, c.Elem(i).Interface(), done) }})) case Map: WaitAll(c.Len(), SignalSource(func(done chan bool) { for _, k := range c.Keys() { f.apply(k, c.Elem(k).Interface(), done) }})) } }
  • 275.
    type Iteration func(k,x interface{}) bool func (i Iteration) apply(k, v interface{}, c chan bool) { go func() { c <-i(k, v) }() } func (f Iteration) Each(c interface{}) { switch c := ValueOf(c); c.Kind() { case Slice: WaitAll(c.Len(), SignalSource(func(done chan bool) { for i := 0; i < c.Len(); i++ { f.apply(i, c.Elem(i).Interface(), done) }})) case Map: WaitAll(c.Len(), SignalSource(func(done chan bool) { for _, k := range c.Keys() { f.apply(k, c.Elem(k).Interface(), done) }})) } }
  • 276.
    type Iteration func(k,x interface{}) bool func (i Iteration) apply(k, v interface{}, c chan bool) { go func() { c <-i(k, v) }() } func (f Iteration) Each(c interface{}) { switch c := ValueOf(c); c.Kind() { case Slice: WaitAll(c.Len(), SignalSource(func(done chan bool) { for i := 0; i < c.Len(); i++ { f.apply(i, c.Elem(i).Interface(), done) }})) case Map: WaitAll(c.Len(), SignalSource(func(done chan bool) { for _, k := range c.Keys() { f.apply(k, c.Elem(k).Interface(), done) }})) } }
  • 277.
    type Iteration func(k,x interface{}) bool func (i Iteration) apply(k, v interface{}, c chan bool) { go func() { c <-i(k, v) }() } func (f Iteration) Each(c interface{}) { switch c := ValueOf(c); c.Kind() { case Slice: WaitAll(c.Len(), SignalSource(func(done chan bool) { for i := 0; i < c.Len(); i++ { f.apply(i, c.Elem(i).Interface(), done) }})) case Map: WaitAll(c.Len(), SignalSource(func(done chan bool) { for _, k := range c.Keys() { f.apply(k, c.Elem(k).Interface(), done) }})) } }
  • 278.
    type Iteration func(k,x interface{}) bool func (i Iteration) apply(k, v interface{}, c chan bool) { go func() { c <-i(k, v) }() } func (f Iteration) Each(c interface{}) { switch c := ValueOf(c); c.Kind() { case Slice: WaitAll(c.Len(), SignalSource(func(done chan bool) { for i := 0; i < c.Len(); i++ { f.apply(i, c.Elem(i).Interface(), done) }})) case Map: WaitAll(c.Len(), SignalSource(func(done chan bool) { for _, k := range c.Keys() { f.apply(k, c.Elem(k).Interface(), done) }})) } }
  • 279.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 280.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 281.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 282.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 283.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 284.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 285.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 286.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 287.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 288.
    type Results chaninterface{} type Combination func(x, y interface{}) interface{} func (f Combination) Reduce(c, s interface{}) (r Results) { r = make(Results) go func() { Iteration(func(k, x interface{}) bool { s = f(s, x) return true }).Each(c) r <- s }() return }
  • 289.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 290.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 291.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 292.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 293.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 294.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 295.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 296.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 297.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 298.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 299.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 300.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 301.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 302.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 303.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 304.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 305.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 306.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 307.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 308.
    type Transformation func(xinterface{}) interface{} func (t Transformation) Transform(x interface{}) Value { return ValueOf(t(x)) } func (t Transformation) Map(c interface{}) (r interface{}) { r = Allocate(c) if i := MapIterator(r); i != nil { i.Each(c) } return }
  • 309.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 310.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 311.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 312.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 313.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 314.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 315.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 316.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 317.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 318.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 319.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 320.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 321.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 322.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 323.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 324.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 325.
    func MapIterator(c interface{})(i Iteration) { switch n := ValueOf(c); n.Kind() { case Slice: i = Iteration(func(k, x interface{}) bool { n.Elem(k.(int)).SetValue(t.GetValue(x)) return true }) case Map: i = Iteration(func(k, x interface{}) bool { n.SetMapIndex(ValueOf(k), t.GetValue(x)) return true }) } return }
  • 326.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 327.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 328.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 329.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 330.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 331.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 332.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 333.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 334.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 335.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 336.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 337.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 338.
    func main() { s := []int{0, 1, 2, 3, 4, 5} d := Transformation(func(x interface{}) interface{} { return x.(int) * 2 }).Map(s) sum := Combination(func(x, y interface{}) interface{} { return x.(int) + y.(int) }) fmt.Printf("s = %v, sum = %vn", s, <- sum.Reduce(s, 0)) fmt.Printf("d = %v, sum = %vn", d, <- sum.Reduce(d, 0)) } produces: s = [0 1 2 3 4 5], sum = 15 d = [0 2 4 6 8 10], sum = 30
  • 339.
    ruby can dothat! channels with atomic queues and thread variables
  • 340.
    require 'socket' require 'thread' classThreadGroup def all_but_me &block list. delete_if { |t| t.name == Thread.current.name }.each { |t| yield t } end def select *names, &block list.delete_if { |t| !names.include? t.name }.each { |t| yield t } end end
  • 341.
    class Thread def initialize self[:Q] = Queue.new end def send *messages messages.each { |m| self[:Q].enq m } end def bind_transmitter socket key? :XMIT ? raise ArgumentError : self[:XMIT] = Thread.new() { loop do (m = self[:Q].deq) == :EXIT ? Thread.current.exit : socket.puts m Thread.pass end socket.close exit } end def disconnect send "Goodbye #{name}", :EXIT end end
  • 342.
    class ChatServer <TCPServer def initialize port @receivers = ThreadGroup.new @transmitters = ThreadGroup.new @deceased = ThreadGroup.new super end def register name, socket @receivers.add(t = Thread.current) t.name = name @transmitters.add t.bind_transmitter(socket) broadcast "#{name} has joined the conversation" t.send "Welcome #{name}" end def connect socket loop do begin socket.print "Please enter your name: " register socket.readline.chomp).downcase, socket break rescue ArgumentError socket.puts "That name is already in use" end end end
  • 343.
    def send message,name = Thread.current.name @receivers.select(name) { |t| t.send message } end def broadcast message @receivers.all_but_me { |t| t.send message } end def listen socket t = Thread.current loop do message = socket.readline.chomp case message.downcase when "bye": raise EOFError when "known": list_known_users when "quit": raise SystemExit else broadcast "#{t.name}: #{message}" end end end
  • 344.
    def run while socket = accept Thread.new(socket) do |socket| begin connect socket listen socket rescue SystemExit broadcast "#{Thread.current.name} terminated this conversation" broadcast :EXIT send :EXIT @receivers.all_but_me { |t| t.transmitter.join } Kernel.exit 0 rescue EOFError disconnect end end end end end ChatServer.new(3939).run
  • 345.
    great artists steal theThompson-Pike approach to legacy C assimilation
  • 346.
    include $(GOROOT)/src/Make.inc TARG=sqlite3 CGOFILES= sqlite3.go database.go ifeq ($(GOOS),darwin) CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib else CGO_LDFLAGS=-lsqlite3 endif include $(GOROOT)/src/Make.pkg
  • 347.
    include $(GOROOT)/src/Make.inc TARG=sqlite3 CGOFILES= sqlite3.go database.go ifeq ($(GOOS),darwin) CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib else CGO_LDFLAGS=-lsqlite3 endif include $(GOROOT)/src/Make.pkg
  • 348.
    include $(GOROOT)/src/Make.inc TARG=sqlite3 CGOFILES= sqlite3.go database.go ifeq ($(GOOS),darwin) CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib else CGO_LDFLAGS=-lsqlite3 endif include $(GOROOT)/src/Make.pkg
  • 349.
    include $(GOROOT)/src/Make.inc TARG=sqlite3 CGOFILES= sqlite3.go database.go ifeq ($(GOOS),darwin) CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib else CGO_LDFLAGS=-lsqlite3 endif include $(GOROOT)/src/Make.pkg
  • 350.
    include $(GOROOT)/src/Make.inc TARG=sqlite3 CGOFILES= sqlite3.go database.go ifeq ($(GOOS),darwin) CGO_LDFLAGS=/usr/lib/libsqlite3.0.dylib else CGO_LDFLAGS=-lsqlite3 endif include $(GOROOT)/src/Make.pkg
  • 351.
    package sqlite3 // #include<sqlite3.h> import "C" import "fmt" import "os" type Database struct { handle *C.sqlite3 Filename string Flags C.int } func (db *Database) Error() os.Error { return Errno(C.sqlite3_errcode(db.handle)) }
  • 352.
    package sqlite3 // #include<sqlite3.h> import "C" import "fmt" import "os" type Database struct { handle *C.sqlite3 Filename string Flags C.int } func (db *Database) Error() os.Error { return Errno(C.sqlite3_errcode(db.handle)) }
  • 353.
    package sqlite3 // #include<sqlite3.h> import "C" import "fmt" import "os" type Database struct { handle *C.sqlite3 Filename string Flags C.int } func (db *Database) Error() os.Error { return Errno(C.sqlite3_errcode(db.handle)) }
  • 354.
    package sqlite3 // #include<sqlite3.h> import "C" import "fmt" import "os" type Database struct { handle *C.sqlite3 Filename string Flags C.int } func (db *Database) Error() os.Error { return Errno(C.sqlite3_errcode(db.handle)) }
  • 355.
    package sqlite3 // #include<sqlite3.h> import "C" import "fmt" import "os" type Database struct { handle *C.sqlite3 Filename string Flags C.int } func (db *Database) Error() os.Error { return Errno(C.sqlite3_errcode(db.handle)) }
  • 356.
    package sqlite3 // #include<sqlite3.h> import "C" import "fmt" import "os" type Database struct { handle *C.sqlite3 Filename string Flags C.int } func (db *Database) Error() os.Error { return Errno(C.sqlite3_errcode(db.handle)) }
  • 357.
    package sqlite3 // #include<sqlite3.h> import "C" import "fmt" import "os" type Database struct { handle *C.sqlite3 Filename string Flags C.int } func (db *Database) Error() os.Error { return Errno(C.sqlite3_errcode(db.handle)) }
  • 358.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 359.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 360.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 361.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 362.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 363.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 364.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 365.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 366.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 367.
    const( OK = Errno(iota) ERROR CANTOPEN = Errno(14) ) var errText = map[Errno]string { ERROR: "SQL error or missing database", CANTOPEN: "Unable to open the database file", } type Errno int func (e Errno) String() (err string) { if err = errText[e]; err == "" { err = fmt.Sprintf("errno %v", int(e)) } return }
  • 368.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 369.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 370.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 371.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 372.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 373.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 374.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 375.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 376.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 377.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 378.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 379.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 380.
    func (db *Database)Open(flags... int) (e os.Error) { db.Flags = 0 for _, v := range flags { db.Flags = db.Flags | C.int(v) } f := C.CString(db.Filename) if err := Errno(C.sqlite3_open_v2(f, &db.handle, db.Flags, nil)); err != OK { e = err } else if db.handle == nil { e = CANTOPEN } return } func (db *Database) Close() { C.sqlite3_close(db.handle) db.handle = nil }
  • 381.
    func Open(filename string,flags... int) (db *Database, e os.Error) { defer func() { if x := recover(); x != nil { db.Close() db = nil e = ERROR } }() db = &Database{ Filename: filename } if len(flags) == 0 { e = db.Open( C.SQLITE_OPEN_FULLMUTEX, C.SQLITE_OPEN_READWRITE, C.SQLITE_OPEN_CREATE ) } else { e = db.Open(flags...) } return }
  • 382.
    func Open(filename string,flags... int) (db *Database, e os.Error) { defer func() { if x := recover(); x != nil { db.Close() db = nil e = ERROR } }() db = &Database{ Filename: filename } if len(flags) == 0 { e = db.Open( C.SQLITE_OPEN_FULLMUTEX, C.SQLITE_OPEN_READWRITE, C.SQLITE_OPEN_CREATE ) } else { e = db.Open(flags...) } return }
  • 383.
    func Open(filename string,flags... int) (db *Database, e os.Error) { defer func() { if x := recover(); x != nil { db.Close() db = nil e = ERROR } }() db = &Database{ Filename: filename } if len(flags) == 0 { e = db.Open( C.SQLITE_OPEN_FULLMUTEX, C.SQLITE_OPEN_READWRITE, C.SQLITE_OPEN_CREATE ) } else { e = db.Open(flags...) } return }
  • 384.
    func Open(filename string,flags... int) (db *Database, e os.Error) { defer func() { if x := recover(); x != nil { db.Close() db = nil e = ERROR } }() db = &Database{ Filename: filename } if len(flags) == 0 { e = db.Open( C.SQLITE_OPEN_FULLMUTEX, C.SQLITE_OPEN_READWRITE, C.SQLITE_OPEN_CREATE ) } else { e = db.Open(flags...) } return }
  • 385.
    func Open(filename string,flags... int) (db *Database, e os.Error) { defer func() { if x := recover(); x != nil { db.Close() db = nil e = ERROR } }() db = &Database{ Filename: filename } if len(flags) == 0 { e = db.Open( C.SQLITE_OPEN_FULLMUTEX, C.SQLITE_OPEN_READWRITE, C.SQLITE_OPEN_CREATE ) } else { e = db.Open(flags...) } return }
  • 386.
    func Open(filename string,flags... int) (db *Database, e os.Error) { defer func() { if x := recover(); x != nil { db.Close() db = nil e = ERROR } }() db = &Database{ Filename: filename } if len(flags) == 0 { e = db.Open( C.SQLITE_OPEN_FULLMUTEX, C.SQLITE_OPEN_READWRITE, C.SQLITE_OPEN_CREATE ) } else { e = db.Open(flags...) } return }
  • 387.
    func Open(filename string,flags... int) (db *Database, e os.Error) { defer func() { if x := recover(); x != nil { db.Close() db = nil e = ERROR } }() db = &Database{ Filename: filename } if len(flags) == 0 { e = db.Open( C.SQLITE_OPEN_FULLMUTEX, C.SQLITE_OPEN_READWRITE, C.SQLITE_OPEN_CREATE ) } else { e = db.Open(flags...) } return }
  • 388.
    func Open(filename string,flags... int) (db *Database, e os.Error) { defer func() { if x := recover(); x != nil { db.Close() db = nil e = ERROR } }() db = &Database{ Filename: filename } if len(flags) == 0 { e = db.Open( C.SQLITE_OPEN_FULLMUTEX, C.SQLITE_OPEN_READWRITE, C.SQLITE_OPEN_CREATE ) } else { e = db.Open(flags...) } return }
  • 389.
    package main // #include"ruby.h" import "C" import "fmt" import "os" type VALUE struct { cptr *C.VALUE } func main() { var stack_frame VALUE defer func() { C.ruby_cleanup(0) }() C.ruby_sysinit(len(os.Args), &os.Args[0]) C.ruby_init_stack(stack_frame.cptr) C.ruby_init() C.ruby_init_loadpath() run_ruby() }
  • 390.
    package main // #include"ruby.h" import "C" import "fmt" import "os" type VALUE struct { cptr *C.VALUE } func main() { var stack_frame VALUE defer func() { C.ruby_cleanup(0) }() C.ruby_sysinit(len(os.Args), &os.Args[0]) C.ruby_init_stack(stack_frame.cptr) C.ruby_init() C.ruby_init_loadpath() run_ruby() }
  • 391.
    package main // #include"ruby.h" import "C" import "fmt" import "os" type VALUE struct { cptr *C.VALUE } func main() { var stack_frame VALUE defer func() { C.ruby_cleanup(0) }() C.ruby_sysinit(len(os.Args), &os.Args[0]) C.ruby_init_stack(stack_frame.cptr) C.ruby_init() C.ruby_init_loadpath() run_ruby() }
  • 392.
    package main // #include"ruby.h" import "C" import "fmt" import "os" type VALUE struct { cptr *C.VALUE } func main() { var stack_frame VALUE defer func() { C.ruby_cleanup(0) }() C.ruby_sysinit(len(os.Args), &os.Args[0]) C.ruby_init_stack(stack_frame.cptr) C.ruby_init() C.ruby_init_loadpath() run_ruby() }
  • 393.
    package main // #include"ruby.h" import "C" import "fmt" import "os" type VALUE struct { cptr *C.VALUE } func main() { var stack_frame VALUE defer func() { C.ruby_cleanup(0) }() C.ruby_sysinit(len(os.Args), &os.Args[0]) C.ruby_init_stack(stack_frame.cptr) C.ruby_init() C.ruby_init_loadpath() run_ruby() }
  • 394.
    package main // #include"ruby.h" import "C" import "fmt" import "os" type VALUE struct { cptr *C.VALUE } func main() { var stack_frame VALUE defer func() { C.ruby_cleanup(0) }() C.ruby_sysinit(len(os.Args), &os.Args[0]) C.ruby_init_stack(stack_frame.cptr) C.ruby_init() C.ruby_init_loadpath() run_ruby() }
  • 395.
    package main // #include"ruby.h" import "C" import "fmt" import "os" type VALUE struct { cptr *C.VALUE } func main() { var stack_frame VALUE defer func() { C.ruby_cleanup(0) }() C.ruby_sysinit(len(os.Args), &os.Args[0]) C.ruby_init_stack(stack_frame.cptr) C.ruby_init() C.ruby_init_loadpath() run_ruby() }
  • 396.
    package main // #include"ruby.h" import "C" import "fmt" import "os" type VALUE struct { cptr *C.VALUE } func main() { var stack_frame VALUE defer func() { C.ruby_cleanup(0) }() C.ruby_sysinit(len(os.Args), &os.Args[0]) C.ruby_init_stack(stack_frame.cptr) C.ruby_init() C.ruby_init_loadpath() run_ruby() }
  • 397.
    func run_ruby() { C.rb_require("sum.rb") C.rb_eval_string("$summer = Summer.new") C.rb_eval_string("$result = $summer.sum(10)") result := C.rb_gv_get("result") fmt.Printf("Result = %vn", C.NUM2INT(result)) }
  • 398.
  • 399.
  • 400.
    homework embedded your favouriteruby in go you’ll need a dynamic shared library
  • 401.
    homework embedded your favouriteruby in go you’ll need a dynamic shared library the Ruby header files
  • 402.
    homework embedded your favouriteruby in go you’ll need a dynamic shared library and the Ruby header files the non-gcc go toolchain
  • 403.
    homework embedded your favouriteruby in go you’ll need a dynamic shared library and the Ruby header files the non-gcc go toolchain and some code that looks a bit like this...
  • 404.
  • 405.
  • 406.
  • 407.
  • 408.

Editor's Notes