What Code Generation Can Do for You. Marc-Antoine Sauvé

Size: px
Start display at page:

Download "What Code Generation Can Do for You. Marc-Antoine Sauvé"

Transcription

1 What Code Generation Can Do for You Marc-Antoine Sauvé Hopper

2 Hopper Creates Trust from Data We process 300 billion flight prices each month to build trust and optimize customer interactions.

3 Repetitive tasks are Boring Error prone Counterproductive

4 Sourcery Code generation No reflection Flexible

5 What is it? Standalone application

6 What is it? Standalone application Scan the source code

7 What is it? Standalone application Scan the source code Uses templates

8 What is it? Standalone application Scan the source code Uses templates Generate source code

9 What is it? Standalone application Scan the source code Uses templates Generate source code Can read code and comments

10 Foo.swift public class Foo {

11 Foo.swift AutoClassName.stencil public class Foo { {% for type in types.all % extension {{ type.name { {% if type.accesslevel == "public" % public var name: String { return "{{ type.name " {% endif % {% endfor %

12 Foo.swift AutoClassName.stencil public class Foo { {% for type in types.all % extension {{ type.name { {% if type.accesslevel == "public" % public var name: String { return "{{ type.name " {% endif % {% endfor %

13 Foo.swift AutoClassName.stencil public class Foo { {% for type in types.all % extension {{ type.name { {% if type.accesslevel == "public" % public var name: String { return "{{ type.name " {% endif % {% endfor %

14 Foo.swift AutoClassName.stencil public class Foo { {% for type in types.all % extension {{ type.name { {% if type.accesslevel == "public" % public var name: String { return "{{ type.name " {% endif % {% endfor %

15 Foo.swift AutoClassName.stencil public class Foo { {% for type in types.all % extension {{ type.name { {% if type.accesslevel == "public" % public var name: String { return "{{ type.name " {% endif % {% endfor % AutoClassName.generated.swift extension Foo { public var name: String { return "Foo"

16 Sourcery Before build Watch files Manual

17 Real Swift problem Listing enum

18 models.swift public enum SuperPower { case HeatVision case SuperSpeed case SuperStrength case XrayVision case SuperIntelligence

19 models.swift protocol AutoCases { public enum SuperPower: AutoCases { case HeatVision case SuperSpeed case SuperStrength case XrayVision case SuperIntelligence

20 AutoCases.stencil {% for enum in types.implementing.autocases enum % {{ enum.accesslevel extension {{ enum.name { static public let count: Int = {{ enum.cases.count {% if not enum.hasassociatedvalues % static public let allcases: [{{ enum.name ] = [ {% for case in enum.cases %.{{ case.name {% if not forloop.last %,{% endif % {% endfor %] {% endif % {% endfor %

21 AutoCases.stencil {% for enum in types.implementing.autocases enum % {{ enum.accesslevel extension {{ enum.name { static public let count: Int = {{ enum.cases.count {% if not enum.hasassociatedvalues % static public let allcases: [{{ enum.name ] = [ {% for case in enum.cases %.{{ case.name {% if not forloop.last %,{% endif % {% endfor %] {% endif % {% endfor %

22 AutoCases.stencil {% for enum in types.implementing.autocases enum % {{ enum.accesslevel extension {{ enum.name { static public let count: Int = {{ enum.cases.count {% if not enum.hasassociatedvalues % static public let allcases: [{{ enum.name ] = [ {% for case in enum.cases %.{{ case.name {% if not forloop.last %,{% endif % {% endfor %] {% endif % {% endfor %

23 AutoCases.generated.swift public extension SuperPower { static let count: Int = 5 static public let allcases: [SuperPower] = [.HeatVision,.SuperSpeed,.SuperStrength,.XrayVision,.SuperIntelligence ]

24 Sourcery Readable code Debuggable DRY

25 Equatable

26 AutoEquatable.stencil // swiftlint:disable file_length // [...] Removed some boilerplate to enhance readability {% macro comparevariables variables % {% for variable in variables where variable.readaccess!= "private" and variable.readaccess!= "fileprivate" %{% if not variable.annotations.skipequality %guard {% if not variable.isoptional %{% if not variable.annotations.arrayequality %lhs.{{ variable.name == rhs.{{ variable.name {% else %comparearrays(lhs: lhs.{{ variable.name, rhs: rhs.{{ variable.name, compare: ==){% endif %{% else %compareoptionals(lhs: lhs.{{ variable.name, rhs: rhs.{{ variable.name, compare: ==){% endif % else { return false {% endif % {% endfor % {% endmacro % // MARK: - AutoEquatable for classes, protocols, structs {% for type in types.implementing.autoequatable!enum % // MARK: - {{ type.name AutoEquatable {% if not type.kind == "protocol" and not type.based.nsobject %extension {{ type.name : Equatable {{% endif % {% if type.supertype.based.equatable or type.supertype.implements.autoequatable %THIS WONT COMPILE, WE DONT SUPPORT INHERITANCE for AutoEquatable{% endif % {{ type.accesslevel func == (lhs: {{ type.name, rhs: {{ type.name ) -> Bool { {% if not type.kind == "protocol" % {% call comparevariables type.storedvariables % {% else % {% call comparevariables type.allvariables % {% endif % return true {% endfor % // Keeps going for a while adding some code for enums

27 AutoEquatable.generated.swift // MARK: - SuperHero AutoEquatable extension SuperHero: Equatable { public func == (lhs: SuperHero, rhs: SuperHero) -> Bool { guard lhs.name == rhs.name else { return false guard lhs.superpowers == rhs.superpowers else { return false return true

28 AutoEquatable.generated.swift // MARK: - SuperPower AutoEquatable extension SuperPower: Equatable { public func == (lhs: SuperPower, rhs: SuperPower) -> Bool { switch (lhs, rhs) { case (.HeatVision,.HeatVision): return true case (.SuperSpeed(let lhs),.superspeed(let rhs)): if lhs.speed!= rhs.speed { return false if lhs.duration!= rhs.duration { return false return true // [ Skipped some code for readability ] default: return false

29 Annotations public class SuperHero: AutoEquatable { public let name: String // sourcery: skipequality public let sidekick: SuperHero? public let superpowers: [SuperPower]

30 Sourcery Test once Avoid human mistakes Low maintenance cost

31 Class Types Method TypeName Protocol Subscript Enum ArrayType GenericTypeParameter TupleType TupleElement Attribute AssociatedValue Struct DictionaryType GenericType MethodParameter Variable ClosureType EnumCase

32 What s bad? Hard to read the template

33 What s bad? Hard to read the template Hard to write the template

34 What s bad? Hard to read the template Hard to write the template Poor support in the IDEs

35 What s bad? Hard to read the template Hard to write the template Poor support in the IDEs Can be slow to compile

36 What s bad? Hard to read the template Hard to write the template Poor support in the IDEs Can be slow to compile Annotations are not type checked

37 AppCode

38 Visual Studio Code

39 Still worth it! Saves a lot of time!

40 Questions?

41 We re on the Lookout for Talented People Check out current openings at hopper.com/jobs. Slides available on cocoaheadsmtl.com.

Mobile Application Programming. Swift Classes

Mobile Application Programming. Swift Classes Mobile Application Programming Swift Classes Swift Top-Level Entities Like C/C++ but unlike Java, Swift allows declarations of functions, variables, and constants at the top-level, outside any class declaration

More information

iphone Application Programming Lab 3: Swift Types and Custom Operator + A02 discussion

iphone Application Programming Lab 3: Swift Types and Custom Operator + A02 discussion Lab 3: Swift Types and Custom Operator + A02 discussion Nur Al-huda Hamdan RWTH Aachen University Winter Semester 2015/2016 http://hci.rwth-aachen.de/iphone Learning Objectives Discuss A02 Another implementation

More information

Patterns & practices for unit-testing Swift-ly. Jakub Turek 18th June, 2018

Patterns & practices for unit-testing Swift-ly. Jakub Turek 18th June, 2018 Patterns & practices for unit-testing Swift-ly Jakub Turek 18th June, 2018 About me Jakub Turek https://jakubturek.com @KubaTurek turekj EL Passion 1 Agenda 1. Introduction to unit-testing. Test Driven

More information

the gamedesigninitiative at cornell university Lecture 7 C++ Overview

the gamedesigninitiative at cornell university Lecture 7 C++ Overview Lecture 7 Lecture 7 So You Think You Know C++ Most of you are experienced Java programmers Both in 2110 and several upper-level courses If you saw C++, was likely in a systems course Java was based on

More information

Debug C++ Without Running. Anastasia Kazakova

Debug C++ Without Running. Anastasia Kazakova Debug C++ Without Running Anastasia Kazakova JetBrains @anastasiak2512 Agenda 1. Tricky C++ language. Show samples! 2. Seems to help but it doesn t. Why? Running / Debugging Static / dynamic code analysis

More information

boost::enable_if Deep Down Boostimagical Fun Christian Bay and Kasper A Andersen Department of Computer Science University of Copenhagen

boost::enable_if Deep Down Boostimagical Fun Christian Bay and Kasper A Andersen Department of Computer Science University of Copenhagen Deep Down Boostimagical Fun boost::enable_if Christian Bay and Kasper A Andersen Department of Computer Science University of Copenhagen C. Bay and K. A. Andersen, June 2, 2006 p. 1/12 SFINAE revisited

More information

CS 32. Lecture 2: objects good?

CS 32. Lecture 2: objects good? CS 32 Lecture 2: objects good? Double Vision This course has two main tracks Unix/shell stuff Object-Oriented Programming Basic C++ familiarity Off by one! Another Troika This class has three main texts

More information

CS 32. Lecture 5: Templates

CS 32. Lecture 5: Templates CS 32 Lecture 5: Templates Vectors Sort of like what you remember from Physics but sort of not Can have many components Usually called entries Like Python lists Array vs. Vector What s the difference?

More information

Using Enum Structs as Bitfields

Using Enum Structs as Bitfields New York C++ Developers Group July 12, 2016 Using Enum Structs as Bitfields Presentation by Jon Kalb Based on an article in Overload magazine by Anthony Williams 1 What do these have in common?! explicit

More information

Stanford CS193p. Developing Applications for ios. Fall CS193p. Fall

Stanford CS193p. Developing Applications for ios. Fall CS193p. Fall Stanford Developing Applications for ios Today Mostly Swift but some other stuff too Autolayout teaser Quick review of what we learned in Concentration CountableRange of floating point numbers Tuples Computed

More information

iphone Application Programming Lecture 3: Swift Part 2

iphone Application Programming Lecture 3: Swift Part 2 Lecture 3: Swift Part 2 Nur Al-huda Hamdan RWTH Aachen University Winter Semester 2015/2016 http://hci.rwth-aachen.de/iphone Review Type aliasing is useful! Escaping keywords could be useful! If you want

More information

12 CREATING NEW TYPES

12 CREATING NEW TYPES Lecture 12 CREATING NEW TYPES of DATA Typedef declaration Enumeration Structure Bit fields Uninon Creating New Types Is difficult to solve complex problems by using programs written with only fundamental

More information

PIC 10A. Lecture 17: Classes III, overloading

PIC 10A. Lecture 17: Classes III, overloading PIC 10A Lecture 17: Classes III, overloading Function overloading Having multiple constructors with same name is example of something called function overloading. You are allowed to have functions with

More information

Syntax-Directed Translation. Lecture 14

Syntax-Directed Translation. Lecture 14 Syntax-Directed Translation Lecture 14 (adapted from slides by R. Bodik) 9/27/2006 Prof. Hilfinger, Lecture 14 1 Motivation: parser as a translator syntax-directed translation stream of tokens parser ASTs,

More information

Syntax Warnings Language-Integrated Nitpicking

Syntax Warnings Language-Integrated Nitpicking Syntax Warnings Language-Integrated Nitpicking 1 foo.rkt #lang racket/base (require "util.rkt" racket/match (for-syntax "macro-util.rkt") "macros.rkt" racket/vector (for-syntax "macro-util-more.rkt") (for-template

More information

Introduction to Linked Lists. Introduction to Recursion Search Algorithms CS 311 Data Structures and Algorithms

Introduction to Linked Lists. Introduction to Recursion Search Algorithms CS 311 Data Structures and Algorithms Introduction to Linked Lists Introduction to Recursion Search Algorithms CS 311 Data Structures and Algorithms Lecture Slides Friday, September 25, 2009 Glenn G. Chappell Department of Computer Science

More information

What s New in Swift #WWDC18. Ted Kremenek, Languages & Runtimes Manager Slava Pestov, Swift Compiler Engineer

What s New in Swift #WWDC18. Ted Kremenek, Languages & Runtimes Manager Slava Pestov, Swift Compiler Engineer Session #WWDC18 What s New in Swift 401 Ted Kremenek, Languages & Runtimes Manager Slava Pestov, Swift Compiler Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Basic Types, Variables, Literals, Constants

Basic 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 information

CS ios. Extensions, Protocols, and Generics

CS ios. Extensions, Protocols, and Generics CS4962 - ios Extensions, Protocols, and Generics Package Management Application level package managers CocoaPods Carthage SPM (Swift Package Manager) CocoaPods Centralized, searchable repository Automatically

More information

P1267R0: Custom Constraint Diagnostics

P1267R0: Custom Constraint Diagnostics P1267R0: Custom Constraint Diagnostics ISO/IEC JTC1 SC22/WG21 - Programming Languages - C++ Authors: Hana Dusíková < hana.dusikova@avast.com > Bryce Adelstein Lelbach < brycelelbach@gmail.com > Audience:

More information

The Go Programming Language. Frank Roberts

The 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 information

Compilers Project. Cyril Soldani. Mar 6th University of Liège

Compilers Project. Cyril Soldani. Mar 6th University of Liège Compilers Project Cyril Soldani University of Liège Mar 6th 2018 1 Outline 1 General remarks 2 Syntax analysis 3 AST structure advice 2 Best group size is 2 Groups of 3 are allowed, but expected to do

More information

Why C++ is much more fun than C (C++ FAQ)?

Why C++ is much more fun than C (C++ FAQ)? From C to C++ Why C++ is much more fun than C (C++ FAQ)? 1. Classes & methods - OO design 2. Generic programming - Templates allow for code reuse 3. Stricter type system (e.g. function args) 4. Some run-time

More information

Instantiation of Template class

Instantiation of Template class Class Templates Templates are like advanced macros. They are useful for building new classes that depend on already existing user defined classes or built-in types. Example: stack of int or stack of double

More information

COMP-520 GoLite Tutorial

COMP-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 information

Advanced C++ Topics. Alexander Warg, 2017

Advanced C++ Topics. Alexander Warg, 2017 www.kernkonzept.com Advanced C++ Topics Alexander Warg, 2017 M I C R O K E R N E L M A D E I N G E R M A N Y Overview WHAT IS BEHIND C++ Language Magics Object Life Time Object Memory Layout INTRODUCTION

More information

Statements execute in sequence, one after the other, such as the following solution for a quadratic equation:

Statements execute in sequence, one after the other, such as the following solution for a quadratic equation: Control Structures Sequence Statements execute in sequence, one after the other, such as the following solution for a quadratic equation: double desc, x1, x2; desc = b * b 4 * a * c; desc = sqrt(desc);

More information

Fundamentals of Type-Dependent Code Reuse in C++ Mark Isaacson

Fundamentals of Type-Dependent Code Reuse in C++ Mark Isaacson Fundamentals of Type-Dependent Code Reuse in C++ Mark Isaacson Roadmap Reusing an implementation Selecting between implementations Opt-in functions A Beginning assert(max(3, 5) == 5); assert(max("abc"s,

More information

template<typename T> cout << "The value is << value << endl; } void printdata(t value){

template<typename T> cout << The value is << value << endl; } void printdata(t value){ C++ Templates Parametric Polymorphism void printdata(int value){ cout

More information

Lists. linking nodes. constructors. chasing pointers. MCS 360 Lecture 11 Introduction to Data Structures Jan Verschelde, 17 September 2010.

Lists. linking nodes. constructors. chasing pointers. MCS 360 Lecture 11 Introduction to Data Structures Jan Verschelde, 17 September 2010. 1 2 3 MCS 360 Lecture 11 Introduction to Data Structures Jan Verschelde, 17 September 2010 1 2 3 efficient updates with lists At http://www.sgi.com/tech/stl/ is the Standard Template Library Programmer

More information

1d: tests knowing about bitwise fields and union/struct differences.

1d: tests knowing about bitwise fields and union/struct differences. Question 1 1a: char ptr[] = Hello World ; char a = ptr[1], b = *(ptr+6); Creates an array of 12 elements, 11 visible letters and a character value 0 at the end. i true ii true iii false iv false v true

More information

Stanford CS193p. Developing Applications for ios. Fall CS193p. Fall

Stanford CS193p. Developing Applications for ios. Fall CS193p. Fall Stanford Developing Applications for ios Today Mostly more Swift but some other stuff too Quick demo of mutating protocols String NSAttributedString Closures (and functions as types in general) Data Structures

More information

SWIFT & #IOExtendedCLT, 18th May 2016

SWIFT & #IOExtendedCLT, 18th May 2016 SWIFT & KOTLIN @DagnaBieda, #IOExtendedCLT, 18th May 2016 Software Engineer at Quoin, 209 Delburg Street, Davidson, NC Sources tell The Next Web that Google is considering making Swift a first class language

More information

Friendship in Service of Testing

Friendship in Service of Testing Friendship in Service of Testing Gábor Márton, martongabesz@gmail.com Zoltán Porkoláb, gsd@elte.hu 1 / 47 Agenda Introduction, principals Case study Making the example better Vision 2 / 47 Functional Programming

More information

Polymorphism COSC346

Polymorphism COSC346 Polymorphism COSC346 Polymorphism OOP Polymorphism refers to the ability of different class objects to respond to the same method(s) From the perspective of the message sender, the receiver can take different

More information

Patterns and Practices for Embedded TDD in C and C++ How we introduced TDD into our company

Patterns and Practices for Embedded TDD in C and C++ How we introduced TDD into our company Patterns and Practices for Embedded TDD in C and C++ How we introduced TDD into our company Work for Cornwall, England. based in Provide an embedded software development service. Introduced Lean/Agile

More information

Introduction to Programming

Introduction to Programming Introduction to Programming session 6 Instructor: Reza Entezari-Maleki Email: entezari@ce.sharif.edu 1 Spring 2011 These slides are created using Deitel s slides Sharif University of Technology Outlines

More information

Instructor: SIR MUHAMMAD NAVEED Created by: ARSLAN AHMED SHAAD ( ) MUHAMMAD BILAL ( ) ISIT:

Instructor: SIR MUHAMMAD NAVEED Created by: ARSLAN AHMED SHAAD ( ) MUHAMMAD BILAL ( ) ISIT: Instructor: SIR MUHAMMAD NAVEED Created by: ARSLAN AHMED SHAAD ( 1163135 ) MUHAMMAD BILAL (1163122 ) ISIT:www.techo786.wordpress.com CHAPTER: 3 NOTE: CONTROL STATEMENTS Question s Given below are Long

More information

Contract Programming For C++0x

Contract Programming For C++0x Contract Programming For C++0x WG21/N1800 and J16/05-0060 Lawrence Crowl and Thorsten Ottosen lawrence.crowl@sun.com and nesotto@cs.aau.dk 2005-04-27 Overview This is an annotated version of the presentation

More information

Metaprogramming. Concepts of Programming Languages. Alexander Schramm. 2. November Institut für Softwaretechnik und Programmiersprachen

Metaprogramming. Concepts of Programming Languages. Alexander Schramm. 2. November Institut für Softwaretechnik und Programmiersprachen Metaprogramming Concepts of Programming Languages Alexander Schramm Institut für Softwaretechnik und Programmiersprachen 2. November 2015 A. Schramm 2. November 2015 1/39 Table of Contents Introduction

More information

Non-numeric types, boolean types, arithmetic. operators. Comp Sci 1570 Introduction to C++ Non-numeric types. const. Reserved words.

Non-numeric types, boolean types, arithmetic. operators. Comp Sci 1570 Introduction to C++ Non-numeric types. const. Reserved words. , ean, arithmetic s s on acters Comp Sci 1570 Introduction to C++ Outline s s on acters 1 2 3 4 s s on acters Outline s s on acters 1 2 3 4 s s on acters ASCII s s on acters ASCII s s on acters Type: acter

More information

int x = 15; int &reftox = x; reftox = 3; // reftox is a synonym for x cout

More information

Variadic Templates. Andrei Alexandrescu Research Scientist Facebook. c 2012 Andrei Alexandrescu, Facebook. 1 / 34

Variadic Templates. Andrei Alexandrescu Research Scientist Facebook. c 2012 Andrei Alexandrescu, Facebook. 1 / 34 Variadic Templates Andrei Alexandrescu Research Scientist Facebook c 2012 Andrei Alexandrescu, Facebook. 1 / 34 Twitter stream highlight Don t think I ll be able to stay up to see whatever Cthuloid-template-horror

More information

Fundamentals. Fundamentals. Fundamentals. We build up instructions from three types of materials

Fundamentals. Fundamentals. Fundamentals. We build up instructions from three types of materials Fundamentals We build up instructions from three types of materials Constants Expressions Fundamentals Constants are just that, they are values that don t change as our macros are executing Fundamentals

More information

template <typename T> // unless it s an unqualified pointer struct IsPtr<T *> { enum { r = true }; };

template <typename T> // unless it s an unqualified pointer struct IsPtr<T *> { enum { r = true }; }; SFINAE Sono Buoni SFINAE In attempting to use function template argument deduction to select among a number of candidate function templates, a C++ compiler may attempt an instantiation that fails on one

More information

iphone Application Programming Lecture 3: Swift Part 2

iphone Application Programming Lecture 3: Swift Part 2 Lecture 3: Swift Part 2 Nur Al-huda Hamdan RWTH Aachen University Winter Semester 2015/2016 http://hci.rwth-aachen.de/iphone Properties Properties are available for classes, enums or structs Classified

More information

GEA 2017, Week 4. February 21, 2017

GEA 2017, Week 4. February 21, 2017 GEA 2017, Week 4 February 21, 2017 1. Problem 1 After debugging the program through GDB, we can see that an allocated memory buffer has been freed twice. At the time foo(...) gets called in the main function,

More information

Chapter 1 Getting Started

Chapter 1 Getting Started Chapter 1 Getting Started The C# class Just like all object oriented programming languages, C# supports the concept of a class. A class is a little like a data structure in that it aggregates different

More information

Appendix. Grammar. A.1 Introduction. A.2 Keywords. There is no worse danger for a teacher than to teach words instead of things.

Appendix. Grammar. A.1 Introduction. A.2 Keywords. There is no worse danger for a teacher than to teach words instead of things. A Appendix Grammar There is no worse danger for a teacher than to teach words instead of things. Marc Block Introduction keywords lexical conventions programs expressions statements declarations declarators

More information

l Operators such as =, +, <, can be defined to l The function names are operator followed by the l Otherwise they are like normal member functions:

l Operators such as =, +, <, can be defined to l The function names are operator followed by the l Otherwise they are like normal member functions: Operator Overloading & Templates Week 6 Gaddis: 14.5, 16.2-16.4 CS 5301 Spring 2018 Jill Seaman Operator Overloading l Operators such as =, +,

More information

Fast Introduction to Object Oriented Programming and C++

Fast Introduction to Object Oriented Programming and C++ Fast Introduction to Object Oriented Programming and C++ Daniel G. Aliaga Note: a compilation of slides from Jacques de Wet, Ohio State University, Chad Willwerth, and Daniel Aliaga. Outline Programming

More information

SELECTION. (Chapter 2)

SELECTION. (Chapter 2) SELECTION (Chapter 2) Selection Very often you will want your programs to make choices among different groups of instructions For example, a program processing requests for airline tickets could have the

More information

COM S 213 PRELIM EXAMINATION #2 April 26, 2001

COM S 213 PRELIM EXAMINATION #2 April 26, 2001 COM S 213 PRELIM EXAMINATION #2 April 26, 2001 Name: Student ID: Please answer all questions in the space(s) provided. Each question is worth 4 points. You may leave when you are finished with the exam.

More information

eingebetteter Systeme

eingebetteter Systeme Praktikum: Entwicklung interaktiver eingebetteter Systeme C++-Tutorial (falk@cs.fau.de) 1 Agenda Classes Pointers and References Functions and Methods Function and Operator Overloading Template Classes

More information

Short Notes of CS201

Short 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 information

Structs. Contiguously-allocated region of memory Refer to members within structure by names Members may be of different types Example: Memory Layout

Structs. Contiguously-allocated region of memory Refer to members within structure by names Members may be of different types Example: Memory Layout Structs (C,C++) 2 Structs Contiguously-allocated region of memory Refer to members within structure by names Members may be of different types Example: struct rec int i; int a[3]; int *p; Memory Layout

More information

04 Sharing Code Between Windows 8 and Windows Phone 8 in Visual Studio. Ben Riga

04 Sharing Code Between Windows 8 and Windows Phone 8 in Visual Studio. Ben Riga 04 Sharing Code Between Windows 8 and Windows Phone 8 in Visual Studio Ben Riga http://about.me/ben.riga Course Topics Building Apps for Both Windows 8 and Windows Phone 8 Jump Start 01 Comparing Windows

More information

More Advanced Class Concepts

More Advanced Class Concepts More Advanced Class Concepts Operator overloading Inheritance Templates PH (RH) (Roger.Henriksson@cs.lth.se) C++ Programming 2016/17 146 / 281 Operator Overloading In most programming languages some operators

More information

What s New in LLDB. Debug your way to fame and glory #WWDC15. Developer Tools. Session 402

What s New in LLDB. Debug your way to fame and glory #WWDC15. Developer Tools. Session 402 Developer Tools #WWDC15 What s New in LLDB Debug your way to fame and glory Session 402 Kate Stone Software Behavioralist Sean Callanan Master of Expressions Enrico Granata Data Wizard 2015 Apple Inc.

More information

Chapter 20: Binary Trees

Chapter 20: Binary Trees Chapter 20: Binary Trees 20.1 Definition and Application of Binary Trees Definition and Application of Binary Trees Binary tree: a nonlinear linked list in which each node may point to 0, 1, or two other

More information

The University Of Michigan. EECS402 Lecture 15. Andrew M. Morgan. Savitch Ch. 8 Operator Overloading Returning By Constant Value

The University Of Michigan. EECS402 Lecture 15. Andrew M. Morgan. Savitch Ch. 8 Operator Overloading Returning By Constant Value The University Of Michigan Lecture 15 Andrew M. Morgan Savitch Ch. 8 Operator Overloading Returning By Constant Value Consider This Program class ChangePocketClass public: ChangePocketClass():quarters(0),dimes(0)

More information

CS201 - Introduction to Programming Glossary By

CS201 - 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 information

COEN244: Class & function templates

COEN244: Class & function templates COEN244: Class & function templates Aishy Amer Electrical & Computer Engineering Templates Function Templates Class Templates Outline Templates and inheritance Introduction to C++ Standard Template Library

More information

Midterm 3 practice problems

Midterm 3 practice problems Midterm 3 practice problems CS 133 May 3, 218 1 Hash functions and hash tables What are the two good hash methods we discussed, and how do they work? Remainder: use Horner s method to treat the string

More information

Variant: a type-safe union without undefined behavior (v2).

Variant: a type-safe union without undefined behavior (v2). Variant: a type-safe union without undefined behavior (v2). P0087R0, ISO/IEC JTC1 SC22 WG21 Axel Naumann (axel@cern.ch), 2015-09-28 Contents Introduction 3 Version control 4 Discussion 4 Empty state and

More information

Advanced use of the C language

Advanced use of the C language Advanced use of the C language Content Why to use C language Differences from Java Object oriented programming in C Usage of C preprocessor Coding standards Compiler optimizations C99 and C11 Standards

More information

C++ Template Meta. A basic introduction to basic C++ techniques used in template metaprogramming.

C++ Template Meta. A basic introduction to basic C++ techniques used in template metaprogramming. C++ Template Meta A basic introduction to basic C++ techniques used in template metaprogramming. Github Repo The presentation and all of the code are online on github, with an OSI license. github.com/zwimer/template-meta-tutorial

More information

CMPT 117: Tutorial 1. Craig Thompson. 12 January 2009

CMPT 117: Tutorial 1. Craig Thompson. 12 January 2009 CMPT 117: Tutorial 1 Craig Thompson 12 January 2009 Administrivia Coding habits OOP Header Files Function Overloading Class info Tutorials Review of course material additional examples Q&A Labs Work on

More information

Linear Search. Sorting Algorithms. linear search code. Sorting in Ascending Order Selection Sort. Selection sort algorithm

Linear Search. Sorting Algorithms. linear search code. Sorting in Ascending Order Selection Sort. Selection sort algorithm Linear Search Additional CPSC1620 topics Searching, Sorting, Big(O) template functions, classes The idea of a linear search is to walk through the entire list until the value is found. The list does not

More information

Operator Overloading and Templates. Linear Search. Linear Search in C++ second attempt. Linear Search in C++ first attempt

Operator Overloading and Templates. Linear Search. Linear Search in C++ second attempt. Linear Search in C++ first attempt Operator Overloading and Templates Week 6 Gaddis: 8.1, 14.5, 16.2-16.4 CS 5301 Fall 2015 Jill Seaman Linear Search! Search: find a given target item in an array, return the index of the item, or -1 if

More information

CSE 113 A. Announcements - Lab

CSE 113 A. Announcements - Lab CSE 113 A February 21-25, 2011 Announcements - Lab Lab 1, 2, 3, 4; Practice Assignment 1, 2, 3, 4 grades are available in Web-CAT look under Results -> Past Results and if looking for Lab 1, make sure

More information

Macros to the Rescue. André Winkelmann Thorsten Dworzak Verilab GmbH

Macros to the Rescue. André Winkelmann Thorsten Dworzak Verilab GmbH Macros to the Rescue André Winkelmann Thorsten Dworzak Verilab GmbH Code Readability Before What is the code supposed to do? for each in (list.all_indices(it < 2).reverse()) { list.delete(it); Code Readability

More information

Chapter 3. More Flow of Control. Copyright 2008 Pearson Addison-Wesley. All rights reserved.

Chapter 3. More Flow of Control. Copyright 2008 Pearson Addison-Wesley. All rights reserved. Chapter 3 More Flow of Control Overview 3.1 Using Boolean Expressions 3.2 Multiway Branches 3.3 More about C++ Loop Statements 3.4 Designing Loops Slide 3-3 Flow Of Control Flow of control refers to the

More information

Exception Namespaces C Interoperability Templates. More C++ David Chisnall. March 17, 2011

Exception Namespaces C Interoperability Templates. More C++ David Chisnall. March 17, 2011 More C++ David Chisnall March 17, 2011 Exceptions A more fashionable goto Provides a second way of sending an error condition up the stack until it can be handled Lets intervening stack frames ignore errors

More information

APPENDIX A : Example Standard <--Prev page Next page -->

APPENDIX A : Example Standard <--Prev page Next page --> APPENDIX A : Example Standard If you have no time to define your own standards, then this appendix offers you a pre-cooked set. They are deliberately brief, firstly because standards

More information

Variables. Data Types.

Variables. Data Types. Variables. Data Types. The usefulness of the "Hello World" programs shown in the previous section is quite questionable. We had to write several lines of code, compile them, and then execute the resulting

More information

Understanding Undefined Behavior

Understanding Undefined Behavior Session Developer Tools #WWDC17 Understanding Undefined Behavior 407 Fred Riss, Clang Team Ryan Govostes, Security Engineering and Architecture Team Anna Zaks, Program Analysis Team 2017 Apple Inc. All

More information

Modern and Lucid C++ Advanced for Professional Programmers. Part 12 Advanced Library Design. Department I - C Plus Plus Advanced

Modern and Lucid C++ Advanced for Professional Programmers. Part 12 Advanced Library Design. Department I - C Plus Plus Advanced Department I - C Plus Plus Advanced Modern and Lucid C++ Advanced for Professional Programmers Part 12 Advanced Library Design Thomas Corbat / Prof. Peter Sommerlad Rapperswil, 23.02.2017 HS2017 Topics

More information

G52CPP C++ Programming Lecture 8. Dr Jason Atkin

G52CPP C++ Programming Lecture 8. Dr Jason Atkin G52CPP C++ Programming Lecture 8 Dr Jason Atkin 1 Last lecture Dynamic memory allocation Memory re-allocation to grow arrays Linked lists Use -> rather than. pcurrent = pcurrent -> pnext; 2 Aside: do not

More information

ITP 342 Mobile App Dev. Functions

ITP 342 Mobile App Dev. Functions ITP 342 Mobile App Dev Functions Functions Functions are self-contained chunks of code that perform a specific task. You give a function a name that identifies what it does, and this name is used to call

More information

TDDE18 & 726G77. Functions

TDDE18 & 726G77. Functions TDDE18 & 726G77 Functions Labs update No more one time password. We will note who have demonstrated during the lab and register this in webreg. Use the terminal to send in your lab! Dont use Visual studio

More information

Advanced features of Functional Programming (Haskell)

Advanced features of Functional Programming (Haskell) Advanced features of Functional Programming (Haskell) Polymorphism and overloading January 10, 2017 Monomorphic and polymorphic types A (data) type specifies a set of values. Examples: Bool: the type of

More information

C++ Basics. Brian A. Malloy. References Data Expressions Control Structures Functions. Slide 1 of 24. Go Back. Full Screen. Quit.

C++ Basics. Brian A. Malloy. References Data Expressions Control Structures Functions. Slide 1 of 24. Go Back. Full Screen. Quit. C++ Basics January 19, 2012 Brian A. Malloy Slide 1 of 24 1. Many find Deitel quintessentially readable; most find Stroustrup inscrutable and overbearing: Slide 2 of 24 1.1. Meyers Texts Two excellent

More information

CS 106X, Lecture 14 Classes and Pointers

CS 106X, Lecture 14 Classes and Pointers CS 106X, Lecture 14 Classes and Pointers reading: Programming Abstractions in C++, Chapter 6, 11 This document is copyright (C) Stanford Computer Science and Nick Troccoli, licensed under Creative Commons

More information

Topic 6: A Quick Intro To C. Reading. "goto Considered Harmful" History

Topic 6: A Quick Intro To C. Reading. goto Considered Harmful History Topic 6: A Quick Intro To C Reading Assumption: All of you know basic Java. Much of C syntax is the same. Also: Some of you have used C or C++. Goal for this topic: you can write & run a simple C program

More information

Semantic actions for declarations and expressions

Semantic actions for declarations and expressions Semantic actions for declarations and expressions Semantic actions Semantic actions are routines called as productions (or parts of productions) are recognized Actions work together to build up intermediate

More information

CPSC 427: Object-Oriented Programming

CPSC 427: Object-Oriented Programming CPSC 427: Object-Oriented Programming Michael J. Fischer Lecture 12 October 8, 2018 CPSC 427, Lecture 12, October 8, 2018 1/24 Uses of Pointers Feedback on Programming Style CPSC 427, Lecture 12, October

More information

Lecture 10: Lindenmayer Systems

Lecture 10: Lindenmayer Systems Carl Kingsford, 0-01, Fall 015 Lecture 10: Lindenmayer Systems (Stacks, Queues, append, and list literals) Lindenmayer systems or L-systems are a way to model complex shape contruction simply. They are

More information

! Search: find a given target item in an array, ! Linear Search: Very simple search method: ! Operators such as =, +, <, and others can be

! Search: find a given target item in an array, ! Linear Search: Very simple search method: ! Operators such as =, +, <, and others can be Operator Overloading and Templates Week 6 Gaddis: 8.1, 14.5, 16.2-16.4 CS 5301 Spring 2015 Jill Seaman Linear Search! Search: find a given target item in an array, return the index of the item, or -1 if

More information

Computing and compilers

Computing and compilers Computing and compilers Comp Sci 1570 to Outline 1 2 3 4 5 Evaluate the difference between hardware and software Find out about the various types of software Get a high level understanding of how program

More information

MCS 360 Exam 2 11 November In order to get full credit, you need to show your work.

MCS 360 Exam 2 11 November In order to get full credit, you need to show your work. MCS 360 Exam 2 11 November 2015 Name: Do not start until instructed to do so. In order to get full credit, you need to show your work. You have 50 minutes to complete the exam. Good Luck! Problem 1.a /15

More information

Overview. Iteration 4 kinds of loops. Infinite Loops. for while do while foreach

Overview. Iteration 4 kinds of loops. Infinite Loops. for while do while foreach Repetition Overview Iteration 4 kinds of loops for while do while foreach Infinite Loops Iteration One thing that computers do well is repeat commands Programmers use loops to accomplish this 4 kinds of

More information

CSCI 104 Templates. Mark Redekopp David Kempe

CSCI 104 Templates. Mark Redekopp David Kempe CSCI 104 Templates Mark Redekopp David Kempe Overview C++ Templates allow alternate versions of the same code to be generated for various data types 2 FUNCTION TEMPLATES 3 How To's Example reproduced from:

More information

Towards Automatic Partial Evaluation for the C++ Language. Robert Anisko

Towards Automatic Partial Evaluation for the C++ Language. Robert Anisko Towards Automatic Partial Evaluation for the C++ Language Robert Anisko May 27, 2002 Partial evaluation is a high-level optimization technique that, given a program text and some of its input, generates

More information

Increment and the While. Class 15

Increment and the While. Class 15 Increment and the While Class 15 Increment and Decrement Operators Increment and Decrement Increase or decrease a value by one, respectively. the most common operation in all of programming is to increment

More information

C++17 and Beyond. Mark Isaacson

C++17 and Beyond. Mark Isaacson C++17 and Beyond Mark Isaacson 1 Roadmap What s coming in C++17 and C++20 The surprising utility of std::string_view C++20 s most deliciously scary feature: operator dot Making templates more accessible

More information

P.G.TRB - COMPUTER SCIENCE. c) data processing language d) none of the above

P.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 information

Unit 7. 'while' Loops

Unit 7. 'while' Loops 1 Unit 7 'while' Loops 2 Control Structures We need ways of making decisions in our program To repeat code until we want it to stop To only execute certain code if a condition is true To execute one segment

More information

Lecture 2, September 4

Lecture 2, September 4 Lecture 2, September 4 Intro to C/C++ Instructor: Prashant Shenoy, TA: Shashi Singh 1 Introduction C++ is an object-oriented language and is one of the most frequently used languages for development due

More information

CS 11 Ocaml track: lecture 6

CS 11 Ocaml track: lecture 6 CS 11 Ocaml track: lecture 6 n Today: n Writing a computer language n Parser generators n lexers (ocamllex) n parsers (ocamlyacc) n Abstract syntax trees Problem (1) n We want to implement a computer language

More information