Skip to content
Permalink
Browse files

Evo 0.5 release

  • Loading branch information...
jlctools committed Apr 3, 2019
1 parent f85ee9d commit 6caca206e0287e0d58dc29b8cc673fd3d9e69531
Showing 1,541 changed files with 342,128 additions and 4,382 deletions.
@@ -1,6 +1,6 @@
BSD 2-Clause License

Copyright (c) 2018, Justin Crowell
Copyright (c) 2019, Justin Crowell
All rights reserved.

Redistribution and use in source and binary forms, with or without
@@ -1,9 +1,12 @@
Evo C++ Library
---------------

* [Evo Home](https://github.com/jlctools/evo)
* [Online Docs](http://jlctools.github.io/evo/evo-0.4/html/index.html)
* [What's New](http://jlctools.github.io/evo/evo-0.4/html/WhatsNew.html)
_Apr 2019: Evo 0.5 Released!_

[Evo on Github](https://github.com/jlctools/evo)

* [Documentation](http://jlctools.github.io/evo/evo-0.5/html/index.html)
* [What's New](http://jlctools.github.io/evo/evo-0.5/html/WhatsNew.html)

Evo is a modern high performance C++ library designed to make writing efficient and portable code easy.

@@ -12,8 +15,8 @@ Inspired by modern languages like Python and D, Evo is the result of many years
Download
--------

* Linux/Unix: [Evo 0.4](https://github.com/jlctools/evo/raw/master/download/evo-0.4.tar.gz)
* Windows: [Evo 0.4](https://github.com/jlctools/evo/raw/master/download/evo-0.4.zip)
* Linux/Unix: [Evo 0.5](https://github.com/jlctools/evo/raw/master/download/evo-0.5.tar.gz)
* Windows: [Evo 0.5](https://github.com/jlctools/evo/raw/master/download/evo-0.5.zip)

License
-------

Large diffs are not rendered by default.

Oops, something went wrong.
@@ -0,0 +1,55 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>Evo C++ Library v0.5: Configuration</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Evo C++ Library v0.5
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Configuration </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Evo library can be customized using define directives before any Evo headers are included.</p>
<p><em>Work in progress</em> </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Apr 2 2019 22:50:50 for Evo C++ Library v0.5 by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>
@@ -0,0 +1,126 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>Evo C++ Library v0.5: C++ Compilers &amp; Optimization</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Evo C++ Library v0.5
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">C++ Compilers &amp; Optimization </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Evo at least requires a C++03 (ideally C++11) compliant compiler.</p>
<p>Without C++11, Evo uses some compiler specific features, most notably with threads and atomic operations.</p>
<dl class="section user"><dt>Optimization</dt><dd></dd></dl>
<p>Evo uses optimizations that take advantage of SSE 4.2 and SSE 2 CPU instructions (via compiler intrinsics). These are mainly used for string scanning/parsing and bit manipulation.</p>
<ul>
<li>Most compilers enable at least SSE 2 instructions by default, which is supported by all x64 CPUs</li>
<li>Evo follows the compiler options by default (using macros set by compiler) &ndash; defaults are generally preferred, but you may fine-tune for more specific hardware<ul>
<li>Note that Evo uses SSE 4.2 by default when AVX or AVX2 is enabled with the compiler</li>
</ul>
</li>
<li>When fine tuning for best performance, testing and benchmarking is recommended as results may vary</li>
</ul>
<p>Notes for best performance:</p><ul>
<li>GCC &amp; Clang<ul>
<li>Compile with <code>-msse4.2</code> to enable optimizations for SSE 4.2 instructions (if requiring a CPU with SSE 4.2 support is acceptable)</li>
<li>You can also optimize further for current or specific hardware with <code>-march=</code> and <code>-tune=</code></li>
<li>See: <a href="https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html">https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html</a></li>
<li>Tools like valgrind may have issues with SSE 4.2 instructions, with errors like: Unknown instruction/opcode</li>
</ul>
</li>
<li>MSVC:<ul>
<li><code>Code Generation</code> is configured under <code>C/C++</code> configuration for project, or with <code>/arch</code> option<ul>
<li>MSVC doesn't have an option to enable SSE 4.2 &ndash; if needed enable this by defining <code>EVO_USE_SSE42</code> (before including Evo headers) (if requiring a CPU with SSE 4.2 support is acceptable)</li>
<li>You can also enable Evo SSE 4.2 use by enabling AVX code generation (if requiring a CPU with AVX support is acceptable)</li>
</ul>
</li>
<li>See: <a href="https://docs.microsoft.com/en-us/cpp/build/reference/arch-minimum-cpu-architecture?view=vs-2017">https://docs.microsoft.com/en-us/cpp/build/reference/arch-minimum-cpu-architecture?view=vs-2017</a></li>
</ul>
</li>
</ul>
<dl class="section user"><dt>Testing</dt><dd></dd></dl>
<p>Tested on the following systems and compilers:</p>
<p>Ubuntu</p><ul>
<li>18.04: gcc 7.3.0, clang 6.0.0, valgrind 3.13.0 &ndash; VM</li>
<li>16.04: gcc 5.4.0, clang 3.8.0, valgrind 3.11.0 &ndash; Intel Core i7</li>
<li>14.04: gcc 4.8.4, clang 3.4.0, valgrind 3.10.1 &ndash; VM<ul>
<li>Also: gcc 4.6.4, gcc 4.7.3</li>
</ul>
</li>
</ul>
<p>CentOS &ndash; VM</p><ul>
<li>7.6: gcc 4.8.5, clang 3.4.2, valgrind 3.13.0</li>
<li>6.10: gcc 4.4.7, clang 3.4.2</li>
</ul>
<p>FreeBSD &ndash; VM</p><ul>
<li>12.0: clang 6.0.1 valgrind 3.10.1</li>
</ul>
<p>MacOS &ndash; Intel Core i5</p><ul>
<li>10.13.6: Apple LLVM 10.0.0 (clang 1000-10.44.4)</li>
</ul>
<p>Windows 10 &ndash; Intel Core i7</p><ul>
<li><a href="https://www.visualstudio.com/vs/cplusplus/">MSVC</a> 2017 Community 15.9.7</li>
<li>MSVC 2015 Community, Update 3</li>
</ul>
<p>Windows 7 SP1 32-bit &ndash; VM</p><ul>
<li>MSVC 2013 Community, Update 5</li>
<li><a href="https://www.cygwin.com/">cygwin 2.11.0</a>: gcc 7.3.0</li>
</ul>
<dl class="section user"><dt>Notes</dt><dd></dd></dl>
<ul>
<li>All tested systems are 64-bit, unless otherwise noted</li>
<li>Microsoft Visual C++:<ul>
<li>Before 2015: <a href="https://msdn.microsoft.com/en-us/library/hh567368.aspx">Static var initialization is not thread-safe ("magic statics")</a></li>
<li>2013: <a class="el" href="classevo_1_1_atomic.html" title="Atomic integer type. ">Atomic</a> or <a class="el" href="classevo_1_1_atomic_ptr.html" title="Atomic dumb pointer to single object. ">AtomicPtr</a> with const template param causes release build compiler error</li>
<li>Before 2012: <a href="https://msdn.microsoft.com/en-us/library/hh874894(v=vs.110).aspx">Atomics not supported</a>, but Evo will try to emulate atomics with a mutex (this may not work well)</li>
</ul>
</li>
<li>Cygwin:<ul>
<li>For C++11 (or newer), enable with the <code>gnu++</code> option variant to avoid compile errors, ex: <code>g++ -std=gnu++11</code></li>
</ul>
</li>
<li>Older compilers (like gcc 4.4 or clang 3.4) should use <code>-fno-strict-aliasing</code> to avoid warnings and stability issues </li>
</ul>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Apr 2 2019 22:50:49 for Evo C++ Library v0.5 by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>
@@ -0,0 +1,66 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>Evo C++ Library v0.5: Design Goals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Evo C++ Library v0.5
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Design Goals </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>General design goals:</p>
<ul>
<li>Trivial operations are short and simple, like parsing a string</li>
<li>Advanced operations are supported, like writing directly to a string buffer</li>
<li>High performance, especially for critical systems like servers and game engines</li>
<li>Simple interfaces that are easy to understand and use, differentiate basic and advanced features</li>
<li>Header-only library that's easy to integrate with projects</li>
<li>Good and thorough documentation with examples</li>
<li>Structured naming to make related things naturally sort together &ndash; ex: <a class="el" href="classevo_1_1_map_list.html" title="Map implemented as an ordered list. ">MapList</a>, <a class="el" href="classevo_1_1_map_hash.html" title="Map implemented as a hash table. ">MapHash</a>, <a class="el" href="classevo_1_1_string.html#a1031324ddc0d652da97731943953e168">split()</a>, <a class="el" href="classevo_1_1_string.html#ab9b4cd4364ccf66aa7160f38baac16d5">splitr()</a>, <a class="el" href="classevo_1_1_list.html#a534b7026ab760bcda685bd9512cc1479">splitat()</a></li>
<li>Support multiple platforms: Linux, Unix, MacOS, Windows, Cygwin</li>
<li>Support C++03, C++11, and newer</li>
<li>Tested with at least 99% code coverage</li>
</ul>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Apr 2 2019 22:50:49 for Evo C++ Library v0.5 by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>
Oops, something went wrong.

0 comments on commit 6caca20

Please sign in to comment.
You can’t perform that action at this time.