-
Notifications
You must be signed in to change notification settings - Fork 4
/
Front Page.page
219 lines (158 loc) · 10.9 KB
/
Front Page.page
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
---
format: Markdown
title: Advanced C++ - Summer Term 2018
...
**[GitHub Repository](https://github.com/fuchsto/cpppc-18/)**
- **[CppPC on YouTube](https://www.youtube.com/channel/UCPpWJiykrqqm5N_OLApbO2w)**
- [\#01: Getting started with sparse_array](https://www.youtube.com/watch?v=BRzWQTYMUtw)
- [\#02: Lazy Sequence](https://www.youtube.com/watch?v=XH6qkFQ-gQI)
- [\#03: Range Basics (Live Stream)](https://www.youtube.com/watch?v=UClJm15Ehes)
| [code: 01-ranges](/streams/01-ranges/)
- \#04: Debugging, Assembly Analysis, Benchmarking, Profiling
- \#05: View Concepts and constexpr
- \#06: Static Polymorphism (CRTP)
- \#07: STL Container Thread Safety, STL Parallelism Concepts
- [Course website](http://www.mnm-team.org/teaching/Praktika/2018ss/cpppc/)
- [Internal Area on Course Website](http://www.mnm-team.org/teaching/Praktika/2018ss/cpppc/internal)
- [My homepage at LMU](http://www.mnm-team.org/~fuchst)
- [My Github account](http://github.com/fuchsto)
- [**Notable C++ Libraries**](/libraries)
---
\
# Literature
**See [Internal Area on Course Website](http://www.mnm-team.org/teaching/Praktika/2018ss/cpppc/internal)**
- [*Discovering Modern C++ - An Intensive Course for Scientists, Engineers,
and Programmers*](http://ptgmedia.pearsoncmg.com/images/9780134383583/samplepages/9780134383583.pdf) \
Peter Gottschling, 2016
- [*Effective Modern C++*](http://www.mnm-team.org/teaching/Praktika/2018ss/cpppc/internal/2014-EMCxx.pdf) \
Scott Meyers, 2014
- [*What is Meaning? Fundamentals of Formal Semantics*](https://yanjianghk.files.wordpress.com/2014/09/paul-portner-what-is-meaning-fundamentals-of-formal-semantics-fundamentals-of-linguistics-2005.pdf) \
Paul H. Portner, 2005
## Technical References
- [STL Concepts: Complete Index](http://en.cppreference.com/w/cpp/concept)
- [STL Container Overview Poster](/stl_containers.png)
([source](http://en.cppreference.com/w/File:container-library-overview-2012-12-27.pdf))
- [C++ Language Standard (official working draft)](http://www.open-std.org/Jtc1/sc22/wg21/docs/papers/2013/n3797.pdf), great index on the last pages!
- [C++ Language Overview](http://en.cppreference.com/w/cpp/language)
- [Peter Gottschling's Modern C++ Examples](https://github.com/petergottschling/discovering_modern_cpp)
- [C++ Tutorials by STE||AR group](https://github.com/STEllAR-GROUP/cpp_lectures_2016)
- [Undefined vs. Unspecified](http://en.cppreference.com/w/cpp/language/ub)
# Lecture Notes
- [Session 01](/session-01/session-01) \
Formal Foundations, Value Semantics, Object-oriented C \
[Assignment 01 - due Wednesday 25. April](/assignment-01/)
- [Session 02](/session-02/session-02) \
Concepts vs. Types vs. Classes, Type Qualifiers (const), References \
[Assignment 02 - due Friday 04. May](/assignment-02/)
- [Session 03](/session-03/session-03) \
Containers, Class Templates, Iterators, Rule of X, Type Deduction \
[Assignment 03 - due Friday 18. May](/assignment-03/)
- [Session 04](/session-04/session-04) \
Iterator Concept Hierarchy, Function Templates, Algorithm Concepts \
[Assignment 04 - due Friday 18. May](/assignment-04/) \
[Screencast: Getting started with sparse_array](https://www.youtube.com/watch?v=BRzWQTYMUtw)
- [Session 05](/session-05/session-05) \
Move Semantics, Rule of Five, Rule of Zero (revisited) \
[Assignment 05 - due Friday 25. May](/assignment-05/)
- [Session 06](/session-06/session-06) \
Expressions revisited, Move-only Types, Smart Pointer, Polymorphism: CRTP \
[Assignment 06 - due Friday 01. June](/assignment-06/)
- [Session 07](/session-07/session-07) \
Polymorphism, Perfect Forwarding, Type Deduction (auto, decltype) \
No programming assignment **but**: read
[*Effective Modern C++*](http://www.mnm-team.org/teaching/Praktika/2018ss/cpppc/internal/2014-EMCxx.pdf)
- [Session 08](/session-08/session-08) \
Ranges, constexpr, Multithreading and Tasks \
[Assignment 07 - due Wednesday 20. June](/assignment-07/) \
[Live Stream: Range Basics](https://www.youtube.com/watch?v=UClJm15Ehes)
- [Session 09](/session-09/session-09) \
Perfect Forwarding (rep.), Views, Expression Templates \
[Assignment 08 - due Wednesday 27. June](/assignment-08/)
- [Session 10](/session-10/session-10) \
Thread Safety of STL Containers
- ...
- Session 12
# Where and Why C++ Matters
- The western world [needs you](/Obama_Computer_Science.mp4) and
[C++](/Merkel_Cpp.mp4).
- Why Instagram ported Apache Cassandra from Java to C++: \
[Open-sourcing a 10x reduction in Apache Cassandra tail latency](/files/Cassandra_Java_to_Cxx.pdf)
- [Should you Learn C++ in 2018?](https://www.youtube.com/watch?v=7xVrYnyQ04M) \
He uses simple words, but the right words.
- [The Best Programming Language for High Performance](https://lemire.me/blog/2017/01/16/best-programming-language-for-high-performance-january-2017/) \
An unemotional comparison
# Technical Lab Notes
- [Introduction to Debugging Tools](/notes-debugging)
# Downloads
- [Virtual Machine (VirtualBox)](http://files.coreglit.ch/DASH-VM.zip) \
Pre-configured development environment (use `nvim`).
Well-tested setup but current state is from late 2016 and will be updated soon.
Until then, feel free to dist-upgrade.
# Related Lectures at LMU
- [Type Systems (PD Dr. Ulrich Schöpp)](https://www.tcs.ifi.lmu.de/lehre/ss-2018/typen/typen), with [excellent lab notes](https://gitlab.cip.ifi.lmu.de/schoepp/Typsysteme/tree/master) available
- [Formal Specification and Verification (Prof. Dr. Dirk Beyer)](https://www.sosy-lab.org/Teaching/2018-SS-FormaleSpezifikationVerifikation/)
# Inspiration for Demo Projects
- [Making Audio Plugins: Receiving MIDI](http://martin-finke.de/blog/articles/audio-plugins-009-receiving-midi/)
# Selected Talks:
- [Ben Deane - "Using Types Effectively"](https://www.youtube.com/watch?v=ojZbFIQSdl8)
- [Nicolas Guillemot - "Design Patterns for Low-Level Real-Time Rendering"](https://www.youtube.com/watch?v=mdPeXJ0eiGc)
- [Arne Mertz - "Learning and Teaching Modern C++"](https://www.youtube.com/watch?v=N5wOrhL4ew8) \
One of the talks that inspired the curriculum of this course
- ["Stop writing classes."](https://www.youtube.com/watch?v=o9pEzgHorH0) \
Technically the talk is on Python the message is valid in general: Don't marry a paradigm
- [Sean Parent - "Inheritance is the Base Class of Evil"](https://www.youtube.com/watch?v=bIhUE5uUFOA) \
How polymorphism does not mean what you think, and why inheritance is a bad choice
to achieve it
- [Bjarne Stroustrup - "Object Oriented Programming without Inheritance"](https://www.youtube.com/watch?v=xcpSLRpOMJM) \
In-depth discussion of inheritance, complements Sean Parent's talk
- [Jason Jurecka - "Game engine using STD C++ 11"](https://www.youtube.com/watch?v=8AjRD6mU96s) \
A broad overview of language features that make C++ 11 the industry's favorite for code that matters
- [Chandler Carruth - "High Performance Code 201: Hybrid Data Structures"](https://www.youtube.com/watch?v=vElZc6zSIXM&t=132s) \
Why custom data structures are key - and how easy it is to implement them
- [Ben Deane - "Using Types Effectively"](https://www.youtube.com/watch?v=ojZbFIQSdl8) \
A gentle introduction to the benefits of a Turing-complete type system
- [Marshall Clow - "STL Algorithms - why you should use them, and how to write your own"](https://www.youtube.com/watch?v=h4Jl1fk3MkQ) \
... and why your C++ code is more efficient than performance-tuned C
- [Jason Turner - "Practical Performance Practices"](https://www.youtube.com/watch?v=uzF4u9KgUWI) \
The talk also gives a great and compact recapitulation of
construction semantics (copy, move, assign). Jason also explains that constexpr is
actually not needed in many cases (something I learned from this talk)
- [Ivan Cukic - "Functional reactive programming in C++"](https://www.youtube.com/watch?v=a2MmURgc6cU) \
All you need to know (for now) about functional programming in C++
- [Greg Law - “GDB - A Lot More Than You Knew"](https://www.youtube.com/watch?v=-n9Fkq1e6sg) \
Pinky swear: learning GDB basics takes 30 minutes and will change your understanding
of code and your machine for life - without effort
## Lecturer's Personal Picks
- [Bjarne Stroustrup - Learning and Teaching Modern C++](https://www.youtube.com/watch?v=fX2W3nNjJIo)
- [Bryce Lelbach - “Multidimensional Iterators”](https://www.youtube.com/watch?v=EVGenON6p9g)
- [Chandler Carruth - "Efficiency with Algorithms, Performance with Data Structures"](https://www.youtube.com/watch?v=fHNmRkzxHWs)
- [The Blaze High Performance Math Library](https://www.youtube.com/watch?v=w-Y22KrMgFE)
- [Patrick Niedzielski - "Building and Extending the Iterator Hierarchy in a Modern, Multicore World"](https://www.youtube.com/watch?v=N80hpts1SSk)
- [Fedor Pikus - "The speed of concurrency (is lock-free faster?)"](https://www.youtube.com/watch?v=9hJkWwHDDxs)
- ["Making C++ better for games, embedded and financial developers"](https://www.youtube.com/watch?v=dMupATOJKWc)
- [Andrei Alexandrescu - "Variadic Templates are Funadic"](https://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Variadic-Templates-are-Funadic)
- [Stephan T. Lavavej - "Don't help the compiler."](https://www.youtube.com/watch?v=AKtHxKJRwp4)
- [Jason Turner "Practical Performance Practices"](https://www.youtube.com/watch?v=uzF4u9KgUWI&t=580s)
- [Michael Caisse - "Asynchronous IO Using Boost.Asio"](https://www.youtube.com/watch?v=UUiM-KNH69E)
- [Michael Wong - "A lock-free concurrent toolkit for hazard pointers"](https://www.youtube.com/watch?v=mHwU0TMuwgc)
- ["A lock-free concurrency toolkit for deferred reclamation and optimistic speculation"](https://www.youtube.com/watch?v=uhgrD_B1RhQ)
- [Odin Holmes - "Ranges v3 and microcontrollers, a revolution"](https://www.youtube.com/watch?v=dxRDWgLIAZg)
- [Double-checked locking is fubar](https://youtu.be/lVBvHbJsg5Y?t=13m28s)
(it's still taught to students elsewhere around the globe)
- [The Term Paper](https://www.youtube.com/watch?v=ihCl_IYjrFg)
# Some Useful References
## Websites on C++
- [FluentCpp](https://www.fluentcpp.com/) \
A reasonably trustworthy resource, my daily read on the bus
- [CppPatterns](https://cpppatterns.com/) \
Beware: platform allows public contribution
## Real Life C++
- [Meeting C++](http://meetingcpp.com/)
- [How To Submit a Proposal for the C++ Standard Library](https://isocpp.org/std/submit-a-proposal)
## Guidelines
- [ISO C++ Library Design Guidelines](https://isocpp.org/wiki/library_design_guidelines/library-design-guidelines)
## Selected Articles
- [Teach Yourself Demoscene in 14 Days](https://github.com/psenough/teach_yourself_demoscene_in_14_days) (not really)
- [Resumable Functions: aync, await](http://meetingcpp.com/index.php/br/items/resumable-functions-async-and-await.html)
- [C++ Ranges are Pure Monadic Goodness](https://bartoszmilewski.com/2014/10/17/c-ranges-are-pure-monadic-goodness/)
- [The "Double-Checked Locking is Broken" Declaration](https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html)