diff --git a/pros-cons/TU_Logo.pdf b/pros-cons/TU_Logo.pdf new file mode 100755 index 0000000000000000000000000000000000000000..179eed594c0e690ba2234e6c04c64d85cdeedf6e Binary files /dev/null and b/pros-cons/TU_Logo.pdf differ diff --git a/pros-cons/TU_Signet.pdf b/pros-cons/TU_Signet.pdf new file mode 100755 index 0000000000000000000000000000000000000000..aff2a489745c3acd832366c88a60ac10812cc5cb Binary files /dev/null and b/pros-cons/TU_Signet.pdf differ diff --git a/pros-cons/beamerthemetuw.sty b/pros-cons/beamerthemetuw.sty new file mode 100644 index 0000000000000000000000000000000000000000..caf74c0f9bc105404c5306ff2c44248827121362 --- /dev/null +++ b/pros-cons/beamerthemetuw.sty @@ -0,0 +1,315 @@ +%% +% @file beamerthemeTUW.sty +% @date 2016-08-30 +% @author Wolfgang Puffitsch, Denise Ratasich +% +% @brief Beamer LaTeX template matching the corporate design of TU Wien. +%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{beamerthemeTUW}[2016/08/30 Beamer template that fits the TU Wien corporate design (adopted styles from powerpoint presentation template in CD manual)] + +\RequirePackage{graphicx} +\RequirePackage{tikz} + +\def\beamer@tuwDefault{default} +\def\beamer@tuwPlain{plain} +\def\beamer@tuwSidebar{sidebar} +\def\beamer@tuwHelvetica{helvetica} +\def\beamer@tuwNoImage{none} +\def\beamer@tuwLogo{TU_Logo} +\def\beamer@tuwLogoWhite{TU_Logo_white} +\def\beamer@tuwSecondLogo{none} +\def\beamer@tuwSecondLogoWidth{.5\textwidth} + +%%% options +% The user may choose other fonts (TU Wien CD says to use helvetica). +\DeclareOptionBeamer{font}{\def\beamer@tuwFont{#1}} +% Another outer theme may be chosen, however it may not fit the TU Wien colors. +\DeclareOptionBeamer{outer}{\def\beamer@tuwOuter{#1}} +% Width of the sidebar. +\DeclareOptionBeamer{width}{\def\beamer@tuwWidth{#1}} +% Background image of TU Wien building on title page. +\newif\ifbeamer@tuwBackground +\DeclareOptionBeamer{tuw_background}{\beamer@tuwBackgroundtrue} +% Individual background image on title page. +\DeclareOptionBeamer{tuw_image}{\def\beamer@tuwImage{#1}} +% White logo (if tuw_image is dark the logo should be set to be white). +\newif\ifbeamer@tuwWhiteLogo +\DeclareOptionBeamer{tuw_whitelogo}{\beamer@tuwWhiteLogotrue} +% Print frame title beside the logo to save space. +\newif\ifbeamer@tuwFrametitleToTop +\DeclareOptionBeamer{tuw_frametitletotop}{\beamer@tuwFrametitleToToptrue} +% Second logo in case we need more than one +\DeclareOptionBeamer{second_logo}{\def\beamer@tuwSecondLogo{#1}} +\DeclareOptionBeamer{second_logo_width}{\def\beamer@tuwSecondLogoWidth{#1}} + +% defaults +\ExecuteOptionsBeamer{outer=default} +\ExecuteOptionsBeamer{width=1.6cm} +\ExecuteOptionsBeamer{font=\familydefault} +\beamer@tuwBackgroundfalse +\ExecuteOptionsBeamer{tuw_image=none} +\ExecuteOptionsBeamer{second_logo=none} +\beamer@tuwWhiteLogofalse +\beamer@tuwFrametitleToTopfalse + +\ProcessOptionsBeamer + +\ifx\beamer@tuwFont\beamer@tuwHelvetica +\RequirePackage{helvet} +\fi + +\mode<presentation> + +%%% colors +% For some reason the logo is not in TU-blue (0,102,153). The powerpoint +% presentation has TU-blue as background and the logo with a different color +% (doesn't look nice). We align the TU-blue to the logo, like in the CD manual. +\definecolor{tuwBlue}{RGB}{0,116,178} +\definecolor{tuwGray}{RGB}{102,102,102} +\definecolor{iceBlue}{RGB}{222,231,236} + +\def\tuwBlue{tuwBlue} +\def\tuwGray{tuwGray} +\def\iceBlue{iceBlue} +\def\tuwLightBlue{tuwBlue!20!white} +\def\tuwMediumBlue{tuwBlue!45!white} +\def\tuwDarkBlue{tuwBlue!70!black} +\def\alertred{red!50!black} + +% content page +\setbeamercolor{normal text}{fg=black,bg=white} +\setbeamercolor{alerted text}{fg=\alertred} +\setbeamercolor{structure}{fg=\tuwBlue} +\setbeamercolor{frametitle}{fg=black} + +\setbeamercolor{palette primary}{fg=\tuwDarkBlue,bg=\tuwLightBlue} +\setbeamercolor{palette secondary}{fg=\tuwBlue!50!black,bg=\tuwMediumBlue} +\setbeamercolor{palette tertiary}{fg=white,bg=\tuwBlue} + +\setbeamercolor{section in toc}{parent=normal text} +\setbeamercolor{subsection in toc}{parent=section in toc} + +\setbeamercolor{block title}{fg=white, bg=\tuwBlue} +\setbeamercolor{block title example}{fg=white, bg=\tuwBlue} +\setbeamercolor{block title alerted}{fg=white, bg=\alertred} +\setbeamercolor{block body}{bg=\iceBlue} +\setbeamercolor{block body example}{parent=block body} +\setbeamercolor{block body alerted}{parent=block body, fg=\alertred} + +\setbeamercolor{title in head/foot}{fg=\tuwBlue} +\setbeamercolor{page number in head/foot}{fg=\tuwBlue} +\setbeamercolor{footline}{fg=\tuwBlue} + +% color difference of default and other outer styles +\ifx\beamer@tuwOuter\beamer@tuwDefault +% default style - this is the CD of TU Wien +% title page +\setbeamercolor{title}{fg=white} +\setbeamercolor{subtitle}{fg=white} +\setbeamercolor{author}{fg=white} +\setbeamercolor{institute}{fg=white} +\setbeamercolor{date}{fg=white} +% content page +% keep defaults (black) +\else +% other outer styles (e.g., sidebar) +% title page +\setbeamercolor{title}{fg=\tuwGray} +\setbeamercolor{subtitle}{fg=\tuwGray} +\setbeamercolor{author}{fg=black} +\setbeamercolor{institute}{fg=black} +\setbeamercolor{date}{fg=black} +% content page +\setbeamercolor{frametitle}{fg=\tuwGray} +\setbeamercolor{headline}{fg=\tuwGray} +\setbeamercolor{footline}{fg=\tuwGray} +\fi + +% sidebar +\setbeamercolor{sidebar}{bg=\tuwBlue,fg=white} +\setbeamercolor{palette sidebar primary}{fg=\tuwDarkBlue,bg=\tuwLightBlue} +\setbeamercolor{palette sidebar secondary}{fg=\tuwDarkBlue,bg=\tuwLightBlue} +\setbeamercolor{palette sidebar tertiary}{fg=white,bg=\tuwBlue} +\setbeamercolor{title in sidebar}{fg=white,bg=\tuwBlue} +\setbeamercolor{section in sidebar}{fg=\tuwDarkBlue} +\setbeamercolor{section in sidebar shaded}{fg=white,bg=\tuwBlue} +\setbeamercolor{subsection in sidebar}{fg=\tuwDarkBlue} +\setbeamercolor{subsection in sidebar shaded}{fg=white,bg=\tuwBlue} + +%%% fonts + +% font weight +\setbeamerfont{title}{series=\bfseries} +\setbeamerfont{author}{series=\mdseries} +\setbeamerfont{institute}{series=\mdseries} +\setbeamerfont{date}{series=\mdseries} +\setbeamerfont{frametitle}{series=\mdseries} +\setbeamerfont{headline}{series=\mdseries} +\setbeamerfont{footline}{series=\mdseries} + +% font size difference of default and other outer styles +\ifx\beamer@tuwOuter\beamer@tuwDefault +% default style - this is the CD of TU Wien +\setbeamerfont{title}{size=\huge} +\setbeamerfont{author}{size=\normalsize} +\setbeamerfont{institute}{size=\normalsize} +\setbeamerfont{date}{size=\normalsize} +\setbeamerfont{frametitle}{size=\Large} +\setbeamerfont{framesubtitle}{size=\large} +\setbeamerfont{headline}{size=\scriptsize} +\setbeamerfont{footline}{size=\scriptsize} +\else +% other outer styles (e.g., sidebar) +% keep defaults +\fi + +\setbeamerfont{section in toc}{parent=normal text} +\setbeamerfont{subsection in toc}{parent=section in toc} + +% sidebar +\setbeamerfont{title in sidebar}{series=\bfseries} +\setbeamerfont{section in sidebar}{series=\bfseries,size=\tiny} +\setbeamerfont{subsection in sidebar}{size=\tiny} + +%%% outer +\setbeamersize{text margin left=1.2cm} +\setbeamersize{text margin right=1.5cm} +\beamertemplatenavigationsymbolsempty + + +\ifx\beamer@tuwOuter\beamer@tuwDefault +% default outher theme - this is the CD of TU Wien + +% background +\setbeamertemplate{background}{ + \begin{tikzpicture} + \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight); + % title page + \ifbeamer@tuwBackground % tu building background selected + \node[anchor=south west] (background) at (-0.15cm,-0.15cm) {\includegraphics[width=1.01\paperwidth]{TU_Background}}; + \else\ifx\beamer@tuwImage\beamer@tuwNoImage % no background image specified + \fill[white] (0,0) rectangle (\the\paperwidth,\the\paperheight); + \else % individual background image + \node[anchor=north west] (background) at (-0.15cm,-0.15cm) {\includegraphics[width=1.01\paperwidth]{\beamer@tuwImage}}; + \fi\fi + \fill[\tuwBlue, rounded corners=0.5cm] (-1cm,-1cm) rectangle (\paperwidth-0.5cm,\paperheight-3cm); + \ifbeamer@tuwWhiteLogo % white logo option specified + \node[anchor=north west] (logo) at (0.3cm,\paperheight-0.1cm) {\includegraphics[width=.5\textwidth]{\beamer@tuwLogoWhite}}; + \else + \node[anchor=north west] (logo) at (0.2cm,\paperheight-0.2cm) {\includegraphics[height=2cm]{\beamer@tuwLogo}}; + \fi + \ifx\beamer@tuwSecondLogo\beamer@tuwNoImage + \else + \node[anchor=north east] (logo2) at (\paperwidth-0.2cm,\paperheight-0.2cm) {\includegraphics[width=\beamer@tuwSecondLogoWidth]{\beamer@tuwSecondLogo}}; + \fi + % content page + \ifnum\thepage>1\relax% + \fill[\iceBlue] (0,0) rectangle (\the\paperwidth,\the\paperheight); + \fill[white, rounded corners=0.5cm] (-1cm,-1cm) rectangle(\paperwidth-0.4cm,\paperheight-0.8cm); + \node[anchor=west] (logo) at (0.3cm,\paperheight-0.4cm) {\includegraphics[height=0.5cm]{TU_Signet}}; + \fi + \end{tikzpicture} +} + +% title page +\def\beamer@titlepageLeft{1.6cm} +\setbeamertemplate{title page}{ + \vskip 4cm% + \begin{beamercolorbox}[leftskip=\beamer@titlepageLeft]{title}% + \usebeamerfont{title}\inserttitle% + \end{beamercolorbox}% + \vskip 0.5cm% + \begin{beamercolorbox}[leftskip=\beamer@titlepageLeft]{subtitle} + \usebeamerfont{subtitle}\insertsubtitle% + \end{beamercolorbox} + \vskip 0.25cm% + \vfill% + \begin{beamercolorbox}[leftskip=\beamer@titlepageLeft]{author} + \usebeamerfont{author}\insertauthor% + \end{beamercolorbox} + \begin{beamercolorbox}[leftskip=\beamer@titlepageLeft]{date} + \usebeamerfont{date}\insertdate% + \end{beamercolorbox} +} + +% frametitle +\setbeamertemplate{frametitle} +{% + \ifbeamer@tuwFrametitleToTop % frametitle should be printed beside the logo + % vbox to keep the baseline + \vbox{}\vskip -0.43cm% + \else + \vbox{}\vskip 0.7cm% + \fi + \begin{beamercolorbox}[leftskip=0cm]{frametitle} + \usebeamerfont{frametitle}\insertframetitle% + \ifbeamer@tuwFrametitleToTop + \vbox{}\vskip 0.3cm% + \else + \vbox{}\vskip 0.2cm% + \fi + \usebeamerfont{framesubtitle}\insertframesubtitle% + \end{beamercolorbox} +} + +% footline +\setbeamertemplate{footline}{% + \vspace{0.1cm} + \ifnum\thepage>1 + \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex]{footline} + \hskip 1.2cm% + \usebeamerfont{footline}\insertshortdate% + \hfill% + \insertshorttitle, \insertshortauthor% + \hfill% + \insertframenumber\:/\:\inserttotalframenumber% + \hspace*{1.5cm}% + \end{beamercolorbox} + \else + \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex,center]{}% + % empty environment to raise height + \end{beamercolorbox} + \fi + \vspace{0.1cm} +} + +\else\ifx\beamer@tuwOuter\beamer@tuwSidebar +% sidebar outer theme +\useoutertheme[width=\beamer@tuwWidth,height=0pt]{\beamer@tuwOuter} + +% footline +\setbeamertemplate{footline}{ + \ifnum\thepage>1 + \vspace{-1cm} + \hfill{\scriptsize\insertframenumber\:/\:\inserttotalframenumber~~} + \vspace{0.1cm} + \fi +} +\else +\useoutertheme{\beamer@tuwOuter} +\fi\fi % if outer=default or outer=sidebar + + +%%% inner +\ifx\beamer@tuwOuter\beamer@tuwDefault +\setbeamertemplate{itemize items}[circle] +\else +% defaults +\fi % if outer=default + +\setlength{\parskip}{6pt} + +% blocks +\setbeamertemplate{blocks}[rounded] +\pgfdeclareverticalshading{bmb@transition}{\the\paperwidth}{color(0pt)=(\iceBlue); color(3.0pt)=(\iceBlue)} + +\setbeamercovered{invisible} + +% emphasize +\renewcommand<>{\emph}[1]{{\only#2{\color{\tuwBlue}}#1}} + +\hypersetup{colorlinks=true,linkcolor=fg,citecolor=\tuwGray,urlcolor=\tuwGray} + +\mode<all> diff --git a/pros-cons/forsyte.png b/pros-cons/forsyte.png new file mode 100755 index 0000000000000000000000000000000000000000..4586335a818bd6b560fde7778b8447b13dd03a98 Binary files /dev/null and b/pros-cons/forsyte.png differ diff --git a/pros-cons/listings-rust.sty b/pros-cons/listings-rust.sty new file mode 100644 index 0000000000000000000000000000000000000000..c6bc65059496f975e75ec965bfd2132ec6d9afb1 --- /dev/null +++ b/pros-cons/listings-rust.sty @@ -0,0 +1,75 @@ +\NeedsTeXFormat{LaTeX2e}[1994/06/01] +\ProvidesPackage{listings-rust}[2018/01/23 Custom Package] + +\RequirePackage{color} +\RequirePackage{listings} + +\lstdefinelanguage{Rust}{% + sensitive% +, morecomment=[l]{//}% +, morecomment=[s]{/*}{*/}% +, moredelim=[s][{\itshape\color[rgb]{0,0,0.75}}]{\#[}{]}% +, morestring=[b]{"}% +, alsodigit={}% +, alsoother={}% +, alsoletter={!}% +% +% +% [1] reserve keywords +% [2] traits +% [3] primitive types +% [4] type and value constructors +% [5] identifier +% +, morekeywords={break, continue, else, for, if, in, loop, match, return, while} % control flow keywords +, morekeywords={as, const, let, move, mut, ref, static} % in the context of variables +, morekeywords={dyn, enum, fn, impl, Self, self, struct, trait, type, union, use, where} % in the context of declarations +, morekeywords={crate, extern, mod, pub, super} % in the context of modularisation +, morekeywords={unsafe} % markers +, morekeywords={abstract, alignof, become, box, do, final, macro, offsetof, override, priv, proc, pure, sizeof, typeof, unsized, virtual, yield} % reserved identifiers +% +% grep 'pub trait [A-Za-z][A-Za-z0-9]*' -r . | sed 's/^.*pub trait \([A-Za-z][A-Za-z0-9]*\).*/\1/g' | sort -u | tr '\n' ',' | sed 's/^\(.*\),$/{\1}\n/g' | sed 's/,/, /g' +, morekeywords=[2]{Add, AddAssign, Any, AsciiExt, AsInner, AsInnerMut, AsMut, AsRawFd, AsRawHandle, AsRawSocket, AsRef, Binary, BitAnd, BitAndAssign, Bitor, BitOr, BitOrAssign, BitXor, BitXorAssign, Borrow, BorrowMut, Boxed, BoxPlace, BufRead, BuildHasher, CastInto, CharExt, Clone, CoerceUnsized, CommandExt, Copy, Debug, DecodableFloat, Default, Deref, DerefMut, DirBuilderExt, DirEntryExt, Display, Div, DivAssign, DoubleEndedIterator, DoubleEndedSearcher, Drop, EnvKey, Eq, Error, ExactSizeIterator, ExitStatusExt, Extend, FileExt, FileTypeExt, Float, Fn, FnBox, FnMut, FnOnce, Freeze, From, FromInner, FromIterator, FromRawFd, FromRawHandle, FromRawSocket, FromStr, FullOps, FusedIterator, Generator, Hash, Hasher, Index, IndexMut, InPlace, Int, Into, IntoCow, IntoInner, IntoIterator, IntoRawFd, IntoRawHandle, IntoRawSocket, IsMinusOne, IsZero, Iterator, JoinHandleExt, LargeInt, LowerExp, LowerHex, MetadataExt, Mul, MulAssign, Neg, Not, Octal, OpenOptionsExt, Ord, OsStrExt, OsStringExt, Packet, PartialEq, PartialOrd, Pattern, PermissionsExt, Place, Placer, Pointer, Product, Put, RangeArgument, RawFloat, Read, Rem, RemAssign, Seek, Shl, ShlAssign, Shr, ShrAssign, Sized, SliceConcatExt, SliceExt, SliceIndex, Stats, Step, StrExt, Sub, SubAssign, Sum, Sync, TDynBenchFn, Terminal, Termination, ToOwned, ToSocketAddrs, ToString, Try, TryFrom, TryInto, UnicodeStr, Unsize, UpperExp, UpperHex, WideInt, Write} +, morekeywords=[2]{Send} % additional traits +% +, morekeywords=[3]{bool, char, f32, f64, i8, i16, i32, i64, isize, str, u8, u16, u32, u64, unit, usize, i128, u128} % primitive types +% +, morekeywords=[4]{Err, false, None, Ok, Some, true} % prelude value constructors +% grep 'pub \(type\|struct\|enum\) [A-Za-z][A-Za-z0-9]*' -r . | sed 's/^.*pub \(type\|struct\|enum\) \([A-Za-z][A-Za-z0-9]*\).*/\2/g' | sort -u | tr '\n' ',' | sed 's/^\(.*\),$/{\1}\n/g' | sed 's/,/, /g' +, morekeywords=[3]{AccessError, Adddf3, AddI128, AddoI128, AddoU128, ADDRESS, ADDRESS64, addrinfo, ADDRINFOA, AddrParseError, Addsf3, AddU128, advice, aiocb, Alignment, AllocErr, AnonPipe, Answer, Arc, Args, ArgsInnerDebug, ArgsOs, Argument, Arguments, ArgumentV1, Ashldi3, Ashlti3, Ashrdi3, Ashrti3, AssertParamIsClone, AssertParamIsCopy, AssertParamIsEq, AssertUnwindSafe, AtomicBool, AtomicPtr, Attr, auxtype, auxv, BackPlace, BacktraceContext, Barrier, BarrierWaitResult, Bencher, BenchMode, BenchSamples, BinaryHeap, BinaryHeapPlace, blkcnt, blkcnt64, blksize, BOOL, boolean, BOOLEAN, BoolTrie, BorrowError, BorrowMutError, Bound, Box, bpf, BTreeMap, BTreeSet, Bucket, BucketState, Buf, BufReader, BufWriter, Builder, BuildHasherDefault, BY, BYTE, Bytes, CannotReallocInPlace, cc, Cell, Chain, CHAR, CharIndices, CharPredicateSearcher, Chars, CharSearcher, CharsError, CharSliceSearcher, CharTryFromError, Child, ChildPipes, ChildStderr, ChildStdin, ChildStdio, ChildStdout, Chunks, ChunksMut, ciovec, clock, clockid, Cloned, cmsgcred, cmsghdr, CodePoint, Color, ColorConfig, Command, CommandEnv, Component, Components, CONDITION, condvar, Condvar, CONSOLE, CONTEXT, Count, Cow, cpu, CRITICAL, CStr, CString, CStringArray, Cursor, Cycle, CycleIter, daddr, DebugList, DebugMap, DebugSet, DebugStruct, DebugTuple, Decimal, Decoded, DecodeUtf16, DecodeUtf16Error, DecodeUtf8, DefaultEnvKey, DefaultHasher, dev, device, Difference, Digit32, DIR, DirBuilder, dircookie, dirent, dirent64, DirEntry, Discriminant, DISPATCHER, Display, Divdf3, Divdi3, Divmoddi4, Divmodsi4, Divsf3, Divsi3, Divti3, dl, Dl, Dlmalloc, Dns, DnsAnswer, DnsQuery, dqblk, Drain, DrainFilter, Dtor, Duration, DwarfReader, DWORD, DWORDLONG, DynamicLibrary, Edge, EHAction, EHContext, Elf32, Elf64, Empty, EmptyBucket, EncodeUtf16, EncodeWide, Entry, EntryPlace, Enumerate, Env, epoll, errno, Error, ErrorKind, EscapeDebug, EscapeDefault, EscapeUnicode, event, Event, eventrwflags, eventtype, ExactChunks, ExactChunksMut, EXCEPTION, Excess, ExchangeHeapSingleton, exit, exitcode, ExitStatus, Failure, fd, fdflags, fdsflags, fdstat, ff, fflags, File, FILE, FileAttr, filedelta, FileDesc, FilePermissions, filesize, filestat, FILETIME, filetype, FileType, Filter, FilterMap, Fixdfdi, Fixdfsi, Fixdfti, Fixsfdi, Fixsfsi, Fixsfti, Fixunsdfdi, Fixunsdfsi, Fixunsdfti, Fixunssfdi, Fixunssfsi, Fixunssfti, Flag, FlatMap, Floatdidf, FLOATING, Floatsidf, Floatsisf, Floattidf, Floattisf, Floatundidf, Floatunsidf, Floatunsisf, Floatuntidf, Floatuntisf, flock, ForceResult, FormatSpec, Formatted, Formatter, Fp, FpCategory, fpos, fpos64, fpreg, fpregset, FPUControlWord, Frame, FromBytesWithNulError, FromUtf16Error, FromUtf8Error, FrontPlace, fsblkcnt, fsfilcnt, fsflags, fsid, fstore, fsword, FullBucket, FullBucketMut, FullDecoded, Fuse, GapThenFull, GeneratorState, gid, glob, glob64, GlobalDlmalloc, greg, group, GROUP, Guard, GUID, Handle, HANDLE, Handler, HashMap, HashSet, Heap, HINSTANCE, HMODULE, hostent, HRESULT, id, idtype, if, ifaddrs, IMAGEHLP, Immut, in, in6, Incoming, Infallible, Initializer, ino, ino64, inode, input, InsertResult, Inspect, Instant, int16, int32, int64, int8, integer, IntermediateBox, Internal, Intersection, intmax, IntoInnerError, IntoIter, IntoStringError, intptr, InvalidSequence, iovec, ip, IpAddr, ipc, Ipv4Addr, ipv6, Ipv6Addr, Ipv6MulticastScope, Iter, IterMut, itimerspec, itimerval, jail, JoinHandle, JoinPathsError, KDHELP64, kevent, kevent64, key, Key, Keys, KV, l4, LARGE, lastlog, launchpad, Layout, Lazy, lconv, Leaf, LeafOrInternal, Lines, LinesAny, LineWriter, linger, linkcount, LinkedList, load, locale, LocalKey, LocalKeyState, Location, lock, LockResult, loff, LONG, lookup, lookupflags, LookupHost, LPBOOL, LPBY, LPBYTE, LPCSTR, LPCVOID, LPCWSTR, LPDWORD, LPFILETIME, LPHANDLE, LPOVERLAPPED, LPPROCESS, LPPROGRESS, LPSECURITY, LPSTARTUPINFO, LPSTR, LPVOID, LPWCH, LPWIN32, LPWSADATA, LPWSAPROTOCOL, LPWSTR, Lshrdi3, Lshrti3, lwpid, M128A, mach, major, Map, mcontext, Metadata, Metric, MetricMap, mflags, minor, mmsghdr, Moddi3, mode, Modsi3, Modti3, MonitorMsg, MOUNT, mprot, mq, mqd, msflags, msghdr, msginfo, msglen, msgqnum, msqid, Muldf3, Mulodi4, Mulosi4, Muloti4, Mulsf3, Multi3, Mut, Mutex, MutexGuard, MyCollection, n16, NamePadding, NativeLibBoilerplate, nfds, nl, nlink, NodeRef, NoneError, NonNull, NonZero, nthreads, NulError, OccupiedEntry, off, off64, oflags, Once, OnceState, OpenOptions, Option, Options, OptRes, Ordering, OsStr, OsString, Output, OVERLAPPED, Owned, Packet, PanicInfo, Param, ParseBoolError, ParseCharError, ParseError, ParseFloatError, ParseIntError, ParseResult, Part, passwd, Path, PathBuf, PCONDITION, PCONSOLE, Peekable, PeekMut, Permissions, PhantomData, pid, Pipes, PlaceBack, PlaceFront, PLARGE, PoisonError, pollfd, PopResult, port, Position, Powidf2, Powisf2, Prefix, PrefixComponent, PrintFormat, proc, Process, PROCESS, processentry, protoent, PSRWLOCK, pthread, ptr, ptrdiff, PVECTORED, Queue, radvisory, RandomState, Range, RangeFrom, RangeFull, RangeInclusive, RangeMut, RangeTo, RangeToInclusive, RawBucket, RawFd, RawHandle, RawPthread, RawSocket, RawTable, RawVec, Rc, ReadDir, Receiver, recv, RecvError, RecvTimeoutError, ReentrantMutex, ReentrantMutexGuard, Ref, RefCell, RefMut, REPARSE, Repeat, Result, Rev, Reverse, riflags, rights, rlim, rlim64, rlimit, rlimit64, roflags, Root, RSplit, RSplitMut, RSplitN, RSplitNMut, RUNTIME, rusage, RwLock, RWLock, RwLockReadGuard, RwLockWriteGuard, sa, SafeHash, Scan, sched, scope, sdflags, SearchResult, SearchStep, SECURITY, SeekFrom, segment, Select, SelectionResult, sem, sembuf, send, Sender, SendError, servent, sf, Shared, shmatt, shmid, ShortReader, ShouldPanic, Shutdown, siflags, sigaction, SigAction, sigevent, sighandler, siginfo, Sign, signal, signalfd, SignalToken, sigset, sigval, Sink, SipHasher, SipHasher13, SipHasher24, size, SIZE, Skip, SkipWhile, Slice, SmallBoolTrie, sockaddr, SOCKADDR, sockcred, Socket, SOCKET, SocketAddr, SocketAddrV4, SocketAddrV6, socklen, speed, Splice, Split, SplitMut, SplitN, SplitNMut, SplitPaths, SplitWhitespace, spwd, SRWLOCK, ssize, stack, STACKFRAME64, StartResult, STARTUPINFO, stat, Stat, stat64, statfs, statfs64, StaticKey, statvfs, StatVfs, statvfs64, Stderr, StderrLock, StderrTerminal, Stdin, StdinLock, Stdio, StdioPipes, Stdout, StdoutLock, StdoutTerminal, StepBy, String, StripPrefixError, StrSearcher, subclockflags, Subdf3, SubI128, SuboI128, SuboU128, subrwflags, subscription, Subsf3, SubU128, Summary, suseconds, SYMBOL, SYMBOLIC, SymmetricDifference, SyncSender, sysinfo, System, SystemTime, SystemTimeError, Take, TakeWhile, tcb, tcflag, TcpListener, TcpStream, TempDir, TermInfo, TerminfoTerminal, termios, termios2, TestDesc, TestDescAndFn, TestEvent, TestFn, TestName, TestOpts, TestResult, Thread, threadattr, threadentry, ThreadId, tid, time, time64, timespec, TimeSpec, timestamp, timeval, timeval32, timezone, tm, tms, ToLowercase, ToUppercase, TraitObject, TryFromIntError, TryFromSliceError, TryIter, TryLockError, TryLockResult, TryRecvError, TrySendError, TypeId, U64x2, ucontext, ucred, Udivdi3, Udivmoddi4, Udivmodsi4, Udivmodti4, Udivsi3, Udivti3, UdpSocket, uid, UINT, uint16, uint32, uint64, uint8, uintmax, uintptr, ulflags, ULONG, ULONGLONG, Umoddi3, Umodsi3, Umodti3, UnicodeVersion, Union, Unique, UnixDatagram, UnixListener, UnixStream, Unpacked, UnsafeCell, UNWIND, UpgradeResult, useconds, user, userdata, USHORT, Utf16Encoder, Utf8Error, Utf8Lossy, Utf8LossyChunk, Utf8LossyChunksIter, utimbuf, utmp, utmpx, utsname, uuid, VacantEntry, Values, ValuesMut, VarError, Variables, Vars, VarsOs, Vec, VecDeque, vm, Void, WaitTimeoutResult, WaitToken, wchar, WCHAR, Weak, whence, WIN32, WinConsole, Windows, WindowsEnvKey, winsize, WORD, Wrapping, wrlen, WSADATA, WSAPROTOCOL, WSAPROTOCOLCHAIN, Wtf8, Wtf8Buf, Wtf8CodePoints, xsw, xucred, Zip, zx} +% +, morekeywords=[5]{assert!, assert_eq!, assert_ne!, cfg!, column!, compile_error!, concat!, concat_idents!, debug_assert!, debug_assert_eq!, debug_assert_ne!, env!, eprint!, eprintln!, file!, format!, format_args!, include!, include_bytes!, include_str!, line!, module_path!, option_env!, panic!, print!, println!, select!, stringify!, thread_local!, try!, unimplemented!, unreachable!, vec!, write!, writeln!} % prelude macros +}% + +\lstdefinestyle{colouredRust}% +{ basicstyle=\ttfamily% +, identifierstyle=% +, commentstyle=\color{ACMPurple}% +, stringstyle=\color[rgb]{0, 0, 0.5}% +, keywordstyle=\color{ACMGreen}% reserved keywords +, keywordstyle=[2]\color[rgb]{0.75, 0, 0}% traits +, keywordstyle=[3]\color[rgb]{0, 0.5, 0}% primitive types +, keywordstyle=[4]\color[rgb]{0, 0.5, 0}% type and value constructors +, keywordstyle=[5]\color[rgb]{0, 0, 0.75}% macros +, columns=spaceflexible% +, keepspaces=true% +, showspaces=false% +, showtabs=false% +, showstringspaces=true% +}% + +\lstdefinestyle{boxed}{ + style=colouredRust% +, numbers=left% +, firstnumber=auto% +, numberblanklines=true% +, frame=trbL% +, numberstyle=\tiny% +, frame=leftline% +, numbersep=7pt% +, framesep=5pt% +, framerule=10pt% +, xleftmargin=15pt% +, backgroundcolor=\color[gray]{0.97}% +, rulecolor=\color[gray]{0.90}% +} diff --git a/pros-cons/nvme-v6.12-rc2-absolute.svg b/pros-cons/nvme-v6.12-rc2-absolute.svg new file mode 100644 index 0000000000000000000000000000000000000000..64c7f597591856027793ea0de575eadb0974fb4f --- /dev/null +++ b/pros-cons/nvme-v6.12-rc2-absolute.svg @@ -0,0 +1,1025 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="576pt" height="360pt" viewBox="0 0 576 360" xmlns="http://www.w3.org/2000/svg" version="1.1"> + <metadata> + <rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:date>1980-01-01T00:00:00+00:00</dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:creator> + <cc:Agent> + <dc:title>Matplotlib v3.8.4, https://matplotlib.org/</dc:title> + </cc:Agent> + </dc:creator> + </cc:Work> + </rdf:RDF> + </metadata> + <defs> + <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 360 L 576 360 L 576 0 L 0 0 z " style="fill: #ffffff"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 72 288 L 518.4 288 L 518.4 43.2 L 72 43.2 z " style="fill: #ffffff"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path d="M 109.2 288 L 109.2 43.2 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_2"> + <defs> + <path id="m227ff82998" d="M 0 0 L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/> + </defs> + <g> + <use xlink:href="#m227ff82998" x="109.2" y="288" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_1"> + <!-- 512 B --> + <g transform="translate(93.977317 320.968497) rotate(-45) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-35" d="M 691 4666 L 3169 4666 L 3169 4134 L 1269 4134 L 1269 2991 Q 1406 3038 1543 3061 Q 1681 3084 1819 3084 Q 2600 3084 3056 2656 Q 3513 2228 3513 1497 Q 3513 744 3044 326 Q 2575 -91 1722 -91 Q 1428 -91 1123 -41 Q 819 9 494 109 L 494 744 Q 775 591 1075 516 Q 1375 441 1709 441 Q 2250 441 2565 725 Q 2881 1009 2881 1497 Q 2881 1984 2565 2268 Q 2250 2553 1709 2553 Q 1456 2553 1204 2497 Q 953 2441 691 2322 L 691 4666 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-31" d="M 794 531 L 1825 531 L 1825 4091 L 703 3866 L 703 4441 L 1819 4666 L 2450 4666 L 2450 531 L 3481 531 L 3481 0 L 794 0 L 794 531 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-32" d="M 1228 531 L 3431 531 L 3431 0 L 469 0 L 469 531 Q 828 903 1448 1529 Q 2069 2156 2228 2338 Q 2531 2678 2651 2914 Q 2772 3150 2772 3378 Q 2772 3750 2511 3984 Q 2250 4219 1831 4219 Q 1534 4219 1204 4116 Q 875 4013 500 3803 L 500 4441 Q 881 4594 1212 4672 Q 1544 4750 1819 4750 Q 2544 4750 2975 4387 Q 3406 4025 3406 3419 Q 3406 3131 3298 2873 Q 3191 2616 2906 2266 Q 2828 2175 2409 1742 Q 1991 1309 1228 531 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-20" transform="scale(0.015625)"/> + <path id="DejaVuSans-42" d="M 1259 2228 L 1259 519 L 2272 519 Q 2781 519 3026 730 Q 3272 941 3272 1375 Q 3272 1813 3026 2020 Q 2781 2228 2272 2228 L 1259 2228 z M 1259 4147 L 1259 2741 L 2194 2741 Q 2656 2741 2882 2914 Q 3109 3088 3109 3444 Q 3109 3797 2882 3972 Q 2656 4147 2194 4147 L 1259 4147 z M 628 4666 L 2241 4666 Q 2963 4666 3353 4366 Q 3744 4066 3744 3513 Q 3744 3084 3544 2831 Q 3344 2578 2956 2516 Q 3422 2416 3680 2098 Q 3938 1781 3938 1306 Q 3938 681 3513 340 Q 3088 0 2303 0 L 628 0 L 628 4666 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-35"/> + <use xlink:href="#DejaVuSans-31" x="63.623047"/> + <use xlink:href="#DejaVuSans-32" x="127.246094"/> + <use xlink:href="#DejaVuSans-20" x="190.869141"/> + <use xlink:href="#DejaVuSans-42" x="222.65625"/> + </g> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_3"> + <path d="M 183.6 288 L 183.6 43.2 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_4"> + <g> + <use xlink:href="#m227ff82998" x="183.6" y="288" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_2"> + <!-- 4 KiB --> + <g transform="translate(170.773746 318.572067) rotate(-45) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-34" d="M 2419 4116 L 825 1625 L 2419 1625 L 2419 4116 z M 2253 4666 L 3047 4666 L 3047 1625 L 3713 1625 L 3713 1100 L 3047 1100 L 3047 0 L 2419 0 L 2419 1100 L 313 1100 L 313 1709 L 2253 4666 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-4b" d="M 628 4666 L 1259 4666 L 1259 2694 L 3353 4666 L 4166 4666 L 1850 2491 L 4331 0 L 3500 0 L 1259 2247 L 1259 0 L 628 0 L 628 4666 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-69" d="M 603 3500 L 1178 3500 L 1178 0 L 603 0 L 603 3500 z M 603 4863 L 1178 4863 L 1178 4134 L 603 4134 L 603 4863 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-34"/> + <use xlink:href="#DejaVuSans-20" x="63.623047"/> + <use xlink:href="#DejaVuSans-4b" x="95.410156"/> + <use xlink:href="#DejaVuSans-69" x="160.986328"/> + <use xlink:href="#DejaVuSans-42" x="188.769531"/> + </g> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_5"> + <path d="M 258 288 L 258 43.2 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_6"> + <g> + <use xlink:href="#m227ff82998" x="258" y="288" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_3"> + <!-- 32 KiB --> + <g transform="translate(240.674779 323.071034) rotate(-45) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-33" d="M 2597 2516 Q 3050 2419 3304 2112 Q 3559 1806 3559 1356 Q 3559 666 3084 287 Q 2609 -91 1734 -91 Q 1441 -91 1130 -33 Q 819 25 488 141 L 488 750 Q 750 597 1062 519 Q 1375 441 1716 441 Q 2309 441 2620 675 Q 2931 909 2931 1356 Q 2931 1769 2642 2001 Q 2353 2234 1838 2234 L 1294 2234 L 1294 2753 L 1863 2753 Q 2328 2753 2575 2939 Q 2822 3125 2822 3475 Q 2822 3834 2567 4026 Q 2313 4219 1838 4219 Q 1578 4219 1281 4162 Q 984 4106 628 3988 L 628 4550 Q 988 4650 1302 4700 Q 1616 4750 1894 4750 Q 2613 4750 3031 4423 Q 3450 4097 3450 3541 Q 3450 3153 3228 2886 Q 3006 2619 2597 2516 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-33"/> + <use xlink:href="#DejaVuSans-32" x="63.623047"/> + <use xlink:href="#DejaVuSans-20" x="127.246094"/> + <use xlink:href="#DejaVuSans-4b" x="159.033203"/> + <use xlink:href="#DejaVuSans-69" x="224.609375"/> + <use xlink:href="#DejaVuSans-42" x="252.392578"/> + </g> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_7"> + <path d="M 332.4 288 L 332.4 43.2 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_8"> + <g> + <use xlink:href="#m227ff82998" x="332.4" y="288" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_4"> + <!-- 256 KiB --> + <g transform="translate(310.575812 327.570001) rotate(-45) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-36" d="M 2113 2584 Q 1688 2584 1439 2293 Q 1191 2003 1191 1497 Q 1191 994 1439 701 Q 1688 409 2113 409 Q 2538 409 2786 701 Q 3034 994 3034 1497 Q 3034 2003 2786 2293 Q 2538 2584 2113 2584 z M 3366 4563 L 3366 3988 Q 3128 4100 2886 4159 Q 2644 4219 2406 4219 Q 1781 4219 1451 3797 Q 1122 3375 1075 2522 Q 1259 2794 1537 2939 Q 1816 3084 2150 3084 Q 2853 3084 3261 2657 Q 3669 2231 3669 1497 Q 3669 778 3244 343 Q 2819 -91 2113 -91 Q 1303 -91 875 529 Q 447 1150 447 2328 Q 447 3434 972 4092 Q 1497 4750 2381 4750 Q 2619 4750 2861 4703 Q 3103 4656 3366 4563 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-32"/> + <use xlink:href="#DejaVuSans-35" x="63.623047"/> + <use xlink:href="#DejaVuSans-36" x="127.246094"/> + <use xlink:href="#DejaVuSans-20" x="190.869141"/> + <use xlink:href="#DejaVuSans-4b" x="222.65625"/> + <use xlink:href="#DejaVuSans-69" x="288.232422"/> + <use xlink:href="#DejaVuSans-42" x="316.015625"/> + </g> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_9"> + <path d="M 406.8 288 L 406.8 43.2 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_10"> + <g> + <use xlink:href="#m227ff82998" x="406.8" y="288" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_5"> + <!-- 1 MiB --> + <g transform="translate(392.509814 320.035999) rotate(-45) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-4d" d="M 628 4666 L 1569 4666 L 2759 1491 L 3956 4666 L 4897 4666 L 4897 0 L 4281 0 L 4281 4097 L 3078 897 L 2444 897 L 1241 4097 L 1241 0 L 628 0 L 628 4666 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-31"/> + <use xlink:href="#DejaVuSans-20" x="63.623047"/> + <use xlink:href="#DejaVuSans-4d" x="95.410156"/> + <use xlink:href="#DejaVuSans-69" x="181.689453"/> + <use xlink:href="#DejaVuSans-42" x="209.472656"/> + </g> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_11"> + <path d="M 481.2 288 L 481.2 43.2 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_12"> + <g> + <use xlink:href="#m227ff82998" x="481.2" y="288" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_6"> + <!-- 16 MiB --> + <g transform="translate(462.410847 324.534966) rotate(-45) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-31"/> + <use xlink:href="#DejaVuSans-36" x="63.623047"/> + <use xlink:href="#DejaVuSans-20" x="127.246094"/> + <use xlink:href="#DejaVuSans-4d" x="159.033203"/> + <use xlink:href="#DejaVuSans-69" x="245.3125"/> + <use xlink:href="#DejaVuSans-42" x="273.095703"/> + </g> + </g> + </g> + <g id="text_7"> + <!-- Block size --> + <g transform="translate(270.392969 340.639) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-6c" d="M 603 4863 L 1178 4863 L 1178 0 L 603 0 L 603 4863 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-6f" d="M 1959 3097 Q 1497 3097 1228 2736 Q 959 2375 959 1747 Q 959 1119 1226 758 Q 1494 397 1959 397 Q 2419 397 2687 759 Q 2956 1122 2956 1747 Q 2956 2369 2687 2733 Q 2419 3097 1959 3097 z M 1959 3584 Q 2709 3584 3137 3096 Q 3566 2609 3566 1747 Q 3566 888 3137 398 Q 2709 -91 1959 -91 Q 1206 -91 779 398 Q 353 888 353 1747 Q 353 2609 779 3096 Q 1206 3584 1959 3584 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-63" d="M 3122 3366 L 3122 2828 Q 2878 2963 2633 3030 Q 2388 3097 2138 3097 Q 1578 3097 1268 2742 Q 959 2388 959 1747 Q 959 1106 1268 751 Q 1578 397 2138 397 Q 2388 397 2633 464 Q 2878 531 3122 666 L 3122 134 Q 2881 22 2623 -34 Q 2366 -91 2075 -91 Q 1284 -91 818 406 Q 353 903 353 1747 Q 353 2603 823 3093 Q 1294 3584 2113 3584 Q 2378 3584 2631 3529 Q 2884 3475 3122 3366 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-6b" d="M 581 4863 L 1159 4863 L 1159 1991 L 2875 3500 L 3609 3500 L 1753 1863 L 3688 0 L 2938 0 L 1159 1709 L 1159 0 L 581 0 L 581 4863 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-73" d="M 2834 3397 L 2834 2853 Q 2591 2978 2328 3040 Q 2066 3103 1784 3103 Q 1356 3103 1142 2972 Q 928 2841 928 2578 Q 928 2378 1081 2264 Q 1234 2150 1697 2047 L 1894 2003 Q 2506 1872 2764 1633 Q 3022 1394 3022 966 Q 3022 478 2636 193 Q 2250 -91 1575 -91 Q 1294 -91 989 -36 Q 684 19 347 128 L 347 722 Q 666 556 975 473 Q 1284 391 1588 391 Q 1994 391 2212 530 Q 2431 669 2431 922 Q 2431 1156 2273 1281 Q 2116 1406 1581 1522 L 1381 1569 Q 847 1681 609 1914 Q 372 2147 372 2553 Q 372 3047 722 3315 Q 1072 3584 1716 3584 Q 2034 3584 2315 3537 Q 2597 3491 2834 3397 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-7a" d="M 353 3500 L 3084 3500 L 3084 2975 L 922 459 L 3084 459 L 3084 0 L 275 0 L 275 525 L 2438 3041 L 353 3041 L 353 3500 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-65" d="M 3597 1894 L 3597 1613 L 953 1613 Q 991 1019 1311 708 Q 1631 397 2203 397 Q 2534 397 2845 478 Q 3156 559 3463 722 L 3463 178 Q 3153 47 2828 -22 Q 2503 -91 2169 -91 Q 1331 -91 842 396 Q 353 884 353 1716 Q 353 2575 817 3079 Q 1281 3584 2069 3584 Q 2775 3584 3186 3129 Q 3597 2675 3597 1894 z M 3022 2063 Q 3016 2534 2758 2815 Q 2500 3097 2075 3097 Q 1594 3097 1305 2825 Q 1016 2553 972 2059 L 3022 2063 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-42"/> + <use xlink:href="#DejaVuSans-6c" x="68.603516"/> + <use xlink:href="#DejaVuSans-6f" x="96.386719"/> + <use xlink:href="#DejaVuSans-63" x="157.568359"/> + <use xlink:href="#DejaVuSans-6b" x="212.548828"/> + <use xlink:href="#DejaVuSans-20" x="270.458984"/> + <use xlink:href="#DejaVuSans-73" x="302.246094"/> + <use xlink:href="#DejaVuSans-69" x="354.345703"/> + <use xlink:href="#DejaVuSans-7a" x="382.128906"/> + <use xlink:href="#DejaVuSans-65" x="434.619141"/> + </g> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_13"> + <path d="M 72 252.533016 L 518.4 252.533016 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_14"> + <defs> + <path id="m4a5b59b4a5" d="M 0 0 L -3.5 0 " style="stroke: #000000; stroke-width: 0.8"/> + </defs> + <g> + <use xlink:href="#m4a5b59b4a5" x="72" y="252.533016" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_8"> + <!-- $\mathdefault{10^{3}}$ --> + <g transform="translate(47.4 256.332235) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-30" d="M 2034 4250 Q 1547 4250 1301 3770 Q 1056 3291 1056 2328 Q 1056 1369 1301 889 Q 1547 409 2034 409 Q 2525 409 2770 889 Q 3016 1369 3016 2328 Q 3016 3291 2770 3770 Q 2525 4250 2034 4250 z M 2034 4750 Q 2819 4750 3233 4129 Q 3647 3509 3647 2328 Q 3647 1150 3233 529 Q 2819 -91 2034 -91 Q 1250 -91 836 529 Q 422 1150 422 2328 Q 422 3509 836 4129 Q 1250 4750 2034 4750 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-31" transform="translate(0 0.765625)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623047 0.765625)"/> + <use xlink:href="#DejaVuSans-33" transform="translate(128.203125 39.046875) scale(0.7)"/> + </g> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_15"> + <path d="M 72 191.933303 L 518.4 191.933303 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_16"> + <g> + <use xlink:href="#m4a5b59b4a5" x="72" y="191.933303" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_9"> + <!-- $\mathdefault{10^{4}}$ --> + <g transform="translate(47.4 195.732521) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-31" transform="translate(0 0.684375)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623047 0.684375)"/> + <use xlink:href="#DejaVuSans-34" transform="translate(128.203125 38.965625) scale(0.7)"/> + </g> + </g> + </g> + <g id="ytick_3"> + <g id="line2d_17"> + <path d="M 72 131.333589 L 518.4 131.333589 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_18"> + <g> + <use xlink:href="#m4a5b59b4a5" x="72" y="131.333589" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_10"> + <!-- $\mathdefault{10^{5}}$ --> + <g transform="translate(47.4 135.132808) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-31" transform="translate(0 0.684375)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623047 0.684375)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(128.203125 38.965625) scale(0.7)"/> + </g> + </g> + </g> + <g id="ytick_4"> + <g id="line2d_19"> + <path d="M 72 70.733875 L 518.4 70.733875 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_20"> + <g> + <use xlink:href="#m4a5b59b4a5" x="72" y="70.733875" style="stroke: #000000; stroke-width: 0.8"/> + </g> + </g> + <g id="text_11"> + <!-- $\mathdefault{10^{6}}$ --> + <g transform="translate(47.4 74.533094) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-31" transform="translate(0 0.765625)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623047 0.765625)"/> + <use xlink:href="#DejaVuSans-36" transform="translate(128.203125 39.046875) scale(0.7)"/> + </g> + </g> + </g> + <g id="ytick_5"> + <g id="line2d_21"> + <path d="M 72 284.219319 L 518.4 284.219319 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_22"> + <defs> + <path id="m90c89ea60f" d="M 0 0 L -2 0 " style="stroke: #000000; stroke-width: 0.6"/> + </defs> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="284.219319" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_6"> + <g id="line2d_23"> + <path d="M 72 276.648067 L 518.4 276.648067 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_24"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="276.648067" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_7"> + <g id="line2d_25"> + <path d="M 72 270.775348 L 518.4 270.775348 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_26"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="270.775348" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_8"> + <g id="line2d_27"> + <path d="M 72 265.976987 L 518.4 265.976987 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_28"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="265.976987" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_9"> + <g id="line2d_29"> + <path d="M 72 261.920031 L 518.4 261.920031 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_30"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="261.920031" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_10"> + <g id="line2d_31"> + <path d="M 72 258.405736 L 518.4 258.405736 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_32"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="258.405736" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_11"> + <g id="line2d_33"> + <path d="M 72 255.305907 L 518.4 255.305907 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_34"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="255.305907" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_12"> + <g id="line2d_35"> + <path d="M 72 234.290685 L 518.4 234.290685 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_36"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="234.290685" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_13"> + <g id="line2d_37"> + <path d="M 72 223.619605 L 518.4 223.619605 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_38"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="223.619605" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_14"> + <g id="line2d_39"> + <path d="M 72 216.048353 L 518.4 216.048353 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_40"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="216.048353" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_15"> + <g id="line2d_41"> + <path d="M 72 210.175634 L 518.4 210.175634 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_42"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="210.175634" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_16"> + <g id="line2d_43"> + <path d="M 72 205.377273 L 518.4 205.377273 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_44"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="205.377273" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_17"> + <g id="line2d_45"> + <path d="M 72 201.320317 L 518.4 201.320317 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_46"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="201.320317" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_18"> + <g id="line2d_47"> + <path d="M 72 197.806022 L 518.4 197.806022 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_48"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="197.806022" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_19"> + <g id="line2d_49"> + <path d="M 72 194.706194 L 518.4 194.706194 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_50"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="194.706194" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_20"> + <g id="line2d_51"> + <path d="M 72 173.690971 L 518.4 173.690971 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_52"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="173.690971" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_21"> + <g id="line2d_53"> + <path d="M 72 163.019891 L 518.4 163.019891 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_54"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="163.019891" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_22"> + <g id="line2d_55"> + <path d="M 72 155.44864 L 518.4 155.44864 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_56"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="155.44864" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_23"> + <g id="line2d_57"> + <path d="M 72 149.575921 L 518.4 149.575921 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_58"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="149.575921" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_24"> + <g id="line2d_59"> + <path d="M 72 144.77756 L 518.4 144.77756 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_60"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="144.77756" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_25"> + <g id="line2d_61"> + <path d="M 72 140.720603 L 518.4 140.720603 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_62"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="140.720603" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_26"> + <g id="line2d_63"> + <path d="M 72 137.206308 L 518.4 137.206308 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_64"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="137.206308" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_27"> + <g id="line2d_65"> + <path d="M 72 134.10648 L 518.4 134.10648 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_66"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="134.10648" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_28"> + <g id="line2d_67"> + <path d="M 72 113.091257 L 518.4 113.091257 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_68"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="113.091257" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_29"> + <g id="line2d_69"> + <path d="M 72 102.420177 L 518.4 102.420177 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_70"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="102.420177" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_30"> + <g id="line2d_71"> + <path d="M 72 94.848926 L 518.4 94.848926 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_72"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="94.848926" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_31"> + <g id="line2d_73"> + <path d="M 72 88.976207 L 518.4 88.976207 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_74"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="88.976207" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_32"> + <g id="line2d_75"> + <path d="M 72 84.177846 L 518.4 84.177846 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_76"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="84.177846" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_33"> + <g id="line2d_77"> + <path d="M 72 80.12089 L 518.4 80.12089 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_78"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="80.12089" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_34"> + <g id="line2d_79"> + <path d="M 72 76.606594 L 518.4 76.606594 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_80"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="76.606594" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_35"> + <g id="line2d_81"> + <path d="M 72 73.506766 L 518.4 73.506766 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_82"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="73.506766" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="ytick_36"> + <g id="line2d_83"> + <path d="M 72 52.491544 L 518.4 52.491544 " clip-path="url(#p6664958aee)" style="fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square"/> + </g> + <g id="line2d_84"> + <g> + <use xlink:href="#m90c89ea60f" x="72" y="52.491544" style="stroke: #000000; stroke-width: 0.6"/> + </g> + </g> + </g> + <g id="text_12"> + <!-- IO/s --> + <g transform="translate(41.320312 175.3) rotate(-90) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-49" d="M 628 4666 L 1259 4666 L 1259 0 L 628 0 L 628 4666 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-4f" d="M 2522 4238 Q 1834 4238 1429 3725 Q 1025 3213 1025 2328 Q 1025 1447 1429 934 Q 1834 422 2522 422 Q 3209 422 3611 934 Q 4013 1447 4013 2328 Q 4013 3213 3611 3725 Q 3209 4238 2522 4238 z M 2522 4750 Q 3503 4750 4090 4092 Q 4678 3434 4678 2328 Q 4678 1225 4090 567 Q 3503 -91 2522 -91 Q 1538 -91 948 565 Q 359 1222 359 2328 Q 359 3434 948 4092 Q 1538 4750 2522 4750 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-2f" d="M 1625 4666 L 2156 4666 L 531 -594 L 0 -594 L 1625 4666 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-49"/> + <use xlink:href="#DejaVuSans-4f" x="29.492188"/> + <use xlink:href="#DejaVuSans-2f" x="108.203125"/> + <use xlink:href="#DejaVuSans-73" x="141.894531"/> + </g> + </g> + </g> + <g id="patch_3"> + <path d="M 90.6 61034.045913 L 95.25 61034.045913 L 95.25 112.405754 L 90.6 112.405754 z " clip-path="url(#p6664958aee)" style="fill: #72ab97; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_4"> + <path d="M 165 61034.045913 L 169.65 61034.045913 L 169.65 117.225937 L 165 117.225937 z " clip-path="url(#p6664958aee)" style="fill: #72ab97; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_5"> + <path d="M 239.4 61034.045913 L 244.05 61034.045913 L 244.05 132.270186 L 239.4 132.270186 z " clip-path="url(#p6664958aee)" style="fill: #72ab97; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_6"> + <path d="M 313.8 61034.045913 L 318.45 61034.045913 L 318.45 171.639561 L 313.8 171.639561 z " clip-path="url(#p6664958aee)" style="fill: #72ab97; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_7"> + <path d="M 388.2 61034.045913 L 392.85 61034.045913 L 392.85 206.273129 L 388.2 206.273129 z " clip-path="url(#p6664958aee)" style="fill: #72ab97; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_8"> + <path d="M 462.6 61034.045913 L 467.25 61034.045913 L 467.25 276.451418 L 462.6 276.451418 z " clip-path="url(#p6664958aee)" style="fill: #72ab97; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_9"> + <path d="M 95.25 61034.045913 L 99.9 61034.045913 L 99.9 116.746408 L 95.25 116.746408 z " clip-path="url(#p6664958aee)" style="fill: #728ca6; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_10"> + <path d="M 169.65 61034.045913 L 174.3 61034.045913 L 174.3 120.768803 L 169.65 120.768803 z " clip-path="url(#p6664958aee)" style="fill: #728ca6; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_11"> + <path d="M 244.05 61034.045913 L 248.7 61034.045913 L 248.7 134.644996 L 244.05 134.644996 z " clip-path="url(#p6664958aee)" style="fill: #728ca6; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_12"> + <path d="M 318.45 61034.045913 L 323.1 61034.045913 L 323.1 172.559932 L 318.45 172.559932 z " clip-path="url(#p6664958aee)" style="fill: #728ca6; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_13"> + <path d="M 392.85 61034.045913 L 397.5 61034.045913 L 397.5 206.975404 L 392.85 206.975404 z " clip-path="url(#p6664958aee)" style="fill: #728ca6; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_14"> + <path d="M 467.25 61034.045913 L 471.9 61034.045913 L 471.9 276.472651 L 467.25 276.472651 z " clip-path="url(#p6664958aee)" style="fill: #728ca6; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_15"> + <path d="M 99.9 61034.045913 L 104.55 61034.045913 L 104.55 63.893907 L 99.9 63.893907 z " clip-path="url(#p6664958aee)" style="fill: #ffdcaa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_16"> + <path d="M 174.3 61034.045913 L 178.95 61034.045913 L 178.95 67.338733 L 174.3 67.338733 z " clip-path="url(#p6664958aee)" style="fill: #ffdcaa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_17"> + <path d="M 248.7 61034.045913 L 253.35 61034.045913 L 253.35 113.416168 L 248.7 113.416168 z " clip-path="url(#p6664958aee)" style="fill: #ffdcaa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_18"> + <path d="M 323.1 61034.045913 L 327.75 61034.045913 L 327.75 167.944619 L 323.1 167.944619 z " clip-path="url(#p6664958aee)" style="fill: #ffdcaa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_19"> + <path d="M 397.5 61034.045913 L 402.15 61034.045913 L 402.15 211.88259 L 397.5 211.88259 z " clip-path="url(#p6664958aee)" style="fill: #ffdcaa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_20"> + <path d="M 471.9 61034.045913 L 476.55 61034.045913 L 476.55 276.062473 L 471.9 276.062473 z " clip-path="url(#p6664958aee)" style="fill: #ffdcaa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_21"> + <path d="M 104.55 61034.045913 L 109.2 61034.045913 L 109.2 68.231422 L 104.55 68.231422 z " clip-path="url(#p6664958aee)" style="fill: #ffc6aa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_22"> + <path d="M 178.95 61034.045913 L 183.6 61034.045913 L 183.6 71.55809 L 178.95 71.55809 z " clip-path="url(#p6664958aee)" style="fill: #ffc6aa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_23"> + <path d="M 253.35 61034.045913 L 258 61034.045913 L 258 113.389194 L 253.35 113.389194 z " clip-path="url(#p6664958aee)" style="fill: #ffc6aa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_24"> + <path d="M 327.75 61034.045913 L 332.4 61034.045913 L 332.4 167.902473 L 327.75 167.902473 z " clip-path="url(#p6664958aee)" style="fill: #ffc6aa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_25"> + <path d="M 402.15 61034.045913 L 406.8 61034.045913 L 406.8 211.88259 L 402.15 211.88259 z " clip-path="url(#p6664958aee)" style="fill: #ffc6aa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_26"> + <path d="M 476.55 61034.045913 L 481.2 61034.045913 L 481.2 276.062473 L 476.55 276.062473 z " clip-path="url(#p6664958aee)" style="fill: #ffc6aa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_27"> + <path d="M 109.2 61034.045913 L 113.85 61034.045913 L 113.85 54.852244 L 109.2 54.852244 z " clip-path="url(#p6664958aee)" style="fill: url(#h30423827aa); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_28"> + <path d="M 183.6 61034.045913 L 188.25 61034.045913 L 188.25 65.336533 L 183.6 65.336533 z " clip-path="url(#p6664958aee)" style="fill: url(#h30423827aa); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_29"> + <path d="M 258 61034.045913 L 262.65 61034.045913 L 262.65 114.65734 L 258 114.65734 z " clip-path="url(#p6664958aee)" style="fill: url(#h30423827aa); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_30"> + <path d="M 332.4 61034.045913 L 337.05 61034.045913 L 337.05 175.395119 L 332.4 175.395119 z " clip-path="url(#p6664958aee)" style="fill: url(#h30423827aa); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_31"> + <path d="M 406.8 61034.045913 L 411.45 61034.045913 L 411.45 211.888207 L 406.8 211.888207 z " clip-path="url(#p6664958aee)" style="fill: url(#h30423827aa); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_32"> + <path d="M 481.2 61034.045913 L 485.85 61034.045913 L 485.85 276.118837 L 481.2 276.118837 z " clip-path="url(#p6664958aee)" style="fill: url(#h30423827aa); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_33"> + <path d="M 113.85 61034.045913 L 118.5 61034.045913 L 118.5 57.17672 L 113.85 57.17672 z " clip-path="url(#p6664958aee)" style="fill: url(#hafa64dcd44); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_34"> + <path d="M 188.25 61034.045913 L 192.9 61034.045913 L 192.9 59.588273 L 188.25 59.588273 z " clip-path="url(#p6664958aee)" style="fill: url(#hafa64dcd44); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_35"> + <path d="M 262.65 61034.045913 L 267.3 61034.045913 L 267.3 113.189459 L 262.65 113.189459 z " clip-path="url(#p6664958aee)" style="fill: url(#hafa64dcd44); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_36"> + <path d="M 337.05 61034.045913 L 341.7 61034.045913 L 341.7 175.395084 L 337.05 175.395084 z " clip-path="url(#p6664958aee)" style="fill: url(#hafa64dcd44); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_37"> + <path d="M 411.45 61034.045913 L 416.1 61034.045913 L 416.1 211.888207 L 411.45 211.888207 z " clip-path="url(#p6664958aee)" style="fill: url(#hafa64dcd44); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_38"> + <path d="M 485.85 61034.045913 L 490.5 61034.045913 L 490.5 276.118837 L 485.85 276.118837 z " clip-path="url(#p6664958aee)" style="fill: url(#hafa64dcd44); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_39"> + <path d="M 118.5 61034.045913 L 123.15 61034.045913 L 123.15 54.327273 L 118.5 54.327273 z " clip-path="url(#p6664958aee)" style="fill: url(#h222d08f4ea); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_40"> + <path d="M 192.9 61034.045913 L 197.55 61034.045913 L 197.55 65.91753 L 192.9 65.91753 z " clip-path="url(#p6664958aee)" style="fill: url(#h222d08f4ea); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_41"> + <path d="M 267.3 61034.045913 L 271.95 61034.045913 L 271.95 120.657492 L 267.3 120.657492 z " clip-path="url(#p6664958aee)" style="fill: url(#h222d08f4ea); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_42"> + <path d="M 341.7 61034.045913 L 346.35 61034.045913 L 346.35 175.399331 L 341.7 175.399331 z " clip-path="url(#p6664958aee)" style="fill: url(#h222d08f4ea); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_43"> + <path d="M 416.1 61034.045913 L 420.75 61034.045913 L 420.75 211.905065 L 416.1 211.905065 z " clip-path="url(#p6664958aee)" style="fill: url(#h222d08f4ea); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_44"> + <path d="M 490.5 61034.045913 L 495.15 61034.045913 L 495.15 276.872727 L 490.5 276.872727 z " clip-path="url(#p6664958aee)" style="fill: url(#h222d08f4ea); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_45"> + <path d="M 123.15 61034.045913 L 127.8 61034.045913 L 127.8 56.782212 L 123.15 56.782212 z " clip-path="url(#p6664958aee)" style="fill: url(#he5d6e563fc); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_46"> + <path d="M 197.55 61034.045913 L 202.2 61034.045913 L 202.2 65.914191 L 197.55 65.914191 z " clip-path="url(#p6664958aee)" style="fill: url(#he5d6e563fc); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_47"> + <path d="M 271.95 61034.045913 L 276.6 61034.045913 L 276.6 120.367424 L 271.95 120.367424 z " clip-path="url(#p6664958aee)" style="fill: url(#he5d6e563fc); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_48"> + <path d="M 346.35 61034.045913 L 351 61034.045913 L 351 175.399331 L 346.35 175.399331 z " clip-path="url(#p6664958aee)" style="fill: url(#he5d6e563fc); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_49"> + <path d="M 420.75 61034.045913 L 425.4 61034.045913 L 425.4 211.905065 L 420.75 211.905065 z " clip-path="url(#p6664958aee)" style="fill: url(#he5d6e563fc); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="patch_50"> + <path d="M 495.15 61034.045913 L 499.8 61034.045913 L 499.8 276.26271 L 495.15 276.26271 z " clip-path="url(#p6664958aee)" style="fill: url(#he5d6e563fc); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="line2d_85"> + <path clip-path="url(#p6664958aee)" style="fill: none; stroke: #000000; stroke-width: 0.5; stroke-linecap: square"/> + </g> + <g id="patch_51"> + <path d="M 72 288 L 72 43.2 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> + </g> + <g id="patch_52"> + <path d="M 518.4 288 L 518.4 43.2 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> + </g> + <g id="patch_53"> + <path d="M 72 288 L 518.4 288 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> + </g> + <g id="patch_54"> + <path d="M 72 43.2 L 518.4 43.2 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> + </g> + <g id="text_13"> + <!-- Random read throughput (Bare Metal, 1 core) --> + <g transform="translate(158.094375 37.2) scale(0.12 -0.12)"> + <defs> + <path id="DejaVuSans-52" d="M 2841 2188 Q 3044 2119 3236 1894 Q 3428 1669 3622 1275 L 4263 0 L 3584 0 L 2988 1197 Q 2756 1666 2539 1819 Q 2322 1972 1947 1972 L 1259 1972 L 1259 0 L 628 0 L 628 4666 L 2053 4666 Q 2853 4666 3247 4331 Q 3641 3997 3641 3322 Q 3641 2881 3436 2590 Q 3231 2300 2841 2188 z M 1259 4147 L 1259 2491 L 2053 2491 Q 2509 2491 2742 2702 Q 2975 2913 2975 3322 Q 2975 3731 2742 3939 Q 2509 4147 2053 4147 L 1259 4147 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-61" d="M 2194 1759 Q 1497 1759 1228 1600 Q 959 1441 959 1056 Q 959 750 1161 570 Q 1363 391 1709 391 Q 2188 391 2477 730 Q 2766 1069 2766 1631 L 2766 1759 L 2194 1759 z M 3341 1997 L 3341 0 L 2766 0 L 2766 531 Q 2569 213 2275 61 Q 1981 -91 1556 -91 Q 1019 -91 701 211 Q 384 513 384 1019 Q 384 1609 779 1909 Q 1175 2209 1959 2209 L 2766 2209 L 2766 2266 Q 2766 2663 2505 2880 Q 2244 3097 1772 3097 Q 1472 3097 1187 3025 Q 903 2953 641 2809 L 641 3341 Q 956 3463 1253 3523 Q 1550 3584 1831 3584 Q 2591 3584 2966 3190 Q 3341 2797 3341 1997 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-6e" d="M 3513 2113 L 3513 0 L 2938 0 L 2938 2094 Q 2938 2591 2744 2837 Q 2550 3084 2163 3084 Q 1697 3084 1428 2787 Q 1159 2491 1159 1978 L 1159 0 L 581 0 L 581 3500 L 1159 3500 L 1159 2956 Q 1366 3272 1645 3428 Q 1925 3584 2291 3584 Q 2894 3584 3203 3211 Q 3513 2838 3513 2113 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-64" d="M 2906 2969 L 2906 4863 L 3481 4863 L 3481 0 L 2906 0 L 2906 525 Q 2725 213 2448 61 Q 2172 -91 1784 -91 Q 1150 -91 751 415 Q 353 922 353 1747 Q 353 2572 751 3078 Q 1150 3584 1784 3584 Q 2172 3584 2448 3432 Q 2725 3281 2906 2969 z M 947 1747 Q 947 1113 1208 752 Q 1469 391 1925 391 Q 2381 391 2643 752 Q 2906 1113 2906 1747 Q 2906 2381 2643 2742 Q 2381 3103 1925 3103 Q 1469 3103 1208 2742 Q 947 2381 947 1747 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-6d" d="M 3328 2828 Q 3544 3216 3844 3400 Q 4144 3584 4550 3584 Q 5097 3584 5394 3201 Q 5691 2819 5691 2113 L 5691 0 L 5113 0 L 5113 2094 Q 5113 2597 4934 2840 Q 4756 3084 4391 3084 Q 3944 3084 3684 2787 Q 3425 2491 3425 1978 L 3425 0 L 2847 0 L 2847 2094 Q 2847 2600 2669 2842 Q 2491 3084 2119 3084 Q 1678 3084 1418 2786 Q 1159 2488 1159 1978 L 1159 0 L 581 0 L 581 3500 L 1159 3500 L 1159 2956 Q 1356 3278 1631 3431 Q 1906 3584 2284 3584 Q 2666 3584 2933 3390 Q 3200 3197 3328 2828 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-72" d="M 2631 2963 Q 2534 3019 2420 3045 Q 2306 3072 2169 3072 Q 1681 3072 1420 2755 Q 1159 2438 1159 1844 L 1159 0 L 581 0 L 581 3500 L 1159 3500 L 1159 2956 Q 1341 3275 1631 3429 Q 1922 3584 2338 3584 Q 2397 3584 2469 3576 Q 2541 3569 2628 3553 L 2631 2963 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-74" d="M 1172 4494 L 1172 3500 L 2356 3500 L 2356 3053 L 1172 3053 L 1172 1153 Q 1172 725 1289 603 Q 1406 481 1766 481 L 2356 481 L 2356 0 L 1766 0 Q 1100 0 847 248 Q 594 497 594 1153 L 594 3053 L 172 3053 L 172 3500 L 594 3500 L 594 4494 L 1172 4494 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-68" d="M 3513 2113 L 3513 0 L 2938 0 L 2938 2094 Q 2938 2591 2744 2837 Q 2550 3084 2163 3084 Q 1697 3084 1428 2787 Q 1159 2491 1159 1978 L 1159 0 L 581 0 L 581 4863 L 1159 4863 L 1159 2956 Q 1366 3272 1645 3428 Q 1925 3584 2291 3584 Q 2894 3584 3203 3211 Q 3513 2838 3513 2113 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-75" d="M 544 1381 L 544 3500 L 1119 3500 L 1119 1403 Q 1119 906 1312 657 Q 1506 409 1894 409 Q 2359 409 2629 706 Q 2900 1003 2900 1516 L 2900 3500 L 3475 3500 L 3475 0 L 2900 0 L 2900 538 Q 2691 219 2414 64 Q 2138 -91 1772 -91 Q 1169 -91 856 284 Q 544 659 544 1381 z M 1991 3584 L 1991 3584 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-67" d="M 2906 1791 Q 2906 2416 2648 2759 Q 2391 3103 1925 3103 Q 1463 3103 1205 2759 Q 947 2416 947 1791 Q 947 1169 1205 825 Q 1463 481 1925 481 Q 2391 481 2648 825 Q 2906 1169 2906 1791 z M 3481 434 Q 3481 -459 3084 -895 Q 2688 -1331 1869 -1331 Q 1566 -1331 1297 -1286 Q 1028 -1241 775 -1147 L 775 -588 Q 1028 -725 1275 -790 Q 1522 -856 1778 -856 Q 2344 -856 2625 -561 Q 2906 -266 2906 331 L 2906 616 Q 2728 306 2450 153 Q 2172 0 1784 0 Q 1141 0 747 490 Q 353 981 353 1791 Q 353 2603 747 3093 Q 1141 3584 1784 3584 Q 2172 3584 2450 3431 Q 2728 3278 2906 2969 L 2906 3500 L 3481 3500 L 3481 434 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-70" d="M 1159 525 L 1159 -1331 L 581 -1331 L 581 3500 L 1159 3500 L 1159 2969 Q 1341 3281 1617 3432 Q 1894 3584 2278 3584 Q 2916 3584 3314 3078 Q 3713 2572 3713 1747 Q 3713 922 3314 415 Q 2916 -91 2278 -91 Q 1894 -91 1617 61 Q 1341 213 1159 525 z M 3116 1747 Q 3116 2381 2855 2742 Q 2594 3103 2138 3103 Q 1681 3103 1420 2742 Q 1159 2381 1159 1747 Q 1159 1113 1420 752 Q 1681 391 2138 391 Q 2594 391 2855 752 Q 3116 1113 3116 1747 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-28" d="M 1984 4856 Q 1566 4138 1362 3434 Q 1159 2731 1159 2009 Q 1159 1288 1364 580 Q 1569 -128 1984 -844 L 1484 -844 Q 1016 -109 783 600 Q 550 1309 550 2009 Q 550 2706 781 3412 Q 1013 4119 1484 4856 L 1984 4856 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-2c" d="M 750 794 L 1409 794 L 1409 256 L 897 -744 L 494 -744 L 750 256 L 750 794 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-29" d="M 513 4856 L 1013 4856 Q 1481 4119 1714 3412 Q 1947 2706 1947 2009 Q 1947 1309 1714 600 Q 1481 -109 1013 -844 L 513 -844 Q 928 -128 1133 580 Q 1338 1288 1338 2009 Q 1338 2731 1133 3434 Q 928 4138 513 4856 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-52"/> + <use xlink:href="#DejaVuSans-61" x="67.232422"/> + <use xlink:href="#DejaVuSans-6e" x="128.511719"/> + <use xlink:href="#DejaVuSans-64" x="191.890625"/> + <use xlink:href="#DejaVuSans-6f" x="255.367188"/> + <use xlink:href="#DejaVuSans-6d" x="316.548828"/> + <use xlink:href="#DejaVuSans-20" x="413.960938"/> + <use xlink:href="#DejaVuSans-72" x="445.748047"/> + <use xlink:href="#DejaVuSans-65" x="484.611328"/> + <use xlink:href="#DejaVuSans-61" x="546.134766"/> + <use xlink:href="#DejaVuSans-64" x="607.414062"/> + <use xlink:href="#DejaVuSans-20" x="670.890625"/> + <use xlink:href="#DejaVuSans-74" x="702.677734"/> + <use xlink:href="#DejaVuSans-68" x="741.886719"/> + <use xlink:href="#DejaVuSans-72" x="805.265625"/> + <use xlink:href="#DejaVuSans-6f" x="844.128906"/> + <use xlink:href="#DejaVuSans-75" x="905.310547"/> + <use xlink:href="#DejaVuSans-67" x="968.689453"/> + <use xlink:href="#DejaVuSans-68" x="1032.166016"/> + <use xlink:href="#DejaVuSans-70" x="1095.544922"/> + <use xlink:href="#DejaVuSans-75" x="1159.021484"/> + <use xlink:href="#DejaVuSans-74" x="1222.400391"/> + <use xlink:href="#DejaVuSans-20" x="1261.609375"/> + <use xlink:href="#DejaVuSans-28" x="1293.396484"/> + <use xlink:href="#DejaVuSans-42" x="1332.410156"/> + <use xlink:href="#DejaVuSans-61" x="1401.013672"/> + <use xlink:href="#DejaVuSans-72" x="1462.292969"/> + <use xlink:href="#DejaVuSans-65" x="1501.15625"/> + <use xlink:href="#DejaVuSans-20" x="1562.679688"/> + <use xlink:href="#DejaVuSans-4d" x="1594.466797"/> + <use xlink:href="#DejaVuSans-65" x="1680.746094"/> + <use xlink:href="#DejaVuSans-74" x="1742.269531"/> + <use xlink:href="#DejaVuSans-61" x="1781.478516"/> + <use xlink:href="#DejaVuSans-6c" x="1842.757812"/> + <use xlink:href="#DejaVuSans-2c" x="1870.541016"/> + <use xlink:href="#DejaVuSans-20" x="1902.328125"/> + <use xlink:href="#DejaVuSans-31" x="1934.115234"/> + <use xlink:href="#DejaVuSans-20" x="1997.738281"/> + <use xlink:href="#DejaVuSans-63" x="2029.525391"/> + <use xlink:href="#DejaVuSans-6f" x="2084.505859"/> + <use xlink:href="#DejaVuSans-72" x="2145.6875"/> + <use xlink:href="#DejaVuSans-65" x="2184.550781"/> + <use xlink:href="#DejaVuSans-29" x="2246.074219"/> + </g> + </g> + <g id="legend_1"> + <g id="patch_55"> + <path d="M 385.08125 183.303125 L 511.4 183.303125 Q 513.4 183.303125 513.4 181.303125 L 513.4 50.2 Q 513.4 48.2 511.4 48.2 L 385.08125 48.2 Q 383.08125 48.2 383.08125 50.2 L 383.08125 181.303125 Q 383.08125 183.303125 385.08125 183.303125 z " style="fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter"/> + </g> + <g id="text_14"> + <!-- Configuration (lang, QD) --> + <g transform="translate(387.08125 59.798437) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-43" d="M 4122 4306 L 4122 3641 Q 3803 3938 3442 4084 Q 3081 4231 2675 4231 Q 1875 4231 1450 3742 Q 1025 3253 1025 2328 Q 1025 1406 1450 917 Q 1875 428 2675 428 Q 3081 428 3442 575 Q 3803 722 4122 1019 L 4122 359 Q 3791 134 3420 21 Q 3050 -91 2638 -91 Q 1578 -91 968 557 Q 359 1206 359 2328 Q 359 3453 968 4101 Q 1578 4750 2638 4750 Q 3056 4750 3426 4639 Q 3797 4528 4122 4306 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-66" d="M 2375 4863 L 2375 4384 L 1825 4384 Q 1516 4384 1395 4259 Q 1275 4134 1275 3809 L 1275 3500 L 2222 3500 L 2222 3053 L 1275 3053 L 1275 0 L 697 0 L 697 3053 L 147 3053 L 147 3500 L 697 3500 L 697 3744 Q 697 4328 969 4595 Q 1241 4863 1831 4863 L 2375 4863 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-51" d="M 2522 4238 Q 1834 4238 1429 3725 Q 1025 3213 1025 2328 Q 1025 1447 1429 934 Q 1834 422 2522 422 Q 3209 422 3611 934 Q 4013 1447 4013 2328 Q 4013 3213 3611 3725 Q 3209 4238 2522 4238 z M 3406 84 L 4238 -825 L 3475 -825 L 2784 -78 Q 2681 -84 2626 -87 Q 2572 -91 2522 -91 Q 1538 -91 948 567 Q 359 1225 359 2328 Q 359 3434 948 4092 Q 1538 4750 2522 4750 Q 3503 4750 4090 4092 Q 4678 3434 4678 2328 Q 4678 1516 4351 937 Q 4025 359 3406 84 z " transform="scale(0.015625)"/> + <path id="DejaVuSans-44" d="M 1259 4147 L 1259 519 L 2022 519 Q 2988 519 3436 956 Q 3884 1394 3884 2338 Q 3884 3275 3436 3711 Q 2988 4147 2022 4147 L 1259 4147 z M 628 4666 L 1925 4666 Q 3281 4666 3915 4102 Q 4550 3538 4550 2338 Q 4550 1131 3912 565 Q 3275 0 1925 0 L 628 0 L 628 4666 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-43"/> + <use xlink:href="#DejaVuSans-6f" x="69.824219"/> + <use xlink:href="#DejaVuSans-6e" x="131.005859"/> + <use xlink:href="#DejaVuSans-66" x="194.384766"/> + <use xlink:href="#DejaVuSans-69" x="229.589844"/> + <use xlink:href="#DejaVuSans-67" x="257.373047"/> + <use xlink:href="#DejaVuSans-75" x="320.849609"/> + <use xlink:href="#DejaVuSans-72" x="384.228516"/> + <use xlink:href="#DejaVuSans-61" x="425.341797"/> + <use xlink:href="#DejaVuSans-74" x="486.621094"/> + <use xlink:href="#DejaVuSans-69" x="525.830078"/> + <use xlink:href="#DejaVuSans-6f" x="553.613281"/> + <use xlink:href="#DejaVuSans-6e" x="614.794922"/> + <use xlink:href="#DejaVuSans-20" x="678.173828"/> + <use xlink:href="#DejaVuSans-28" x="709.960938"/> + <use xlink:href="#DejaVuSans-6c" x="748.974609"/> + <use xlink:href="#DejaVuSans-61" x="776.757812"/> + <use xlink:href="#DejaVuSans-6e" x="838.037109"/> + <use xlink:href="#DejaVuSans-67" x="901.416016"/> + <use xlink:href="#DejaVuSans-2c" x="964.892578"/> + <use xlink:href="#DejaVuSans-20" x="996.679688"/> + <use xlink:href="#DejaVuSans-51" x="1028.466797"/> + <use xlink:href="#DejaVuSans-44" x="1107.177734"/> + <use xlink:href="#DejaVuSans-29" x="1184.179688"/> + </g> + </g> + <g id="patch_56"> + <path d="M 410.535937 74.476562 L 430.535937 74.476562 L 430.535937 67.476562 L 410.535937 67.476562 z " style="fill: #72ab97; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="text_15"> + <!-- C, 1 --> + <g transform="translate(438.535937 74.476562) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-43"/> + <use xlink:href="#DejaVuSans-2c" x="69.824219"/> + <use xlink:href="#DejaVuSans-20" x="101.611328"/> + <use xlink:href="#DejaVuSans-31" x="133.398438"/> + </g> + </g> + <g id="patch_57"> + <path d="M 410.535937 89.154688 L 430.535937 89.154688 L 430.535937 82.154688 L 410.535937 82.154688 z " style="fill: #728ca6; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="text_16"> + <!-- Rust, 1 --> + <g transform="translate(438.535937 89.154688) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-52"/> + <use xlink:href="#DejaVuSans-75" x="64.982422"/> + <use xlink:href="#DejaVuSans-73" x="128.361328"/> + <use xlink:href="#DejaVuSans-74" x="180.460938"/> + <use xlink:href="#DejaVuSans-2c" x="219.669922"/> + <use xlink:href="#DejaVuSans-20" x="251.457031"/> + <use xlink:href="#DejaVuSans-31" x="283.244141"/> + </g> + </g> + <g id="patch_58"> + <path d="M 410.535937 103.832812 L 430.535937 103.832812 L 430.535937 96.832812 L 410.535937 96.832812 z " style="fill: #ffdcaa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="text_17"> + <!-- C, 8 --> + <g transform="translate(438.535937 103.832812) scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-38" d="M 2034 2216 Q 1584 2216 1326 1975 Q 1069 1734 1069 1313 Q 1069 891 1326 650 Q 1584 409 2034 409 Q 2484 409 2743 651 Q 3003 894 3003 1313 Q 3003 1734 2745 1975 Q 2488 2216 2034 2216 z M 1403 2484 Q 997 2584 770 2862 Q 544 3141 544 3541 Q 544 4100 942 4425 Q 1341 4750 2034 4750 Q 2731 4750 3128 4425 Q 3525 4100 3525 3541 Q 3525 3141 3298 2862 Q 3072 2584 2669 2484 Q 3125 2378 3379 2068 Q 3634 1759 3634 1313 Q 3634 634 3220 271 Q 2806 -91 2034 -91 Q 1263 -91 848 271 Q 434 634 434 1313 Q 434 1759 690 2068 Q 947 2378 1403 2484 z M 1172 3481 Q 1172 3119 1398 2916 Q 1625 2713 2034 2713 Q 2441 2713 2670 2916 Q 2900 3119 2900 3481 Q 2900 3844 2670 4047 Q 2441 4250 2034 4250 Q 1625 4250 1398 4047 Q 1172 3844 1172 3481 z " transform="scale(0.015625)"/> + </defs> + <use xlink:href="#DejaVuSans-43"/> + <use xlink:href="#DejaVuSans-2c" x="69.824219"/> + <use xlink:href="#DejaVuSans-20" x="101.611328"/> + <use xlink:href="#DejaVuSans-38" x="133.398438"/> + </g> + </g> + <g id="patch_59"> + <path d="M 410.535937 118.510938 L 430.535937 118.510938 L 430.535937 111.510938 L 410.535937 111.510938 z " style="fill: #ffc6aa; stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="text_18"> + <!-- Rust, 8 --> + <g transform="translate(438.535937 118.510938) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-52"/> + <use xlink:href="#DejaVuSans-75" x="64.982422"/> + <use xlink:href="#DejaVuSans-73" x="128.361328"/> + <use xlink:href="#DejaVuSans-74" x="180.460938"/> + <use xlink:href="#DejaVuSans-2c" x="219.669922"/> + <use xlink:href="#DejaVuSans-20" x="251.457031"/> + <use xlink:href="#DejaVuSans-38" x="283.244141"/> + </g> + </g> + <g id="patch_60"> + <path d="M 410.535937 133.189063 L 430.535937 133.189063 L 430.535937 126.189063 L 410.535937 126.189063 z " style="fill: url(#h30423827aa); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="text_19"> + <!-- C, 32 --> + <g transform="translate(438.535937 133.189063) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-43"/> + <use xlink:href="#DejaVuSans-2c" x="69.824219"/> + <use xlink:href="#DejaVuSans-20" x="101.611328"/> + <use xlink:href="#DejaVuSans-33" x="133.398438"/> + <use xlink:href="#DejaVuSans-32" x="197.021484"/> + </g> + </g> + <g id="patch_61"> + <path d="M 410.535937 147.867188 L 430.535937 147.867188 L 430.535937 140.867188 L 410.535937 140.867188 z " style="fill: url(#hafa64dcd44); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="text_20"> + <!-- Rust, 32 --> + <g transform="translate(438.535937 147.867188) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-52"/> + <use xlink:href="#DejaVuSans-75" x="64.982422"/> + <use xlink:href="#DejaVuSans-73" x="128.361328"/> + <use xlink:href="#DejaVuSans-74" x="180.460938"/> + <use xlink:href="#DejaVuSans-2c" x="219.669922"/> + <use xlink:href="#DejaVuSans-20" x="251.457031"/> + <use xlink:href="#DejaVuSans-33" x="283.244141"/> + <use xlink:href="#DejaVuSans-32" x="346.867188"/> + </g> + </g> + <g id="patch_62"> + <path d="M 410.535937 162.545312 L 430.535937 162.545312 L 430.535937 155.545312 L 410.535937 155.545312 z " style="fill: url(#h222d08f4ea); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="text_21"> + <!-- C, 128 --> + <g transform="translate(438.535937 162.545312) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-43"/> + <use xlink:href="#DejaVuSans-2c" x="69.824219"/> + <use xlink:href="#DejaVuSans-20" x="101.611328"/> + <use xlink:href="#DejaVuSans-31" x="133.398438"/> + <use xlink:href="#DejaVuSans-32" x="197.021484"/> + <use xlink:href="#DejaVuSans-38" x="260.644531"/> + </g> + </g> + <g id="patch_63"> + <path d="M 410.535937 177.223437 L 430.535937 177.223437 L 430.535937 170.223437 L 410.535937 170.223437 z " style="fill: url(#he5d6e563fc); stroke: #000000; stroke-width: 0.5; stroke-linejoin: miter"/> + </g> + <g id="text_22"> + <!-- Rust, 128 --> + <g transform="translate(438.535937 177.223437) scale(0.1 -0.1)"> + <use xlink:href="#DejaVuSans-52"/> + <use xlink:href="#DejaVuSans-75" x="64.982422"/> + <use xlink:href="#DejaVuSans-73" x="128.361328"/> + <use xlink:href="#DejaVuSans-74" x="180.460938"/> + <use xlink:href="#DejaVuSans-2c" x="219.669922"/> + <use xlink:href="#DejaVuSans-20" x="251.457031"/> + <use xlink:href="#DejaVuSans-31" x="283.244141"/> + <use xlink:href="#DejaVuSans-32" x="346.867188"/> + <use xlink:href="#DejaVuSans-38" x="410.490234"/> + </g> + </g> + </g> + </g> + </g> + <defs> + <clipPath id="p6664958aee"> + <rect x="72" y="43.2" width="446.4" height="244.8"/> + </clipPath> + </defs> + <defs> + <pattern id="h30423827aa" patternUnits="userSpaceOnUse" x="0" y="0" width="72" height="72"> + <rect x="0" y="0" width="73" height="73" fill="#72ab97"/> + <path d="M -36 36 L 36 -36 M -30 42 L 42 -30 M -24 48 L 48 -24 M -18 54 L 54 -18 M -12 60 L 60 -12 M -6 66 L 66 -6 M 0 72 L 72 0 M 6 78 L 78 6 M 12 84 L 84 12 M 18 90 L 90 18 M 24 96 L 96 24 M 30 102 L 102 30 M 36 108 L 108 36 " style="fill: #000000; stroke: #000000; stroke-width: 1.0; stroke-linecap: butt; stroke-linejoin: miter"/> + </pattern> + <pattern id="hafa64dcd44" patternUnits="userSpaceOnUse" x="0" y="0" width="72" height="72"> + <rect x="0" y="0" width="73" height="73" fill="#728ca6"/> + <path d="M -36 36 L 36 -36 M -30 42 L 42 -30 M -24 48 L 48 -24 M -18 54 L 54 -18 M -12 60 L 60 -12 M -6 66 L 66 -6 M 0 72 L 72 0 M 6 78 L 78 6 M 12 84 L 84 12 M 18 90 L 90 18 M 24 96 L 96 24 M 30 102 L 102 30 M 36 108 L 108 36 " style="fill: #000000; stroke: #000000; stroke-width: 1.0; stroke-linecap: butt; stroke-linejoin: miter"/> + </pattern> + <pattern id="h222d08f4ea" patternUnits="userSpaceOnUse" x="0" y="0" width="72" height="72"> + <rect x="0" y="0" width="73" height="73" fill="#ffdcaa"/> + <path d="M -36 36 L 36 -36 M -30 42 L 42 -30 M -24 48 L 48 -24 M -18 54 L 54 -18 M -12 60 L 60 -12 M -6 66 L 66 -6 M 0 72 L 72 0 M 6 78 L 78 6 M 12 84 L 84 12 M 18 90 L 90 18 M 24 96 L 96 24 M 30 102 L 102 30 M 36 108 L 108 36 " style="fill: #000000; stroke: #000000; stroke-width: 1.0; stroke-linecap: butt; stroke-linejoin: miter"/> + </pattern> + <pattern id="he5d6e563fc" patternUnits="userSpaceOnUse" x="0" y="0" width="72" height="72"> + <rect x="0" y="0" width="73" height="73" fill="#ffc6aa"/> + <path d="M -36 36 L 36 -36 M -30 42 L 42 -30 M -24 48 L 48 -24 M -18 54 L 54 -18 M -12 60 L 60 -12 M -6 66 L 66 -6 M 0 72 L 72 0 M 6 78 L 78 6 M 12 84 L 84 12 M 18 90 L 90 18 M 24 96 L 96 24 M 30 102 L 102 30 M 36 108 L 108 36 " style="fill: #000000; stroke: #000000; stroke-width: 1.0; stroke-linecap: butt; stroke-linejoin: miter"/> + </pattern> + </defs> +</svg> \ No newline at end of file diff --git a/pros-cons/rust-tutorial.pdf b/pros-cons/rust-tutorial.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2308ffcce40f65e11a4d7be48d3164f91664e75b Binary files /dev/null and b/pros-cons/rust-tutorial.pdf differ diff --git a/pros-cons/rust-tutorial.tex b/pros-cons/rust-tutorial.tex new file mode 100644 index 0000000000000000000000000000000000000000..91c078623a074903da49a9f0e77991e3a6830165 --- /dev/null +++ b/pros-cons/rust-tutorial.tex @@ -0,0 +1,217 @@ +\documentclass[aspectratio=169]{beamer} +\usepackage{listings,listings-rust} +\usepackage{multicol} +\usepackage{mathtools} +\usepackage{svg} +\usetheme[font=helvetica,second_logo=./forsyte.png]{TUW} +%Information to be included in the title page: +\title[Rust tutorial]{Forsyte and Friends Rust Tutorial} +\author{Florian Sextl, Mark Chimes, Adrian Rebola} +\date{2025-03-25} + +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} + +\lstdefinestyle{mystyle}{ + commentstyle=\color{magenta}, + keywordstyle=\color{codegreen}, + numberstyle=\tiny\color{codegray}, + stringstyle=\color{codepurple}, + basicstyle=\ttfamily\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=none, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2 +} +\lstset{style=mystyle} + +\begin{document} +\frame{\titlepage} + +\begin{frame} + \frametitle{Should you use Rust/would you want to use Rust?} + \begin{block}{Simple Answer}<2-> + That depends on a lot of things. + \end{block} +\end{frame} + +\begin{frame}[plain] + \frametitle{Performance} +\begin{onlyenv}<1-4> + \begin{itemize} + \item<2-> Studies often compare to C + \item<3-> Overall slower with runtime checks, similar optimized + \item<4-> optimizations due to safety, compile-time checks, ZSTs + \end{itemize} +\end{onlyenv} + \begin{onlyenv}<5> + Example: \href{https://rust-for-linux.com/nvme-driver}{Rust for Linux NVMe driver} + \centering + \includesvg[height=.89\textheight]{./nvme-v6.12-rc2-absolute.svg} + \end{onlyenv} + \begin{onlyenv}<6> + Further examples: + \begin{itemize} + \item \href{https://github.com/trifectatechfoundation/sudo-rs}{sudo-rs} + \item \href{https://fishshell.com/blog/rustport/}{fish} + \item \href{https://github.com/trifectatechfoundation/zlib-rs}{zlib-rs} + \item \href{https://developer.chrome.com/blog/memory-safety-fonts}{skrifa} (new font engine in Chrome) + \item at \href{https://aws.amazon.com/blogs/opensource/why-aws-loves-rust-and-how-wed-like-to-help/}{AWS} (e.g. \href{https://github.com/firecracker-microvm/firecracker}{Firecracker}) + \item \href{https://rust-for-linux.com/}{Linux}/\href{https://webcf.waybackmachine.org/web/20230514034158/https://twitter.com/markrussinovich/status/1656416376125538304?lang=en-GB}{Windows}/\href{https://source.android.com/docs/setup/build/rust/building-rust-modules/overview}{Android}/... + \item \href{https://rustutils.com/}{and} \href{https://jnsgr.uk/2025/03/carefully-but-purposefully-oxidising-ubuntu/}{many more} + \end{itemize} + \end{onlyenv} +\end{frame} + +\begin{frame} + \frametitle{Safety Guarantees} + \begin{block}{Memory Safety}<2-> + Safe from: use-after-free, null pointer dereference, out-of-bounds access, uninitialized memory, iterator invalidation, \dots due to type/ownership system + \end{block} + \begin{block}{Thread Safety}<3-> + Safe from data races due to type/ownership system and \emph{std} thread APIs + \end{block} + + \begin{alertblock}{Basic Rule}<4> + Safe Rust can never directly cause Undefined Behavior! + \end{alertblock} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Safety Encapsulation via \emph{unsafe}} + \begin{block}{unsafe Block}<2-> + \begin{itemize} + \item allows \emph{unsafe} ``super powers'' in a limited scope + \item enclosed, local safety reasoning + \end{itemize} + \end{block} + + \begin{onlyenv}<2> + \begin{lstlisting}[language=Rust] + let slice = unsafe { + // SAFETY: raw_ptr is guaranteed to be non-null + // and will point to n elements in memory. + from_raw_parts(raw_ptr, n) + }; + \end{lstlisting} + \end{onlyenv} + + \begin{block}{unsafe Functions}<3-> + \begin{itemize} + \item denotes uncheckable invariants/requirements + \item also for FFI functions + \end{itemize} + \end{block} + + \begin{alertblock}{Library Soundness}<4> + A call to a safe API must never cause Undefined Behavior! + \end{alertblock} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Type System} +\begin{onlyenv}<2> + \begin{block}{High level, compile-time abstractions} +\begin{lstlisting}[language=C] +/** Required state: SAT +* State after: SAT */ +IPASIR_API int32_t ipasir_val (void * solver, int32_t lit); +\end{lstlisting} +\begin{lstlisting}[language=Rust] +pub fn value(self: &Solver<SATState>, literal: Literal) -> + Result<Assignment, Error>; +pub fn checked_sat(self: Solver<SolvedState>) -> + Result<Solver<SATState>, Error>; +\end{lstlisting} +\end{block} +\end{onlyenv} + +\begin{onlyenv}<3> + \begin{block}{Type-based error handling} +\begin{lstlisting}[language=Rust] +pub fn solve_formula<F, C, L>(formula: F) -> + Result<Option<HashMap<L, Assignment>>, Error> +... +\end{lstlisting} +\end{block} +\end{onlyenv} + +\begin{onlyenv}<4> + \begin{block}{Advanced type level magic} + \begin{lstlisting}[language=Rust] +pub fn solve_formula<F, C, L>(formula: F) -> + Result<Option<HashMap<L, Assignment>>, Error> +where + F: IntoIterator<Item = C>, + C: IntoIterator<Item = L>, + NonZeroI32: TryFrom<L>, + Error: From<<NonZeroI32 as TryFrom<L>>::Error>, + L: Abs<Result = L> + Eq + Hash, +{ ... +\end{lstlisting} +\end{block} +\end{onlyenv} +\end{frame} + +\begin{frame} + \frametitle{Further Arguments for Rust} + \begin{itemize} + \item<2-> Great ecosystem (tools, documentation, community) + \item<3-> Easy verification (safety guarantees + type system) + \item<4-> Strong academic connections (ownership type system, language semantics) + \item<5-> Multi-leveled native concurrency support (process vs. thread vs. async) + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Why you might not want to use Rust} + \begin{onlyenv}<2> + \begin{alertblock}{Ownership type system} + \begin{itemize} + \item self-referential data structures + \item complex mental model + \end{itemize} + \end{alertblock} +\end{onlyenv} + + +\begin{onlyenv}<3> + \begin{alertblock}{Cumbersome rapid prototyping} + \begin{itemize} + \item Rust enforces good design from start + \item Workarounds are often verbose + \end{itemize} + \end{alertblock} +\end{onlyenv} + +\begin{onlyenv}<4> + \begin{alertblock}{Steep learning curve} + \begin{itemize} + \item Borrowing and lifetimes + \item unsafe + \item Language quirks: e.g. orphan rule + \end{itemize} + \end{alertblock} +\end{onlyenv} + +\begin{onlyenv}<5> + \begin{alertblock}{Instability} + \begin{itemize} + \item Language and compiler development + \item No formal semantics (but active work) + \item No specification (apart from Ferrocene) + \end{itemize} + \end{alertblock} +\end{onlyenv} + +\end{frame} + +\end{document} \ No newline at end of file