  We identify the graph data structure, frontiers, operators, an iterative loop
structure, and convergence conditions as essential components of graph
analytics systems based on the native-graph approach. Using these essential
components, we propose an abstraction that captures all the significant
programming models within graph analytics, such as bulk-synchronous,
asynchronous, shared-memory, message-passing, and push vs. pull traversals.
Finally, we demonstrate the power of our abstraction with an elegant modern C++
implementation of single-source shortest path and its required components.
