comp-520 golite projectcs520/2020/slides/10-golite.pdf · comp-520 – golite project vincent...
TRANSCRIPT
![Page 1: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/1.jpg)
COMP-520 – GoLite project
Vincent Foley-Bourgon
Sable LabMcGill University
Winter 2020
![Page 2: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/2.jpg)
Agenda
I Overview of Go
I Why Go for a compiler class?
I GoLite
Feel free to ask questions at any time.
2 / 44
![Page 3: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/3.jpg)
![Page 4: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/4.jpg)
Renee French, licensed under CC 3.0 Attributions
![Page 5: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/5.jpg)
Go
I Created by Rob Pike, Ken Thompson and RobertGriesemer
I Google employees
I Not a Google project like Gmail; open source
I Initial release in 2009
I 1.0 release in 2012
5 / 44
![Page 6: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/6.jpg)
MotivationI Simplify development
class AbstractSingletonProxyFactoryBean { ... }
I Built-in concurrency support
I Faster compilation
6 / 44
![Page 7: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/7.jpg)
MotivationI Simplify development
class AbstractSingletonProxyFactoryBean { ... }
I Built-in concurrency support
I Faster compilation
6 / 44
![Page 8: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/8.jpg)
MotivationI Simplify development
class AbstractSingletonProxyFactoryBean { ... }
I Built-in concurrency support
I Faster compilation
6 / 44
![Page 9: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/9.jpg)
MotivationI Simplify development
class AbstractSingletonProxyFactoryBean { ... }
I Built-in concurrency support
I Faster compilation
6 / 44
![Page 10: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/10.jpg)
Features
I Imperative
I Goroutines and channels
I Interfaces and methods
I Closures
I defer
I Maps and slices
I Multiple return values
I Module system
I Garbage collection
I Optional semi-colons (tricky scanner!)
7 / 44
![Page 11: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/11.jpg)
Notable missing features
I User-defined parametrized types (source of 95% of all Goarguments online)
I Exceptions
I Classes and inheritance
I Operator overloading
8 / 44
![Page 12: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/12.jpg)
Example Go program
package main
import "fmt"
func fib(n int) int {
a, b := 0, 1
for i := 0; i < n; i++ {
a, b = b, a+b
}
return a
}
func main() {
var f int = fib (42)
fmt.Println(f)
}
9 / 44
![Page 13: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/13.jpg)
Who uses Go?
I Google
I GitHub
I PayPal
I Twitch
I Dropbox
I Netflix
I New York Times
I Many others 1
Extremely quick adoption!
1https://github.com/golang/go/wiki/GoUsers10 / 44
![Page 14: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/14.jpg)
Who uses Go?
The authors expected Java and C++ programmers to be theprimary Go audience.
In actual fact, Go is more popular with Python, Ruby andother dynamically typed languages programmers.
Why?
I Better performance
I Static typing
I Good concurrency support
I Good libraries and tools
I Can deploy a single binary file
11 / 44
![Page 15: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/15.jpg)
Who uses Go?
The authors expected Java and C++ programmers to be theprimary Go audience.
In actual fact, Go is more popular with Python, Ruby andother dynamically typed languages programmers.
Why?
I Better performance
I Static typing
I Good concurrency support
I Good libraries and tools
I Can deploy a single binary file
11 / 44
![Page 16: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/16.jpg)
Useful addresses
I http://golang.org
I http://play.golang.org
I http://golang.org/ref/spec
12 / 44
![Page 17: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/17.jpg)
Why Go for a compilerclass?
![Page 18: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/18.jpg)
Why use Go for a compiler class?Useful and popular
It is more fun to write a compiler for a language that is aliveand kicking than for a made-up language (minilang) or for adead language (Pascal).
Writing a compiler forces you to really learn the language, anice addition on your C.V.!
14 / 44
![Page 19: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/19.jpg)
Why use Go for a compiler class?Simple language
Go is simpler than a lot of other popular languages such asJava or C++.
Go is surprisingly quick to learn.
Not nearly as tricky as MATLAB, JavaScript or PHP.
15 / 44
![Page 20: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/20.jpg)
Why use Go for a compiler class?Detailed online specification
You can find pretty much everything you need to know aboutGo on a single page: http://golang.org/ref/spec
The syntax is described in EBNF notation.(Warning! Ambiguous!)
Less specification work for the T.A. ;-)
16 / 44
![Page 21: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/21.jpg)
Why use Go for a compiler class?Encompasses all the classical compiler phases
The things you learn in class and from reading the textbookapply to writing a Go compiler. It doesn’t have specializedphases like pre-processing or macro expansion.
17 / 44
![Page 22: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/22.jpg)
Why use Go for a compiler class?Go is open source
Parser used to be written with bison (now hand-written)
The old sources of the parser can be found on Github (e.g. 1.2release tag)
You can look, do not copy/paste!
18 / 44
![Page 23: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/23.jpg)
Why use Go for a compiler class?Your work is publishable!
Not only will you learn some Go for this class, but you canpublish the complete compiler on GitHub after the class andinclude it on your C.V.!
19 / 44
![Page 24: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/24.jpg)
Why use Go for a compiler class?External resources
We know that previous year’s submissions are availableonline. We have 3 requirements for this class:
1. You must come up with your own solutions; anyinspiration that comes from other sources must bereported and may not replace your own work.
2. No copying from previous years, even with citation; nocode/tests may be copied even in part (1 line is too many).
3. No grading material may be used at any point, under anycircumstance, nor may it be published.
You are responsible for ensuring all material you use ispermitted. If in doubt, please ask!
20 / 44
![Page 25: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/25.jpg)
![Page 26: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/26.jpg)
Features
I Imperative
I Goroutines and channels
I Interfaces and methods
I Closures
I defer
I Maps and slices
I Multiple return values
I Module system
I Garbage collection
I Optional semi-colons
22 / 44
![Page 27: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/27.jpg)
Features
I Imperative
I Goroutines and channels
I Interfaces and methods
I Closures
I defer
I Maps and slices
I Multiple return values
I Module system
I Garbage collection
I Optional semi-colons
23 / 44
![Page 28: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/28.jpg)
Is this still Go?
I You have a few weeks to build the compiler (took 2 yearsbefore first Go release)
I It still is a lot of work (likely more than you ever put in aclass)
I You can add more features when the course is finished :)
24 / 44
![Page 29: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/29.jpg)
Lexical syntax
Go GoLiteEncoding UTF-8 ASCIINumber precision Arbitrary FixedIntegers 255, 0377, 0xff 255, 0377, 0xffFloats 0.12, .12, 12. 0.12, .12, 12.Imaginary 3i No thanksStrings “Chrono\n” “Marle\n”Raw strings ‘Lucca\n‘ ‘Ayla\n‘Keywords Bunch of ’em Slighlty moreLine comments // Sabin // EdgarBlock comments /* Celes */ /* Locke */Semicolons Optional Optional
25 / 44
![Page 30: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/30.jpg)
Basic typesintfloat64boolrune (char)stringuint8uint16uint32uint64int8int16int32int64float32complex64complex128byte
26 / 44
![Page 31: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/31.jpg)
General structure
// Go structure
// package declaration
// import statements
// vars , consts , types , functions
27 / 44
![Page 32: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/32.jpg)
General structure
// GoLite structure
// package declaration
// vars , types , functions
28 / 44
![Page 33: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/33.jpg)
Declarations
In Go, top-level declarations can be in any order
In GoLite, declarations must come before their first use// Valid in Go; invalid in GoLite
var x int = max(y, 32)
var y = 42
func max(a, b int) int {
if a > b {
return a
} else {
return b
}
}
29 / 44
![Page 34: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/34.jpg)
Variable declarations
var x1, x2 int // implicitly initialized to 0
var y int = 12
var z = 24
var (
x1, x2 int
y int = 12
z = 24
)
GoLite should support all of these.
30 / 44
![Page 35: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/35.jpg)
Variable declarations
var x1, x2 int // implicitly initialized to 0
var y int = 12
var z = 24
var (
x1, x2 int
y int = 12
z = 24
)
GoLite should support all of these.
30 / 44
![Page 36: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/36.jpg)
Constant declarations
GoLite won’t support constant declarations.
31 / 44
![Page 37: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/37.jpg)
Type declarations
type natural int
type real float64
type (
point struct {
x, y, z real
}
)
32 / 44
![Page 38: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/38.jpg)
Function declarations
// Allowed in GoLite
func f(a int , b int) int {
...
}
// Allowed in GoLite
func f(a, b int) int {
...
}
// Not allowed in GoLite
func f(int , int) int {
...
}
I GoLite functions should always have a body.
I We’ll allow zero or one return value.
33 / 44
![Page 39: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/39.jpg)
StatementsDeclarations
I Variables and types can be declared within functions.
I Short variable declaration allowed within functions.func demo() {
type number int
var x int = 12
best_ff := 6
}
34 / 44
![Page 40: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/40.jpg)
StatementsLoops
I All loops use the for keyword
I No parentheses, mandatory braces
I GoLite should not support for/range loops// Infinite loop
for {
...
}
// ‘‘While ’’ loop
for x < 10 {
...
}
// ‘‘For ’’ loop
for i := 0; i < 10; i++ {
...
}
35 / 44
![Page 41: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/41.jpg)
StatementsLoops
We’ll support unlabelled break and continue in loops
36 / 44
![Page 42: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/42.jpg)
StatementsIf
I No parentheses, mandatory bracesif x == 0 {
...
}
if x < 0 {
...
} else {
...
}
if x < 0 {
...
} else if x > 0 {
...
} else {
...
}
37 / 44
![Page 43: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/43.jpg)
StatementsSwitch
I Allows expressions in cases
I No explicit break (although it may be used)switch x {
case 0, 1, 2: println("Small")
default: println("Other")
}
switch { // Same as switch true
case x < 0: println("Negative")
case x > 0: println("Positive")
default: println("Zero")
}
38 / 44
![Page 44: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/44.jpg)
Expressions
Literals 42, 3.14, "Go", ‘H’
Identifiers x, my dog, Alakazou
Unary expressions !x, +y, -(a*b), ^0
Binary expressions a || b, 3 + x, 1 << 12
Function calls fib(42), max(0, 1)
Casts int(3.4), mytype(x)
Indexing slice[0]
Selection point.x
39 / 44
![Page 45: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/45.jpg)
Built-ins
In Go:
I Look like function calls
I Not reserved keywords
I Can accept a type as a first parameter (make([]int, 4))
I Can be polymorphic (append())
Real tricky to parse function calls, casts and builtins nicely
40 / 44
![Page 46: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/46.jpg)
Built-ins
In GoLite:
I Reserved keywords to make parsing easier
I Only a subset (print, println, append, len, cap)
I Limited functionality
41 / 44
![Page 47: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/47.jpg)
References
I Go presentation:http://www.youtube.com/watch?v=rKnDgT73v8s
I Gopher: http://golang.org/doc/gopher/frontpage.png
I Gopher + helmet: http://golang.org/doc/gopher/pencil/gopherhelmet.jpg
I Xkcd, compiling: http://xkcd.com/303/
42 / 44
![Page 48: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/48.jpg)
Advice
I This is a project that takes a lot of time: start milestonesearly!
I Pick an implementation language that you know wellenough to not get painted into a corner.
I Be careful with your AST design, it’s extremely important.
I Don’t be afraid of asking questions and using theFacebook group.
43 / 44
![Page 49: COMP-520 GoLite projectcs520/2020/slides/10-golite.pdf · COMP-520 – GoLite project Vincent Foley-Bourgon Sable Lab McGill University Winter 2020. Agenda I Overview of Go I Why](https://reader035.vdocuments.site/reader035/viewer/2022070901/5f4e5297bc3bd80b8e5e8dbf/html5/thumbnails/49.jpg)
Gophers!Thanks Google :)
44 / 44