Supplement to this video. Watch first 35 min (the language bits), then 1:14:30 - 1:18:15 (the new map features).
You can find a fairly comprehensive list of new features on cppreference or here if you really want to see it all.
# This was created by cxx_modules_builder. DO NOT EDIT. | |
MAKE_NINJA = /home/mstearn/opensource/cxx_modules_builder/modules_builder.py | |
CXX = /usr/sbin/clang++ | |
# START HEADER | |
COMMONFLAGS = -stdlib=libc++ -pthread | |
DEBUGFLAGS = -ggdb3 -gsplit-dwarf | |
CXXFLAGS = -fcolor-diagnostics -fPIC -Isrc -Ibuild/src -Isrc/external/pegtl/include/tao/ -std=c++2a -DREALM_DEBUG=1 $COMMONFLAGS $DEBUGFLAGS | |
LIBS = -lcrypto -lc++experimental | |
LINKFLAGS = -fuse-ld=lld $COMMONFLAGS |
Supplement to this video. Watch first 35 min (the language bits), then 1:14:30 - 1:18:15 (the new map features).
You can find a fairly comprehensive list of new features on cppreference or here if you really want to see it all.
#pragma once | |
#include <iterator> | |
#include <utility> | |
#include <coroutine> | |
// Only need one of these. Shouldn't depend on generator's T. | |
struct generator_sentinel {}; | |
template <typename T> |
// derived from http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Parallel_algorithm | |
function map() { | |
emit(1, // Or put a GROUP BY key here | |
{sum: this.value, // the field you want stats for | |
min: this.value, | |
max: this.value, | |
count:1, | |
diff: 0, // M2,n: sum((val-mean)^2) | |
}); |
-------------------------------- MODULE OT -------------------------------- | |
EXTENDS Integers, TLC, FiniteSets, Sequences | |
CONSTANTS i_set, i_inc, i_nop \* Instruction model values | |
CONSTANT NULL | |
CONSTANT ImprovedAlgo | |
ASSUME ImprovedAlgo \in BOOLEAN |
export module quux; | |
export struct quux{}; | |
/////////// | |
// bar.h | |
import quux | |
///////// |
clang++ -std=c++2a -x c++-module iface.cpp --precompile -o iface.pcm -stdlib=libc++ | |
clang++ -std=c++2a -x c++ consumer.cpp -c -o consumer.o -fmodule-file=iface.pcm -stdlib=libc++ | |
echo <<OUTPUT | |
In file included from consumer.cpp:2: | |
In file included from /usr/include/c++/v1/string:505: | |
In file included from /usr/include/c++/v1/string_view:176: | |
In file included from /usr/include/c++/v1/__string:57: | |
In file included from /usr/include/c++/v1/algorithm:643: | |
/usr/include/c++/v1/utility:574:1: error: redeclaration of deduction guide |
// {{{ | |
// vim: set foldmethod=marker: | |
// g++ -O3 -pthread sc.cpp && ./a.out | |
#include <cstdio> | |
#include <thread> | |
#include <atomic> | |
using namespace std; | |
constexpr auto load_order = memory_order_acquire; | |
constexpr auto store_order = memory_order_release; |
(depth 1 are direct includes from the cpp) | |
A single file from our codebase: | |
28 headers at depth 1 | |
35 headers at depth 2 | |
50 headers at depth 3 | |
74 headers at depth 4 | |
82 headers at depth 5 | |
89 headers at depth 6 | |
127 headers at depth 7 |
// A possible implementation of symmetic coroutines on top of the asymmetric coroutines ts. | |
// At the bottom of this file, I've rewritten the symmetric examples from Boot.Coroutine | |
// using this mechanism. You can see the originals at | |
// https://www.boost.org/doc/libs/1_69_0/libs/coroutine/doc/html/coroutine/coroutine/symmetric.html | |
#include <experimental/coroutine> | |
#include <cassert> | |
#include <list> | |
#include <optional> | |
#include <vector> |