1. Coroutines in C Pull Push Makefile Pull Push Push som Link...

Vergelijkbare documenten
RTOS Labo. L. Rutten 27/ 2/2017

Datastructuren: stapels, rijen en binaire bomen

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Lineaire data structuren. Doorlopen van een lijst

Datastructuren: stapels, rijen en binaire bomen

9 Meer over datatypen

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

Datastructuren Werkcollege Intro

Planning. 1. Mini College. 2. Introductiecursus Imperatief Programmeren. 3. Crash and Compile (vanaf 17:00 uur)

Modelleren en Programmeren

TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR

Zelftest TSO/E REXX. Document: n0167test.fm 25/01/2017. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

Oefeningen Java Oplossingen

/20. richtlijnen. Lees deze richtlijnen! Log in op de pc met. login: paswoord: examen i examen001. Log in op. x.toledo.ucll.be

De FOR lus: // terug naar waar je vandaan kwam Serial.begin(115200); // communicatie snelheid met de PC

10 Meer over functies

NAAM: Programmeren 1 Examen 29/08/2012

C++ programmeermethoden Bachelor Kunstmatige Intelligentie

Modelleren en Programmeren

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

Programmeren in Java 3

Auteur Inleiding Namen in applicatie Opslag structuur Gedefinieerde structuren... 4

Inleiding Programmeren 2

De MySQL C API. Variabelen in C Functies in C Pointers in C

Zelftest Programmeren in PL/I

Vakgroep CW KAHO Sint-Lieven

Programmeren in C++ Efficiënte zoekfunctie in een boek

Stapelgeheugen. Processoren 6 maart 2012

Modelleren en Programmeren

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

4EE11 Project Programmeren voor W. College 3, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Tentamen Formele Methoden voor Software Engineering (213520)

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Inleiding Programmeren 2

Werkcollege 7 Communication and Multimedia Design Amsterdam - Research for Design- B1 HC7 requirements

Informatica: C# WPO 6

Programmeren in Java les 3

Introductie in C++ Jan van Rijn. September 2013

Informatica: C# WPO 6

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Luister alsjeblieft naar een opname als je de vragen beantwoordt of speel de stukken zelf!

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Real-Time Software (RTSOF) EVMINX9 Week 2

C++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies

Reizen De weg vinden. De weg vinden - Locatie. I am lost. Niet weten waar je bent.

Inleiding C++ Coding Conventions

Brei een Sinterklaas / Knit a Sinterklaas

Add the standing fingers to get the tens and multiply the closed fingers to get the units.

VOORBLAD SCHRIFTELIJKE TOETSEN

Inhoud. Informatica. Hoofdstuk 5 Scripting. Context. Editor voor Programmeercode. Scripting 1

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting?

RCL Arduino Workshop 1

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeren in C# Samenvatting van C#

Vergaderen in het Engels

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:


REEKS I. Zaterdag 6 november 2010, 9u

weaving on a frame loom materials

Alistair LED stairwell luminaire Handleiding Alistair (UC03 sensor)

Functies. Huub de Beer. Eindhoven, 4 juni 2011

L.Net s88sd16-n aansluitingen en programmering.

EE1400: Programmeren in C BSc. EE, 1e jaar, , 4e college

De volgorde van een linked list omkeren

Examen computerarchitectuur

Chromosomal crossover

MS 2.2: WAT IS NIEUW IN HET MEDICATIESCHEMA IN TWIN Overzicht van alle nieuwigheden in het Medicatieschema 2.2

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Opdrachten numerieke methoden, week 1

HANDLEIDING ophalen in Outlook Express 6. HANDLEIDING ophalen in Outlook Express 6 STAP 3

VOORBLAD SCHRIFTELIJKE TOETSEN

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Examen Programmeren I 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni 2011

Modelleren en Programmeren

Microcontrollers Week 4 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Nieuwsbrief 23 december Beste ouders/ verzorgers,

Tentamen Computersystemen

Tussentoets Programmeren en genomics, 8CA10, versie A 17 maart 2017, u.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college

Programmeren (1) Examen NAAM:

Voorbeeld: Simulatie van bewegende deeltjes

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Technology, Innovation & Society Delft

RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM

Zelftest Programmeren in COBOL - deel I

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Calculator spelling. Assignment

meerkeuzevragen informatica jan 2007

Transcriptie:

Inhoudsopgave 1. Coroutines in C++... 1 1.1. Pull... 1 1.2. Push... 2 1.3. Makefile... 3 1.4. Pull2... 3 1.5. Push2... 4 1.6. Push som... 4 1.7. Link... 5 1. Coroutines in C++ 1.1. Pull De laatste standaard van C++ voorziet nog geen implementatie van coroutines. Daarom wordt hier de Boost bibliotheek gebruikt. Waarschijnlijk komen de Boost coroutines in C++17 terecht. Dit voorbeeld toont hoe de coroutine een reeks getallen genereert. Deze reeks wordt door main() overgenomen. coroutine_pull.cpp coro_t::pull_type source( [&](coro_t::push_type& sink) int first = 1; int second = 1; sink(first); sink(second); for(int i=0;i<8;++i) int third= first + second; first = second; second = third; sink(third); ); std::cout << "main() start\n"; for(auto i:source) std::cout << i << " "; 1

1.2. Push In het bovenstaande voorbeeld is de variabele source gedeclareerd als een pull coroutine. Dat betekent dat je vanuit main() er getallen kan uithalen. Het is main() die de pull doet. In de typedefinitie van coro_t zie je coroutine<int>. Dit wil zeggen dat de doorgegeven data van het int type moet zijn. De source coroutine krijgt een lambdafunctie als parameter. Deze functie zal uitgevoerd worden als coroutine. De lambdafunctie zelf heeft ook een parameter. Dit is sink. Dit is de tegenhanger van pull, namelijk push. Via sink kan de coroutine int getallen doorsturen naar main(). In main() wordt source gebruikt om de doorgegeven getallen op te vangen. Merk op dat er geen echt parallellisme is zoals bij threads. Owel loopt main() ofwel loopt de coroutine. Als één van beide delen een oneindige lus zou maken, komt het andere deel nooit meer aan bod. Bij threads is dat niet zo. Daarom spreekt men bij coroutines ook van coöperatieve multitasking. In dit voorbeeld wordt de richting omgekeerd: main() levert de woorden en de coroutine doet de verwerking ervan. coroutine_push.cpp typedef boost::coroutines2::coroutine<std::string> struct FinalEOL ~FinalEOL() std::cout << std::endl; ; const int num=5, width=15; coro_t::push_type writer( [&](coro_t::pull_type& in) // finish the last line when we leave by whatever means FinalEOL eol; // pull values from upstream, lay them out 'num' to a line for (;;) for (int i=0;i<num;++i) // when we exhaust the input, stop if(!in) return; std::cout << std::setw(width) << in.get(); // now that we've handled this item, advance to next in(); // after 'num' items, line break std::cout << std::endl; ); std::vector<std::string> words 2

; "peas", "porridge", "hot", "peas", "porridge", "cold", "peas", "porridge", "in", "the", "pot", "nine", "days", "old" std::cout << "main() start\n"; // Dit werkt //begin(writer) = "abc"; // Dit werkt ook writer("def"); writer("ghi"); 1.3. Makefile std::copy(begin(words),end(words),begin(writer)); Bij de compilatie moet je c++11 vermelden, c++14 werkt ook. 1.4. Pull2 all: coroutine_pull coroutine_push coroutine_pull: coroutine_pull.o g++ -o coroutine_pull coroutine_pull.o -lboost_coroutine -lboost_context coroutine_pull.o: coroutine_pull.cpp g++ -c -g -std=c++11 coroutine_pull.cpp coroutine_push: coroutine_push.o g++ -o coroutine_push coroutine_push.o -lboost_coroutine -lboost_context coroutine_push.o: coroutine_push.cpp g++ -c -g -std=c++11 coroutine_push.cpp Dit is een eenvoudiger pull voorbeeld. coroutine_pull2.cpp coro_t::pull_type source( // de constructor start de coroutinefunctie [&](coro_t::push_type& sink) sink(1); // geef 1 door aan de maincontext sink(1); sink(2); sink(3); 3

1.5. Push2 sink(5); sink(8); ); while(source) // ga na of de pull-coroutine nog bestaat int ret = source.get(); // haal de data std::cout << ret << " "; // context-switch naar coroutinefunctie Dit is een eenvoudiger push voorbeeld. coroutine_push2.cpp coro_t::push_type sink( // de constructor start de coroutinefunction NIET [&](coro_t::pull_type& source) for (int i:source) std::cout << i << " "; ); std::vector<int> v1,1,2,3,5,8,13,21,34,55; 1.6. Push som for(int i: v) sink(i); // push i naar de coroutinefunctie En dit is de labooefening. Stuur eerst het aantal door en daarna de getallen volgens het aantal. De coroutine berekent de som. coroutine_push_som.cpp 4

coro_t::push_type sink( [&](coro_t::pull_type& source) int aantal = source.get(); std::cout << "aantal is " << aantal << "\n"; int som = 0; for (int i = 0; i<aantal; i++) int g = source.get(); std::cout << "g is " << g << "\n"; som += g; std::cout << "de som is " << som << "\n"; ); sink(4); // het aantal getallen is 4 1.7. Link sink(1); // 1ste getal sink(2); // 2de getal sink(3); // 3de getal sink(4); // 4de getal std::cout << "einde\n"; http://www.boost.org/doc/libs/1_63_0/libs/coroutine2/doc/html/coroutine2/coroutine/ asymmetric.html 5