understanding
|
|
- Shawn Jessie Davidson
- 5 years ago
- Views:
Transcription
1 understanding
2 thanks
3 welcome every single one of you
4 agenda what is nil? what is nil in Go? what does nil mean? is nil useful?
5 nil? you misspelled null
6 how I learn words
7 how I learn words
8 etymology nil Latin nihil meaning nothing null Latin ne + ullus meaning not any none Old English ne + ān meaning not one
9 names for the number zero in English - zero null duck nada zip naught aught - cipher love nil zilch the letter o nought ought source: wikipedia
10 nil is (a) zero
11 interlude a bit of history
12
13 I call it my billion-dollar mistake. It was the invention of the null reference in At that time, I was designing the first comprehensive type system for references in an object oriented language. - Sir C.A.R. Hoare
14 panic: runtime error: invalid memory address or nil pointer dereference
15 Uncaught TypeError: undefined is not a function
16
17 nil leads to panic
18 panic leads to fear by danpawley on Flickr
19 fear leads to by korymatthew on Flickr
20 λ functional programming
21 Functional Go? Thanks, but no - francesc at dotgo.eu 2015
22 there are many ways, nil is the Go way
23 </interlude>
24 zero values what are they?
25 zero values bool false pointers nil numbers 0 slices nil string "" maps nil channels nil functions nil interfaces nil
26 zero values for struct types type Person struct { AgeYears int Name string Friend []Person } var p Person // Person{0, "", nil}
27 the type of nil
28 ... unless the value is the predeclared identifier nil, which has no type - Go language specification
29 untyped zero a := false a := "" a := 0 // a := int(0) a := 0.0 // a := float64(0) a := nil // use of untyped nil
30 nil is a predeclared identifier representing the zero value for a pointer, channel, func, interface, map, or slice type. - Go documentation for builtin package
31 nil is a predeclared identifier representing the zero value for a pointer, channel, func, interface, map, or slice type. - Go documentation for builtin package
32 twenty-five* keywords break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var * plus the five secret ones, obviously
33 predefined vs keyword // YOLO var nil = errors.new( \_(ツ)_/ ) * For extra evilness: place at the end of doc.go
34 zero values what do they mean?
35 kinds of nil pointers slices maps channels functions interfaces
36 kinds of nil pointers slices maps channels functions interfaces
37 pointers in Go - they point to a position in memory - similar to C or C++, but - no pointer arithmetic memory safety - garbage collection
38 nil pointer - points to nil a.k.a. nothing - zero value of pointers
39 kinds of nil pointers slices maps channels functions interfaces
40 slice internals []byte ptr *elem len int cap int
41 a slice with five elements []byte ptr len 5 cap 5 [5]byte s := make([]byte, 5)
42 nil slice []byte ptr nil len 0 cap 0 var s []byte
43 kinds of nil pointers slices maps channels functions interfaces
44 channels, maps, and functions ptr *something
45 channels, maps, and functions ptr implementation * implementations might not be cloud shaped
46 channels, maps, and functions ptr nil
47 kinds of nil pointers slices maps channels functions interfaces
48 (type, value)
49 var s fmt.stringer // Stringer (nil, nil) fmt.println(s == nil) // true
50 (nil, nil) equals nil
51 var p *Person // nil of type *Person var s fmt.stringer = p // Stringer (*Person, nil) fmt.println(s == nil) // false
52 (*Person, nil) doesn t equal nil
53 when is nil not nil?
54 when is nil not nil? func do() error { var err *doerror return err } // error (*doerror, nil) // nil of type *doerror func main() { err := do() fmt.println(err == nil) } // error (*doerror, nil) // false
55 do not declare concrete error vars
56 nil is not nil func do() *doerror { // nil of type *doerror return nil } func main() { err := do() fmt.println(err == nil) } // nil of type *doerror // true
57 nil is not nil func do() *doerror { return nil } // nil of type *doerror func wrapdo() error { return do() } // error (*doerror, nil) // nil of type *doerror func main() { err := wrapdo() fmt.println(err == nil) } // error (*doerror, nil) // false
58 do not return concrete error types
59 nil is not nil * for some kinds of nil
60 kinds of nil pointers point to nothing slices have no backing array maps are not initialized channels are not initialized functions are not initialized interfaces have no value assigned, not even a nil pointer
61 Make the zero value useful - Rob Pike in his Go Proverbs
62 how are these useful? pointers slices maps channels functions interfaces
63 how are these useful? pointers slices maps channels functions interfaces
64 pointers var p *int p == nil // true *p // panic: invalid memory address or nil pointer dereference
65 coding time
66 implement Sum type tree struct { v int l *tree r *tree } func (t *tree) Sum() int
67 a first solution func (t *tree) Sum() int { sum := t.v 6 if t.l!= nil { sum += t.l.sum() } if t.r!= nil { sum += t.r.sum() } return sum }
68 issues Code repetition: if v!= nil { v.m() } Panic when t is nil var t *tree sum := t.sum() // panic: invalid memory address or nil pointer dereference
69 pointer receivers type person struct {} func sayhi(p *person) { fmt.println( hi ) } func (p *person) sayhi() { fmt.println( hi ) } var p *person p.sayhi() // hi
70 nil receivers are useful 零
71 nil receivers are useful: Sum func (t *tree) Sum() int { if t == nil { return 0 } return t.v + t.l.sum() + t.r.sum() }
72 nil receivers are useful: String func (t *tree) String() string { if t == nil { return "" } return fmt.sprint(t.l, t.v, t.r) }
73 nil receivers are useful: Find func (t *tree) Find(v int) bool { if t == nil { return false } return t.v == v t.l.find(v) t.r.find(v) }
74 keep nil useful if possible, if not NewX()
75 how are these useful? pointers slices maps channels functions interfaces
76 nil slices var s []slice len(s) // 0 cap(s) // 0 for range s // iterates zero times s[i] // panic: index out of range
77 append on nil slices var s []int for i := 0; i < 10; i++ { fmt.printf("len: %2d cap: %2d\n", len(s), cap(s)) s = append(s, i) }
78 $ go run slices.go len: len: len: len: len: len: len: len: len: len: cap: 0 cap: 1 cap: 2 cap: 4 cap: 4 cap: 8 cap: 8 cap: 8 cap: 8 cap: 16 [] s is nil! [0] allocation [0 1] reallocation [0 1 2] reallocation [ ] [ ] reallocation [ ] [ ] [ ] [ ] reallocation
79 use nil slices they re often fast enough
80 how are these useful? pointers slices maps channels functions interfaces
81 nil maps var m map[t]u len(m) // 0 for range m // iterates zero times v, ok := m[i] // zero(u), false m[i] = x // panic: assignment to entry in nil map
82 using maps func NewGet(url string, headers map[string]string) (*http.request, error) { req, err := http.newrequest(http.methodget, url, nil) if err!= nil { return nil, err } for k, v := range headers { req.header.set(k, v) } return req, nil }
83 using maps NewGet( " map[string]string{ "USER_AGENT": "golang/gopher", }, )
84 $ go run request.go GET / HTTP/1.1 Host: google.com User_agent: golang/gopher
85 using empty maps NewGet(" map[string]string{})
86 $ go run request.go GET / HTTP/1.1 Host: google.com
87 using empty maps NewGet(" map[string]string{})
88 nil maps are valid empty maps NewGet(" nil)
89 $ go run request.go GET / HTTP/1.1 Host: google.com
90 use nil maps as read-only empty maps
91 how are these useful? pointers slices maps channels functions interfaces
92 nil channels var c chan t <- c // blocks forever c <- x // blocks forever close(c) // panic: close of nil channel
93 coding time
94 b a func merge(out chan<- int, a, b <-chan int) out
95 a naive solution func merge(out chan<- int, a, b <-chan int) { for { select { case v := <-a: out <- v case v := <-b: out <- v } } }
96 $ go run naive.go
97 closed channels var c chan t v, ok <- c // zero(t), false c <- x // panic: send on closed channel close(c) // panic: close of nil channel
98 a naive solution func merge(out chan<- int, a, b <-chan int) { for { select { case v := <-a: out <- v case v := <-b: out <- v } } }
99 checking for closed chans case v, ok := <-a: if!ok { aclosed = true continue } out <- v // analogous code for case b
100 checking for closed chans func merge(out chan<- int, a, b <-chan int) { var aclosed, bclosed bool for!aclosed!bclosed { select { case v, ok := <-a: if!ok { aclosed = true; continue } out <- v case v, ok := <-b: if!ok { bclosed = true; continue } out <- v } } }
101 $ go run checkforclosed.go fatal error: all goroutines are asleep - deadlock! goroutine 1 [chan receive]: main.main() /Users/campoy/src/github.com/campoy/talks/nil/talk/code/chans. go:97 +0x15a exit status 2
102 and closing channel out func merge(out chan<- int, a, b <-chan int) { var aclosed, bclosed bool for!aclosed!bclosed { select { case v, ok := <-a: if!ok { aclosed = true; continue } out <- v case v, ok := <-b: if!ok { bclosed = true; continue } out <- v } } close(out) }
103 and closing channel out func merge(out chan<- int, a, b <-chan int) { var aclosed, bclosed bool for!aclosed!bclosed { select { case v, ok := <-a: if!ok { aclosed = true; continue } out <- v case v, ok := <-b: if!ok { bclosed = true; continue } out <- v } } close(out) }
104 $ go run closingout.go
105 ship it! Fancy Gopher by Renee French
106 by hzeller on Flickr
107 let s log case v, ok := <-a: if!ok { aclosed = true fmt.println("a is now closed") continue } out <- v // analogous code for case b
108 $ go run withlogs.go b is now closed b is now closed 1 b is now closed b is now closed 1 a is now closed
109 let s log var aclosed, bclosed bool for!aclosed!bclosed { select { case v, ok := <-a: if!ok { aclosed = true; continue } out <- v case v, ok := <-b: if!ok { bclosed = true; continue } out <- v } } close(out)
110 can we switch off a chan?
111 nil channels var c chan t <- c // blocks forever c <- x // blocks forever close(c) // panic: close of nil channel
112 switching off a channel case v, ok := <-a: if!ok { aclosed = true fmt.println("a is now closed") continue } out <- v // analogous code for case b
113 switching off a channel case v, ok := <-a: if!ok { a = nil fmt.println("a is now closed") continue } out <- v // analogous code for case b
114 switching off a channel; no logs func merge(out chan<- int, a, b <-chan int) { for a!= nil b!= nil { select { case v, ok := <-a: if!ok { a = nil; continue } out <- v case v, ok := <-b: if!ok { b = nil; continue } out <- v } } close(out) }
115 $ go run closingout.go
116 fancy party time! Fancy Gopher by Renee French
117 use nil chans to disable a select case
118 how are these useful? pointers slices maps channels functions interfaces
119 nil funcs Go has first-class functions functions can be used as struct fields they need a zero value; logically it is nil type Foo struct { f func() error }
120 nil funcs for default values lazy initialization of variables nil can also imply default behavior func NewServer(logger func(string, interface{})) { if logger == nil { logger = log.printf } logger("initializing %s", os.getenv("hostname")) }
121 how are these useful? pointers slices maps channels functions interfaces
122 interfaces The nil interface is used as a signal if err!= nil { }
123 why does nil *Person not equal nil interface? 零
124 summer type Summer interface { func Sum() int }
125 summer var t *tree var s Summer = t fmt.println(t == nil, s.sum()) // true 0
126 summer type ints []int func (i ints) Sum() int { s := 0 for _, v := range i { s += v } return s }
127 summer var i ints var s Summer = i fmt.println(i == nil, s.sum()) // true 0
128 nil values can satisfy interfaces 零
129 nil values and default values func dosum(s Summer) int { if s == nil { return 0 } return s.sum() }
130 nil values and default values var t *tree dosum(t) // (*tree, nil) var i ints dosum(i) // (ints, nil) dosum(nil) // (nil, nil)
131 nil values and default values http.listenandserve("localhost:8080", nil)
132 use nil interfaces to signal default 零
133
134 nil is useful
135 nil is useful pointers methods can be called on nil receivers slices perfectly valid zero values maps perfect as read-only values channels essential for some concurrency patterns functions needed for completeness interfaces the most used signal in Go (err!= nil)
136 nil is an important part Go 零
137 let s not avoid nil
138 let s embrace nil golang.org/s/nil
Go Cheat Sheet. Operators. Go in a Nutshell. Declarations. Basic Syntax. Hello World. Functions. Comparison. Arithmetic. Credits
Credits Go Cheat Sheet Most example code taken from A Tour of Go, which is an excellent introduction to Go. If you're new to Go, do that tour. Seriously. Original HTML Cheat Sheet by Ariel Mashraki (a8m):
More informationGO IDIOMATIC CONVENTIONS EXPLAINED IN COLOR
GO IDIOMATIC CONVENTIONS EXPLAINED IN COLOR REVISION 1 HAWTHORNE-PRESS.COM Go Idiomatic Conventions Explained in Color Published by Hawthorne-Press.com 916 Adele Street Houston, Texas 77009, USA 2013-2018
More informationGo Forth and Code. Jonathan Gertig. CSC 415: Programing Languages. Dr. Lyle
J o n a t h a n G e r t i g P a g e 1 Go Forth and Code Jonathan Gertig CSC 415: Programing Languages Dr. Lyle 2013 J o n a t h a n G e r t i g P a g e 2 Go dogs Go or A Brief History of Go 6 years ago
More informationgo get my/vulnerabilities Green threads are not eco friendly threads
go get my/vulnerabilities Green threads are not eco friendly threads 1 Who ( Web Mobile ) penetration tester Code reviewer Programmer Roberto Clapis @empijei 2 Go Google s language Born in 2007 (quite
More informationLet s Go! Akim D le, Etienne Renault, Roland Levillain. June 8, TYLA Let s Go! June 8, / 58
Let s Go! Akim Demaille, Etienne Renault, Roland Levillain June 8, 2017 TYLA Let s Go! June 8, 2017 1 / 58 Table of contents 1 Overview 2 Language Syntax 3 Closure 4 Typed functional programming and Polymorphism
More informationCOMP-520 GoLite Tutorial
COMP-520 GoLite Tutorial Alexander Krolik Sable Lab McGill University Winter 2019 Plan Target languages Language constructs, emphasis on special cases General execution semantics Declarations Types Statements
More informationGo for Java Developers
Go for Java Developers Stoyan Rachev May 26-27 16, Sofia 1 Agenda Introduction Variables and Control Flow Types and Data Structures Functions Methods and Interfaces Concurrency Conclusion 2 What is Go?
More informationLecture 22 Go http://xkcd.com/979/ Go developed ~2007 at Google by Robert Griesemer, Rob Pike, Ken Thompson open sourced in 2009 compiled, statically typed very fast compilation C-like syntax garbage collection
More informationIntroduction to the Go Programming Language
Introduction to the Go Programming Language Basics, Concurrency and Useful Packages Fabian Wenzelmann April 6, 2017 F. Wenzelmann Introduction to Go April 6, 2017 1 / 114 Why Go? What is Go? Go is a programming
More informationGO SHORT INTERVIEW QUESTIONS EXPLAINED IN COLOR
GO SHORT INTERVIEW QUESTIONS EXPLAINED IN COLOR REVISION 1 HAWTHORNE-PRESS.COM Go Short Interview Questions Explained in Color Published by Hawthorne-Press.com 916 Adele Street Houston, Texas 77009, USA
More informationPierce Ch. 3, 8, 11, 15. Type Systems
Pierce Ch. 3, 8, 11, 15 Type Systems Goals Define the simple language of expressions A small subset of Lisp, with minor modifications Define the type system of this language Mathematical definition using
More informationCS201- Introduction to Programming Current Quizzes
CS201- Introduction to Programming Current Quizzes Q.1 char name [] = Hello World ; In the above statement, a memory of characters will be allocated 13 11 12 (Ans) Q.2 A function is a block of statements
More informationGo Tutorial. To do. A brief, gentle intro to Go. Next Networking. q Today
Go Tutorial To do q Today A brief, gentle intro to Go q Next Networking About Go Developed by Google Webpage: https://golang.org/ Concurrency was a priority in the language design A bit of a mix between
More informationThe Go Programming Language. Frank Roberts
The Go Programming Language Frank Roberts frank.roberts@uky.edu - C++ (1983), Java (1995), Python (1991): not modern - Java is 18 years old; how has computing changed in 10? - multi/many core - web programming
More informationCS31 Discussion 1E Spring 17 : week 08
CS31 Discussion 1E Spring 17 : week 08 TA: Bo-Jhang Ho bojhang@cs.ucla.edu Credit to former TA Chelsea Ju Project 5 - Map cipher to crib Approach 1: For each pair of positions, check two letters in cipher
More informationC Review. MaxMSP Developers Workshop Summer 2009 CNMAT
C Review MaxMSP Developers Workshop Summer 2009 CNMAT C Syntax Program control (loops, branches): Function calls Math: +, -, *, /, ++, -- Variables, types, structures, assignment Pointers and memory (***
More informationDistributed Systems. 02r. Go Programming. Paul Krzyzanowski. TA: Yuanzhen Gu. Rutgers University. Fall 2015
Distributed Systems 02r. Go Programming Paul Krzyzanowski TA: Yuanzhen Gu Rutgers University Fall 2015 September 15, 2015 CS 417 - Paul Krzyzanowski 1 Motivation In the current world, languages don't help
More informationdeveloped ~2007 by Robert Griesemer, Rob Pike, Ken Thompson open source
Go developed ~2007 by Robert Griesemer, Rob Pike, Ken Thompson open source compiled, statically typed syntax looks sort of like C garbage collection built-in concurrency no classes or type inheritance
More informationIntroduzione a Go e RPC in Go
Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Introduzione a Go e RPC in Go Corso di Sistemi Distribuiti e Cloud Computing A.A. 2017/18 Valeria Cardellini
More informationHomework #3 CS2255 Fall 2012
Homework #3 CS2255 Fall 2012 MULTIPLE CHOICE 1. The, also known as the address operator, returns the memory address of a variable. a. asterisk ( * ) b. ampersand ( & ) c. percent sign (%) d. exclamation
More informationCS 61C: Great Ideas in Computer Architecture. C Arrays, Strings, More Pointers
CS 61C: Great Ideas in Computer Architecture C Arrays, Strings, More Pointers Instructor: Justin Hsia 6/20/2012 Summer 2012 Lecture #3 1 Review of Last Lecture C Basics Variables, Functions, Flow Control,
More informationFlow Control: Branches and loops
Flow Control: Branches and loops In this context flow control refers to controlling the flow of the execution of your program that is, which instructions will get carried out and in what order. In the
More informationArrays Arrays and pointers Loops and performance Array comparison Strings. John Edgar 2
CMPT 125 Arrays Arrays and pointers Loops and performance Array comparison Strings John Edgar 2 Python a sequence of data access elements with [index] index from [0] to [len-1] dynamic length heterogeneous
More informationSummary of Go Syntax /
Summary of Go Syntax 02-201 / 02-601 Can declare 1 or more variables in same var statement Variables Can optionally provide initial values for all the variables (if omitted, each variable defaults to the
More informationWilliam Kennedy. Brian Ketelsen Erik St. Martin Steve Francia FOREWORD BY MANNING WITH
SAMPLE CHAPTER William Kennedy WITH FOREWORD BY Brian Ketelsen Erik St. Martin Steve Francia MANNING Go in Action by William Kennedy with Brian Ketelsen and Erik St. Martin Chapter 2 Copyright 2015 Manning
More informationCS61C Machine Structures. Lecture 4 C Pointers and Arrays. 1/25/2006 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/
CS61C Machine Structures Lecture 4 C Pointers and Arrays 1/25/2006 John Wawrzynek (www.cs.berkeley.edu/~johnw) www-inst.eecs.berkeley.edu/~cs61c/ CS 61C L04 C Pointers (1) Common C Error There is a difference
More informationCprE 288 Introduction to Embedded Systems Exam 1 Review. 1
CprE 288 Introduction to Embedded Systems Exam 1 Review http://class.ece.iastate.edu/cpre288 1 Overview of Today s Lecture Announcements Exam 1 Review http://class.ece.iastate.edu/cpre288 2 Announcements
More informationEMBEDDED SYSTEMS PROGRAMMING Language Basics
EMBEDDED SYSTEMS PROGRAMMING 2015-16 Language Basics "The tower of Babel" by Pieter Bruegel the Elder Kunsthistorisches Museum, Vienna (PROGRAMMING) LANGUAGES ABOUT THE LANGUAGES C (1972) Designed to replace
More informationLecture 14. No in-class files today. Homework 7 (due on Wednesday) and Project 3 (due in 10 days) posted. Questions?
Lecture 14 No in-class files today. Homework 7 (due on Wednesday) and Project 3 (due in 10 days) posted. Questions? Friday, February 11 CS 215 Fundamentals of Programming II - Lecture 14 1 Outline Static
More informationDynamic Allocation in C
Dynamic Allocation in C C Pointers and Arrays 1 The previous examples involved only targets that were declared as local variables. For serious development, we must also be able to create variables dynamically,
More informationC Pointers. 6th April 2017 Giulio Picierro
C Pointers 6th April 07 Giulio Picierro Functions Return type Function name Arguments list Function body int sum(int a, int b) { return a + b; } Return statement (return keyword
More informationCS2255 HOMEWORK #1 Fall 2012
CS55 HOMEWORK #1 Fall 01 1.What is assigned to the variable a given the statement below with the following assumptions: x = 10, y = 7, and z, a, and b are all int variables. a = x >= y; a. 10 b. 7 c. The
More informationCS 61c: Great Ideas in Computer Architecture
Arrays, Strings, and Some More Pointers June 24, 2014 Review of Last Lecture C Basics Variables, functioss, control flow, types, structs Only 0 and NULL evaluate to false Pointers hold addresses Address
More informationQUIZ. What is wrong with this code that uses default arguments?
QUIZ What is wrong with this code that uses default arguments? Solution The value of the default argument should be placed in either declaration or definition, not both! QUIZ What is wrong with this code
More informationAPS105. Malloc and 2D Arrays. Textbook Chapters 6.4, Datatype Size
APS105 Malloc and 2D Arrays Textbook Chapters 6.4, 10.2 Datatype Size Datatypes have varying size: char: 1B int: 4B double: 8B int sizeof(): a builtin function that returns size of a type int x =
More informationConditionals & Loops /
Conditionals & Loops 02-201 / 02-601 Conditionals If Statement if statements let you execute statements conditionally. true "then" part condition a > b false "else" part func max(a int, b int) int { var
More informationPointers, Dynamic Data, and Reference Types
Pointers, Dynamic Data, and Reference Types Review on Pointers Reference Variables Dynamic Memory Allocation The new operator The delete operator Dynamic Memory Allocation for Arrays 1 C++ Data Types simple
More informationTokens, Expressions and Control Structures
3 Tokens, Expressions and Control Structures Tokens Keywords Identifiers Data types User-defined types Derived types Symbolic constants Declaration of variables Initialization Reference variables Type
More informationIssue with Implementing PrimeSieve() in Go
Slices 02-201 Issue with Implementing PrimeSieve() in Go func PrimeSieve(n int) [n+1]bool { var iscomposite [n+1]bool //ERROR! biggestprime := 2 for biggestprime < n for i:=2; i
More informationCS2351 Data Structures. Lecture 7: A Brief Review of Pointers in C
CS2351 Data Structures Lecture 7: A Brief Review of Pointers in C 1 About this lecture Pointer is a useful object that allows us to access different places in our memory We will review the basic use of
More informationIntroduce C# as Object Oriented programming language. Explain, tokens,
Module 2 98 Assignment 1 Introduce C# as Object Oriented programming language. Explain, tokens, lexicals and control flow constructs. 99 The C# Family Tree C Platform Independence C++ Object Orientation
More informationThe Awesomeness of Go. Igor Lankin DevFest Karlsruhe, Nov 2016
The Awesomeness of Go Igor Lankin DevFest Karlsruhe, Nov 2016 Igor Lankin Software Developer @ inovex C#, Java, Java Script, full-time GO (waipu.tv ) 2 What is Go? 3 An Awesome Programming Language 4 Imagine
More informationP.G.TRB - COMPUTER SCIENCE. c) data processing language d) none of the above
P.G.TRB - COMPUTER SCIENCE Total Marks : 50 Time : 30 Minutes 1. C was primarily developed as a a)systems programming language b) general purpose language c) data processing language d) none of the above
More informationFlow Control. CSC215 Lecture
Flow Control CSC215 Lecture Outline Blocks and compound statements Conditional statements if - statement if-else - statement switch - statement? : opertator Nested conditional statements Repetitive statements
More informationCut. it s not just for Google. Eleanor McHugh.
Ro u gh Cut! Go it s not just for Google Eleanor McHugh http://slides.games-with-brains.net/ compiled garbage collected imperative package main import fmt const HELLO string = hello var WORLD string =
More informationDon t Go Java! Edition 2019
Don t Go, Java! Don t Go Java! Don t Go Java! Edition 2019 Disclaimer Disclaimer I actually like Go! Guess The Movie Guess The Movie Guess The Movie Guess The Movie Who s That Dude? Chris Engelbert Senior
More informationCOMP 202 Java in one week
COMP 202 Java in one week... Continued CONTENTS: Return to material from previous lecture At-home programming exercises Please Do Ask Questions It's perfectly normal not to understand everything Most of
More informationEMBEDDED SYSTEMS PROGRAMMING Language Basics
EMBEDDED SYSTEMS PROGRAMMING 2014-15 Language Basics (PROGRAMMING) LANGUAGES "The tower of Babel" by Pieter Bruegel the Elder Kunsthistorisches Museum, Vienna ABOUT THE LANGUAGES C (1972) Designed to replace
More informationDiscussion 1E. Jie(Jay) Wang Week 10 Dec.2
Discussion 1E Jie(Jay) Wang Week 10 Dec.2 Outline Dynamic memory allocation Class Final Review Dynamic Allocation of Memory Recall int len = 100; double arr[len]; // error! What if I need to compute the
More informationStructure and Interpretation of Computer Programs
CS 6A Spring 203 Structure and Interpretation of Computer Programs Final Solutions INSTRUCTIONS You have 3 hours to complete the exam. The exam is closed book, closed notes, closed computer, closed calculator,
More informationIntro. Scheme Basics. scm> 5 5. scm>
Intro Let s take some time to talk about LISP. It stands for LISt Processing a way of coding using only lists! It sounds pretty radical, and it is. There are lots of cool things to know about LISP; if
More informationReference slides! C Strings! A string in C is just an array of characters.!!!char string[] = "abc";! How do you tell how long a string is?!
CS61C L04 Introduction to C (pt 2) (1)! Reference slides! C Strings! You ARE responsible for the material on these slides (they re just taken from the reading anyway). These were the slides that generated
More informationOperating Systems CMPSCI 377, Lec 2 Intro to C/C++ Prashant Shenoy University of Massachusetts Amherst
Operating Systems CMPSCI 377, Lec 2 Intro to C/C++ Prashant Shenoy University of Massachusetts Amherst Department of Computer Science Why C? Low-level Direct access to memory WYSIWYG (more or less) Effectively
More informationC++ ARRAYS POINTERS POINTER ARITHMETIC. Problem Solving with Computers-I
C++ ARRAYS POINTERS POINTER ARITHMETIC Problem Solving with Computers-I General model of memory Sequence of adjacent cells Each cell has 1-byte stored in it Each cell has an address (memory location) Memory
More informationCreating a C++ Program
Program A computer program (also software, or just a program) is a sequence of instructions written in a sequence to perform a specified task with a computer. 1 Creating a C++ Program created using an
More informationGo Tutorial. Arjun Roy CSE 223B, Spring 2017
Go Tutorial Arjun Roy arroy@eng.ucsd.edu CSE 223B, Spring 2017 Administrative details TA Office Hours: EBU3B B250A, Tuesday 5-7PM TA Email: arroy@eng.ucsd.edu All labs due by 2359 PDT. Lab 1 due: 4/13/2017.
More informationIn this assignment, you will implement a basic CHORD distributed hash table (DHT) as described in this paper:
Project 2: Chord Distributed Hash Table Introduction In this assignment, you will implement a basic CHORD distributed hash table (DHT) as described in this paper: https://pdos.csail.mit.edu/papers/ton:chord/paper-ton.pdf
More informationGo Concurrent Programming. QCon2018 Beijing
Go Concurrent Programming chao.cai@mobvista.com QCon2018 Beijing Shared Memory Model Shared Memory Model class Worker implements Runnable{ private volatile boolean isrunning = false; @Override public void
More informationPHPoC vs PHP > Overview. Overview
PHPoC vs PHP > Overview Overview PHPoC is a programming language that Sollae Systems has developed. All of our PHPoC products have PHPoC interpreter in firmware. PHPoC is based on a wide use script language
More informationFORM 1 (Please put your name and section number (001/10am or 002/2pm) on the scantron!!!!) CS 161 Exam II: True (A)/False(B) (2 pts each):
FORM 1 (Please put your name and section number (001/10am or 002/2pm) on the scantron!!!!) CS 161 Exam II: True (A)/False(B) (2 pts each): 1. If a function has default arguments, they can be located anywhere
More informationJagannath Institute of Management Sciences Lajpat Nagar. BCA II Sem. C Programming
Jagannath Institute of Management Sciences Lajpat Nagar BCA II Sem C Programming UNIT I Pointers: Introduction to Pointers, Pointer Notation,Decalaration and Initialization, Accessing variable through
More informationControl Structures. Important Semantic Difference
Control Structures Important Semantic Difference In all of these loops we are going to discuss, the braces are ALWAYS REQUIRED. Even if your loop/block only has one statement, you must include the braces.
More informationDynamic Allocation in C
Dynamic Allocation in C 1 The previous examples involved only targets that were declared as local variables. For serious development, we must also be able to create variables dynamically, as the program
More informationReference slides! Garcia, Fall 2011 UCB! CS61C L04 Introduction to C (pt 2) (1)!
Reference slides! You ARE responsible for the material on these slides (they re just taken from the reading anyway). These were the slides that generated the fewest questions in years past (i.e., those
More informationLecture Notes on Queues
Lecture Notes on Queues 15-122: Principles of Imperative Computation Frank Pfenning Lecture 9 September 25, 2012 1 Introduction In this lecture we introduce queues as a data structure and linked lists
More informationBasic Types, Variables, Literals, Constants
Basic Types, Variables, Literals, Constants What is in a Word? A byte is the basic addressable unit of memory in RAM Typically it is 8 bits (octet) But some machines had 7, or 9, or... A word is the basic
More informationPHPoC. PHPoC vs PHP. Version 1.1. Sollae Systems Co., Ttd. PHPoC Forum: Homepage:
PHPoC PHPoC vs PHP Version 1.1 Sollae Systems Co., Ttd. PHPoC Forum: http://www.phpoc.com Homepage: http://www.eztcp.com Contents 1 Overview...- 3 - Overview...- 3-2 Features of PHPoC (Differences from
More informationM1-R4: Programing and Problem Solving using C (JAN 2019)
M1-R4: Programing and Problem Solving using C (JAN 2019) Max Marks: 100 M1-R4-07-18 DURATION: 03 Hrs 1. Each question below gives a multiple choice of answers. Choose the most appropriate one and enter
More informationLecture 9: Lists. Lists store lists of variables. Declaring variables that hold lists. Carl Kingsford, , Fall 2015
Carl Kingsford, 0-0, Fall 0 Lecture : Lists Terminology: Go uses a non-standard term slice to refer to what we are calling lists. Others use the term array for the same concept. Unfortunately, Go uses
More informationShort Notes of CS201
#includes: Short Notes of CS201 The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with < and > if the file is a system
More informationIntroduction to C Language (M3-R )
Introduction to C Language (M3-R4-01-18) 1. Each question below gives a multiple choice of answers. Choose the most appropriate one and enter in OMR answer sheet supplied with the question paper, following
More informationBBM 201 DATA STRUCTURES
BBM 201 DATA STRUCTURES Lecture 8: Dynamically Allocated Linked Lists 2017-2018 Fall int x; x = 8; int A[4]; An array is stored as one contiguous block of memory. How can we add a fifth element to the
More informationGO - QUICK GUIDE GO - OVERVIEW
http://www.tutorialspoint.com/go/go_quick_guide.htm GO - QUICK GUIDE Copyright tutorialspoint.com GO - OVERVIEW Go is a general-purpose language designed with systems programming in mind.it was initially
More informationQUIZ. What are 3 differences between C and C++ const variables?
QUIZ What are 3 differences between C and C++ const variables? Solution QUIZ Source: http://stackoverflow.com/questions/17349387/scope-of-macros-in-c Solution The C/C++ preprocessor substitutes mechanically,
More informationCS201 - Introduction to Programming Glossary By
CS201 - Introduction to Programming Glossary By #include : The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with
More informationSoftware Engineering using Formal Methods
Software Engineering using Formal Methods Introduction to Promela Wolfgang Ahrendt 03 September 2015 SEFM: Promela /GU 150903 1 / 36 Towards Model Checking System Model Promela Program byte n = 0; active
More informationFOR Loop. FOR Loop has three parts:initialization,condition,increment. Syntax. for(initialization;condition;increment){ body;
CLASSROOM SESSION Loops in C Loops are used to repeat the execution of statement or blocks There are two types of loops 1.Entry Controlled For and While 2. Exit Controlled Do while FOR Loop FOR Loop has
More informationA Fast Review of C Essentials Part I
A Fast Review of C Essentials Part I Structural Programming by Z. Cihan TAYSI Outline Program development C Essentials Functions Variables & constants Names Formatting Comments Preprocessor Data types
More informationLecture 2: C Programm
0 3 E CS 1 Lecture 2: C Programm ing C Programming Procedural thought process No built in object abstractions data separate from methods/functions Low memory overhead compared to Java No overhead of classes
More informationWHAT POINTERS REALLY ARE
POINTERS What is a pointer? The index of a book contains pointers. A URL (e.g., http://turing.ubishops.ca/home/cs318) is a pointer. A street address is a pointer. What is then a forwarding address? a pointer
More informationFORM 2 (Please put your name and form # on the scantron!!!!)
CS 161 Exam 2: FORM 2 (Please put your name and form # on the scantron!!!!) True (A)/False(B) (2 pts each): 1. Recursive algorithms tend to be less efficient than iterative algorithms. 2. A recursive function
More informationAgenda. Peer Instruction Question 1. Peer Instruction Answer 1. Peer Instruction Question 2 6/22/2011
CS 61C: Great Ideas in Computer Architecture (Machine Structures) Introduction to C (Part II) Instructors: Randy H. Katz David A. Patterson http://inst.eecs.berkeley.edu/~cs61c/sp11 Spring 2011 -- Lecture
More informationPointers. A pointer is simply a reference to a variable/object. Compilers automatically generate code to store/retrieve variables from memory
Pointers A pointer is simply a reference to a variable/object Compilers automatically generate code to store/retrieve variables from memory It is automatically generating internal pointers We don t have
More informationCS61C : Machine Structures
inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structures Lecture #3 C Strings, Arrays, & Malloc 2007-06-27 Scott Beamer, Instructor Sun announces new supercomputer: Sun Constellation CS61C L3 C Pointers
More informationLecture 10 Notes Linked Lists
Lecture 10 Notes Linked Lists 15-122: Principles of Imperative Computation (Summer 1 2015) Frank Pfenning, Rob Simmons, André Platzer 1 Introduction In this lecture we discuss the use of linked lists to
More informationVector and Free Store (Pointers and Memory Allocation)
DM560 Introduction to Programming in C++ Vector and Free Store (Pointers and Memory Allocation) Marco Chiarandini Department of Mathematics & Computer Science University of Southern Denmark [Based on slides
More informationHeap Arrays and Linked Lists. Steven R. Bagley
Heap Arrays and Linked Lists Steven R. Bagley Recap Data is stored in variables Can be accessed by the variable name Or in an array, accessed by name and index Variables and arrays have a type Create our
More informationIntroduction to C: Pointers
Introduction to C: Pointers Nils Moschüring PhD Student (LMU) Nils Moschüring PhD Student (LMU), Introduction to C: Pointers 1 1 Introduction 2 Pointers Basics Useful: Function
More informationA brief introduction to C programming for Java programmers
A brief introduction to C programming for Java programmers Sven Gestegård Robertz September 2017 There are many similarities between Java and C. The syntax in Java is basically
More informationVariables Data types Variable I/O. C introduction. Variables. Variables 1 / 14
C introduction Variables Variables 1 / 14 Contents Variables Data types Variable I/O Variables 2 / 14 Usage Declaration: t y p e i d e n t i f i e r ; Assignment: i d e n t i f i e r = v a l u e ; Definition
More informationKurt Schmidt. October 30, 2018
to Structs Dept. of Computer Science, Drexel University October 30, 2018 Array Objectives to Structs Intended audience: Student who has working knowledge of Python To gain some experience with a statically-typed
More information520 Principles of Programming Languages. Arithmetic. Variable Declarations. 19: Pascal
Structure of a Pascal Program 520 Principles of Programming Languages 19: Pascal Christian Collberg collberg@cs.arizona.edu Department of Computer Science University of Arizona PROGRAM Name (list of files);
More informationTranquility Publications. Web Edition MAC
Web Edition 2019 -MAC 2 Go Go language is a programming language initially developed at Google in the year 2007 by Robert Griesemer, Rob Pike, and Ken Thompson. It is a statically-typed language having
More informationFormal Specification and Verification
Formal Specification and Verification Introduction to Promela Bernhard Beckert Based on a lecture by Wolfgang Ahrendt and Reiner Hähnle at Chalmers University, Göteborg Formal Specification and Verification:
More informationSpin: Overview of PROMELA
Spin: Overview of PROMELA Patrick Trentin patrick.trentin@unitn.it http://disi.unitn.it/trentin Formal Methods Lab Class, March 10, 2017 These slides are derived from those by Stefano Tonetta, Alberto
More informationCOMPUTER APPLICATION
Total No. of Printed Pages 16 HS/XII/A.Sc.Com/CAP/14 2 0 1 4 COMPUTER APPLICATION ( Science / Arts / Commerce ) ( Theory ) Full Marks : 70 Time : 3 hours The figures in the margin indicate full marks for
More informationCOMP520 - GoLite Type Checking Specification
COMP520 - GoLite Type Checking Specification Vincent Foley February 26, 2015 1 Declarations Declarations are the primary means of introducing new identifiers in the symbol table. In Go, top-level declarations
More information2.1. Chapter 2: Parts of a C++ Program. Parts of a C++ Program. Introduction to C++ Parts of a C++ Program
Chapter 2: Introduction to C++ 2.1 Parts of a C++ Program Copyright 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 2-1 Parts of a C++ Program Parts of a C++ Program // sample C++ program
More informationPrinciples of Programming Pointers, Dynamic Memory Allocation, Character Arrays, and Buffer Overruns
Pointers, Dynamic Memory Allocation, Character Arrays, and Buffer Overruns What is an array? Pointers Memory issues The name of the array is actually a memory address. You can prove this by trying to print
More informationPlease refer to the turn-in procedure document on the website for instructions on the turn-in procedure.
1 CSE 131 Winter 2013 Compiler Project #2 -- Code Generation Due Date: Friday, March 15 th 2013 @ 11:59pm Disclaimer This handout is not perfect; corrections may be made. Updates and major clarifications
More information