C++11 CSP Because we havent built enough CSP libraries Dr Kevin - - PowerPoint PPT Presentation

c 11 csp
SMART_READER_LITE
LIVE PREVIEW

C++11 CSP Because we havent built enough CSP libraries Dr Kevin - - PowerPoint PPT Presentation

C++11 CSP Because we havent built enough CSP libraries Dr Kevin Chalmers School of Computing Edinburgh Napier University Edinburgh k.chalmers@napier.ac.uk Before we get started... Yes you can pull it (although it needs more testing)


slide-1
SLIDE 1

C++11 CSP

Because we haven’t built enough CSP libraries Dr Kevin Chalmers

School of Computing Edinburgh Napier University Edinburgh k.chalmers@napier.ac.uk

slide-2
SLIDE 2

Before we get started...

❼ Yes you can pull it (although it needs more testing) ❼ https://github.com/kevin-chalmers/cpp11-csp

slide-3
SLIDE 3

Outline

1 OK why did you do this? 2 OK, but why did you really do this? 3 But C++ is old hat! 4 How to use C++11 CSP 5 Some Examples 6 Patterns and Networking and Other Stuff 7 Summary

slide-4
SLIDE 4

Outline

1 OK why did you do this? 2 OK, but why did you really do this? 3 But C++ is old hat! 4 How to use C++11 CSP 5 Some Examples 6 Patterns and Networking and Other Stuff 7 Summary

slide-5
SLIDE 5

Little Trajectory - occam to networking

❼ I started off working with JCSP way back in 2004

❼ Undergraduate module in Design Patterns including parallel ❼ An iteration of material Jon had been running as occam for

years ❼ My undergraduate project looked at code mobility in JCSP ❼ My PhD work looked at networking and networked mobility

slide-6
SLIDE 6

Little Trajectory - networking to occam

❼ One outcome of this work was a generalised protocol for

networked channel communications

❼ I developed a .NET version

❼ Connecting, via channels, JCSP and .NET CSP

❼ I then set off an occam journey, trying to implement the

networking stack

❼ And it was too hard ❼ The networking stack relied too heavily on object-orientation

ideas and some data sharing

slide-7
SLIDE 7

Stepping Back - C and MPI

❼ So I took a step back and thought about redesigning in

another language

❼ C and C++ being the most likely ❼ Cross runtime potential with foreign function interface ❼ I’ll get back to this

❼ As a sidetrack I started exploring MPI to compare against

what I had

❼ De facto standard for message passing in distributed parallel

❼ I became interested in MPI as a potential comm layer, but

this requires a redesign of networking

❼ Too stream focused

❼ So, I am really trying to create a framework which sits on top

  • f MPI

❼ And the simplest method was to move away from Java to C or

C++

slide-8
SLIDE 8

An aside - C++CSP Already Exists!

❼ Neil Brown did a lot of work on a C++ version of a CSP

library

❼ Also created C++CSP2 ❼ Also created C++CSP2 Networked ❼ So why not just use Neil’s work? ❼ Well, C++CSP2 is not very extensible

❼ Couldn’t implement the networked channel model I had easily ❼ Would have to strip down C++CSP2 to achieve what I wanted ❼ Also relied heavily on Boost and OS specific libraries

slide-9
SLIDE 9

Outline

1 OK why did you do this? 2 OK, but why did you really do this? 3 But C++ is old hat! 4 How to use C++11 CSP 5 Some Examples 6 Patterns and Networking and Other Stuff 7 Summary

slide-10
SLIDE 10

JCSP Code is Rotten!

❼ Oh how much do I hate writing JCSP code! ❼ Actually, I hate writing Java code - JCSP does a good job of

hiding Javaisms➋(Chalmers 2015)

❼ I want to decide if I am passing by value or reference ❼ I want to decide how and when an object is destroyed ❼ I want to override operators ❼ I could go on...

slide-11
SLIDE 11

I like the expressiveness of parallel computation in occam

❼ I do - even though I’ve never been an occam programmer ❼ What I don’t like is the lack of libraries

❼ As a programmer I find libraries more important than the

language

❼ I can work round the language with APIs

❼ I also find occam a little archaic

❼ But let’s not start an argument about it

❼ So I want the simplicity of occam, but with massive library

and platform support

❼ These two issues quite happily collided

slide-12
SLIDE 12

Outline

1 OK why did you do this? 2 OK, but why did you really do this? 3 But C++ is old hat! 4 How to use C++11 CSP 5 Some Examples 6 Patterns and Networking and Other Stuff 7 Summary

slide-13
SLIDE 13

C++11 - Not your grandfather’s C++

❼ C++ is an object-oriented language

❼ No - but you can write object-oriented code with C++ ❼ A lot of Java programmers (including me) write bad C++ code

❼ C++ is too complex

❼ Depends on your approach - you can write complex code with

C++

❼ I like to tell students that C++ is not a forgiving language

❼ C++ relies on pointers

❼ No - most C programmers wrote a lot of bad C++ code

❼ What C++ is is up for debate

❼ It is multi-paradigm. If actor models take off you can

guarantee that C++ will get send and receive or similar

slide-14
SLIDE 14

New C++ Features

❼ OK, there are a lot, so I’ll summarise the important bits

Smart pointers Automatic release of resources - no need for new and delete Lambda Expressions You can do pretty much standard functional language stuff - it just gets pretty ugly Move semantics You can now move resources as well as copy and reference

❼ Yes, this is just occam-π mobile data types

Initializer lists Create collections using braces to denote the members Variadic templates Compiler does more work for the type Concurrency FINALLY! We get

❼ Thread ❼ Mutex ❼ Future ❼ etc.

slide-15
SLIDE 15

Modern C++ Design

❼ OK, last slide before getting onto some code ❼ Modern C++ design encourages the following approaches

Avoid pointers Most memory should have a handler object that looks after the resource PIMPL Private implementation objects surrounded by a handler RAII Resource lifetime is linked to the lifetime of its

  • wner

Generic programming Templates to create reusable code

slide-16
SLIDE 16

Outline

1 OK why did you do this? 2 OK, but why did you really do this? 3 But C++ is old hat! 4 How to use C++11 CSP 5 Some Examples 6 Patterns and Networking and Other Stuff 7 Summary

slide-17
SLIDE 17

Channels

Creating and Using Channels

// Channels are typed

  • ne2one_chan <int > c;

// Operator

  • verloads

for read and write auto x = c(); c(x); // Also

  • verloads to automatically

convert to chan_in , chan_out , etc.

slide-18
SLIDE 18

Processes

Processes are Just Functions

// Lambda expression auto send = [&]() { c(5); }; auto recv = [&]() { cout << c() << endl; }; // Can also bind functions with values // void sender(chan_out <int > c) // void receiver(chan_in <int > c) fork f1(make_proc(sender , c)); fork f2(make_proc(reciever , c)); f1(); f2();

slide-19
SLIDE 19

Parallel

par uses Initializer Lists

// Parallel now looks like a control block par { prefix (0, a, b), delta(b, {c, d}), succ(c, a), printer("", "", d) }();

❼ I’d like to do something similar with alt - have an idea for

that

slide-20
SLIDE 20

Outline

1 OK why did you do this? 2 OK, but why did you really do this? 3 But C++ is old hat! 4 How to use C++11 CSP 5 Some Examples 6 Patterns and Networking and Other Stuff 7 Summary

slide-21
SLIDE 21

Outline

1 OK why did you do this? 2 OK, but why did you really do this? 3 But C++ is old hat! 4 How to use C++11 CSP 5 Some Examples 6 Patterns and Networking and Other Stuff 7 Summary

slide-22
SLIDE 22

There is still a bit I’d like to do...

❼ Building the pattern functions for C++11 CSP got me

interested in parallel patterns

❼ I’ll talk about this more tomorrow

❼ I’m almost there with a new networking stack

❼ Far more versatile and extensible ❼ Will require only little bits of code to enable new comm layers

❼ I’d like automatic fork management (i.e. you fork a process

you have to wait for it to complete)

❼ I’d like other syntactic sugar approaches built in (e.g. alt)

slide-23
SLIDE 23

Outline

1 OK why did you do this? 2 OK, but why did you really do this? 3 But C++ is old hat! 4 How to use C++11 CSP 5 Some Examples 6 Patterns and Networking and Other Stuff 7 Summary

slide-24
SLIDE 24

Summary

❼ This is very much a pet project to let me explore ideas ❼ I’m not aiming for performance, but simplicity of code ❼ My main aim is to build a new MPI supported network stack

for channel processes

❼ And hopefully stick that into Go, Rust, etc. ❼ So, happy enough to share code, but don’t expect support at

the moment

slide-25
SLIDE 25

Questions?