You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by gi...@apache.org on 2020/05/04 17:49:59 UTC

[arrow-site] branch asf-site updated: Updating built site (build b4479f80eb828ff887162f3c4c2782009e4590d6)

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/arrow-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 7e92136  Updating built site (build b4479f80eb828ff887162f3c4c2782009e4590d6)
7e92136 is described below

commit 7e9213616239623b4bb721872b7b6770d1b08bab
Author: Antoine Pitrou <an...@python.org>
AuthorDate: Mon May 4 17:49:49 2020 +0000

    Updating built site (build b4479f80eb828ff887162f3c4c2782009e4590d6)
---
 ...manifest-17366d7dfa9d48774f791f0cdef11060.json} |   2 +-
 .../introducing-arrow-c-data-interface/index.html  | 387 +++++++++++++++++++++
 blog/index.html                                    |  15 +
 feed.xml                                           | 300 ++++++++--------
 4 files changed, 540 insertions(+), 164 deletions(-)

diff --git a/assets/.sprockets-manifest-fbac4d613ea51a48907a4f64a2795c3e.json b/assets/.sprockets-manifest-17366d7dfa9d48774f791f0cdef11060.json
similarity index 63%
rename from assets/.sprockets-manifest-fbac4d613ea51a48907a4f64a2795c3e.json
rename to assets/.sprockets-manifest-17366d7dfa9d48774f791f0cdef11060.json
index 8a4b288..3b13f08 100644
--- a/assets/.sprockets-manifest-fbac4d613ea51a48907a4f64a2795c3e.json
+++ b/assets/.sprockets-manifest-17366d7dfa9d48774f791f0cdef11060.json
@@ -1 +1 @@
-{"files":{"main-18cd3029557f73c1ee82e41113127b04f6fcd84c56d9db0cb9c40ebe26ef6e33.js":{"logical_path":"main.js","mtime":"2020-04-23T17:56:03-04:00","size":124531,"digest":"18cd3029557f73c1ee82e41113127b04f6fcd84c56d9db0cb9c40ebe26ef6e33","integrity":"sha256-GM0wKVV/c8HuguQRExJ7BPb82ExW2dsMucQOvibvbjM="}},"assets":{"main.js":"main-18cd3029557f73c1ee82e41113127b04f6fcd84c56d9db0cb9c40ebe26ef6e33.js"}}
\ No newline at end of file
+{"files":{"main-18cd3029557f73c1ee82e41113127b04f6fcd84c56d9db0cb9c40ebe26ef6e33.js":{"logical_path":"main.js","mtime":"2020-05-04T13:49:40-04:00","size":124531,"digest":"18cd3029557f73c1ee82e41113127b04f6fcd84c56d9db0cb9c40ebe26ef6e33","integrity":"sha256-GM0wKVV/c8HuguQRExJ7BPb82ExW2dsMucQOvibvbjM="}},"assets":{"main.js":"main-18cd3029557f73c1ee82e41113127b04f6fcd84c56d9db0cb9c40ebe26ef6e33.js"}}
\ No newline at end of file
diff --git a/blog/2020/05/03/introducing-arrow-c-data-interface/index.html b/blog/2020/05/03/introducing-arrow-c-data-interface/index.html
new file mode 100644
index 0000000..776373d
--- /dev/null
+++ b/blog/2020/05/03/introducing-arrow-c-data-interface/index.html
@@ -0,0 +1,387 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <!-- The above meta tags *must* come first in the head; any other head content must come *after* these tags -->
+    
+    <title>Introducing the Apache Arrow C Data Interface | Apache Arrow</title>
+    
+    
+    <!-- Begin Jekyll SEO tag v2.6.1 -->
+<meta name="generator" content="Jekyll v3.8.4" />
+<meta property="og:title" content="Introducing the Apache Arrow C Data Interface" />
+<meta name="author" content="apitrou" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="This post introduces the Arrow C Data Interface, a simple C-based interoperability standard to simplify interactions between independent users and implementors of the Arrow in-memory format." />
+<meta property="og:description" content="This post introduces the Arrow C Data Interface, a simple C-based interoperability standard to simplify interactions between independent users and implementors of the Arrow in-memory format." />
+<link rel="canonical" href="https://arrow.apache.org/blog/2020/05/03/introducing-arrow-c-data-interface/" />
+<meta property="og:url" content="https://arrow.apache.org/blog/2020/05/03/introducing-arrow-c-data-interface/" />
+<meta property="og:site_name" content="Apache Arrow" />
+<meta property="og:image" content="https://arrow.apache.org/img/arrow.png" />
+<meta property="og:type" content="article" />
+<meta property="article:published_time" content="2020-05-03T19:00:00-04:00" />
+<meta name="twitter:card" content="summary_large_image" />
+<meta property="twitter:image" content="https://arrow.apache.org/img/arrow.png" />
+<meta property="twitter:title" content="Introducing the Apache Arrow C Data Interface" />
+<meta name="twitter:site" content="@ApacheArrow" />
+<meta name="twitter:creator" content="@apitrou" />
+<script type="application/ld+json">
+{"headline":"Introducing the Apache Arrow C Data Interface","dateModified":"2020-05-03T19:00:00-04:00","datePublished":"2020-05-03T19:00:00-04:00","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://arrow.apache.org/img/logo.png"},"name":"apitrou"},"@type":"BlogPosting","mainEntityOfPage":{"@type":"WebPage","@id":"https://arrow.apache.org/blog/2020/05/03/introducing-arrow-c-data-interface/"},"description":"This post introduces the Arrow C Data Interface, a si [...]
+<!-- End Jekyll SEO tag -->
+
+
+    <!-- favicons -->
+    <link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16.png" id="light1">
+    <link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png" id="light2">
+    <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/img/apple-touch-icon.png" id="light3">
+    <link rel="apple-touch-icon" type="image/png" sizes="120x120" href="/img/apple-touch-icon-120x120.png" id="light4">
+    <link rel="apple-touch-icon" type="image/png" sizes="76x76" href="/img/apple-touch-icon-76x76.png" id="light5">
+    <link rel="apple-touch-icon" type="image/png" sizes="60x60" href="/img/apple-touch-icon-60x60.png" id="light6">
+    <!-- dark mode favicons -->
+    <link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16-dark.png" id="dark1">
+    <link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32-dark.png" id="dark2">
+    <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/img/apple-touch-icon-dark.png" id="dark3">
+    <link rel="apple-touch-icon" type="image/png" sizes="120x120" href="/img/apple-touch-icon-120x120-dark.png" id="dark4">
+    <link rel="apple-touch-icon" type="image/png" sizes="76x76" href="/img/apple-touch-icon-76x76-dark.png" id="dark5">
+    <link rel="apple-touch-icon" type="image/png" sizes="60x60" href="/img/apple-touch-icon-60x60-dark.png" id="dark6">
+
+    <script>
+      // Switch to the dark-mode favicons if prefers-color-scheme: dark
+      function onUpdate() {
+        light1 = document.querySelector('link#light1');
+        light2 = document.querySelector('link#light2');
+        light3 = document.querySelector('link#light3');
+        light4 = document.querySelector('link#light4');
+        light5 = document.querySelector('link#light5');
+        light6 = document.querySelector('link#light6');
+
+        dark1 = document.querySelector('link#dark1');
+        dark2 = document.querySelector('link#dark2');
+        dark3 = document.querySelector('link#dark3');
+        dark4 = document.querySelector('link#dark4');
+        dark5 = document.querySelector('link#dark5');
+        dark6 = document.querySelector('link#dark6');
+
+        if (matcher.matches) {
+          light1.remove();
+          light2.remove();
+          light3.remove();
+          light4.remove();
+          light5.remove();
+          light6.remove();
+          document.head.append(dark1);
+          document.head.append(dark2);
+          document.head.append(dark3);
+          document.head.append(dark4);
+          document.head.append(dark5);
+          document.head.append(dark6);
+        } else {
+          dark1.remove();
+          dark2.remove();
+          dark3.remove();
+          dark4.remove();
+          dark5.remove();
+          dark6.remove();
+          document.head.append(light1);
+          document.head.append(light2);
+          document.head.append(light3);
+          document.head.append(light4);
+          document.head.append(light5);
+          document.head.append(light6);
+        }
+      }
+      matcher = window.matchMedia('(prefers-color-scheme: dark)');
+      matcher.addListener(onUpdate);
+      onUpdate();
+    </script>
+
+    <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
+
+    <link href="/css/main.css" rel="stylesheet">
+    <link href="/css/syntax.css" rel="stylesheet">
+    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
+    
+    <!-- Global Site Tag (gtag.js) - Google Analytics -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-107500873-1"></script>
+<script>
+  window.dataLayer = window.dataLayer || [];
+  function gtag(){dataLayer.push(arguments)};
+  gtag('js', new Date());
+
+  gtag('config', 'UA-107500873-1');
+</script>
+
+    
+  </head>
+
+
+<body class="wrap">
+  <header>
+    <nav class="navbar navbar-expand-md navbar-dark bg-dark">
+  <a class="navbar-brand" href="/"><img src="/img/arrow-inverse-300px.png" height="60px"/></a>
+  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#arrow-navbar" aria-controls="arrow-navbar" aria-expanded="false" aria-label="Toggle navigation">
+    <span class="navbar-toggler-icon"></span>
+  </button>
+
+    <!-- Collect the nav links, forms, and other content for toggling -->
+    <div class="collapse navbar-collapse" id="arrow-navbar">
+      <ul class="nav navbar-nav">
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#"
+             id="navbarDropdownProjectLinks" role="button" data-toggle="dropdown"
+             aria-haspopup="true" aria-expanded="false">
+             Project Links
+          </a>
+          <div class="dropdown-menu" aria-labelledby="navbarDropdownProjectLinks">
+            <a class="dropdown-item" href="/install/">Installation</a>
+            <a class="dropdown-item" href="/release/">Releases</a>
+            <a class="dropdown-item" href="/faq/">FAQ</a>
+            <a class="dropdown-item" href="/blog/">Blog</a>
+            <a class="dropdown-item" href="https://github.com/apache/arrow">Source Code</a>
+            <a class="dropdown-item" href="https://issues.apache.org/jira/browse/ARROW">Issue Tracker</a>
+          </div>
+        </li>
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#"
+             id="navbarDropdownCommunity" role="button" data-toggle="dropdown"
+             aria-haspopup="true" aria-expanded="false">
+             Community
+          </a>
+          <div class="dropdown-menu" aria-labelledby="navbarDropdownCommunity">
+            <a class="dropdown-item" href="http://mail-archives.apache.org/mod_mbox/arrow-user/">User Mailing List</a>
+            <a class="dropdown-item" href="http://mail-archives.apache.org/mod_mbox/arrow-dev/">Dev Mailing List</a>
+            <a class="dropdown-item" href="https://cwiki.apache.org/confluence/display/ARROW">Developer Wiki</a>
+            <a class="dropdown-item" href="/committers/">Committers</a>
+            <a class="dropdown-item" href="/powered_by/">Powered By</a>
+          </div>
+        </li>
+        <li class="nav-item">
+          <a class="nav-link" href="/docs/format/Columnar.html"
+             role="button" aria-haspopup="true" aria-expanded="false">
+             Specification
+          </a>
+        </li>
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#"
+             id="navbarDropdownDocumentation" role="button" data-toggle="dropdown"
+             aria-haspopup="true" aria-expanded="false">
+             Documentation
+          </a>
+          <div class="dropdown-menu" aria-labelledby="navbarDropdownDocumentation">
+            <a class="dropdown-item" href="/docs">Project Docs</a>
+            <a class="dropdown-item" href="/docs/python">Python</a>
+            <a class="dropdown-item" href="/docs/cpp">C++</a>
+            <a class="dropdown-item" href="/docs/java">Java</a>
+            <a class="dropdown-item" href="/docs/c_glib">C GLib</a>
+            <a class="dropdown-item" href="/docs/js">JavaScript</a>
+            <a class="dropdown-item" href="/docs/r">R</a>
+          </div>
+        </li>
+        <!-- <li><a href="/blog">Blog</a></li> -->
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#"
+             id="navbarDropdownASF" role="button" data-toggle="dropdown"
+             aria-haspopup="true" aria-expanded="false">
+             ASF Links
+          </a>
+          <div class="dropdown-menu" aria-labelledby="navbarDropdownASF">
+            <a class="dropdown-item" href="http://www.apache.org/">ASF Website</a>
+            <a class="dropdown-item" href="http://www.apache.org/licenses/">License</a>
+            <a class="dropdown-item" href="http://www.apache.org/foundation/sponsorship.html">Donate</a>
+            <a class="dropdown-item" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
+            <a class="dropdown-item" href="http://www.apache.org/security/">Security</a>
+          </div>
+        </li>
+      </ul>
+      <div class="flex-row justify-content-end ml-md-auto">
+        <a class="d-sm-none d-md-inline pr-2" href="https://www.apache.org/events/current-event.html">
+          <img src="https://www.apache.org/events/current-event-234x60.png"/>
+        </a>
+        <a href="http://www.apache.org/">
+          <img src="/img/asf_logo.svg" width="120px"/>
+        </a>
+      </div>
+      </div><!-- /.navbar-collapse -->
+    </div>
+  </nav>
+
+  </header>
+
+  <div class="container p-lg-4">
+    <main role="main">
+    
+    
+    
+<h1>
+  Introducing the Apache Arrow C Data Interface
+</h1>
+
+
+
+<p>
+  <span class="badge badge-secondary">Published</span>
+  <span class="published">
+    03 May 2020
+  </span>
+  <br />
+  <span class="badge badge-secondary">By</span>
+  
+    <a href="http://github.com/pitrou">Antoine Pitrou (apitrou) </a>
+  
+
+  
+</p>
+
+
+    <!--
+
+-->
+
+<p>Apache Arrow includes a cross-language, platform-independent in-memory
+<a href="https://arrow.apache.org/docs/format/Columnar.html">columnar format</a>
+allowing zero-copy data sharing and transfer between heterogenous runtimes
+and applications.</p>
+
+<p>The easiest way to use the Arrow columnar format has always been to depend
+on one of the concrete implementations developed by the Apache Arrow community.
+The project codebase contains libraries for 11 different programming languages
+so far, and will likely grow to include more languages in the future.</p>
+
+<p>However, some projects may wish to import and export the Arrow columnar format
+without taking on a new library dependency, such as the Arrow C++ library.
+We have therefore designed an alternative which exchanges data at the C level,
+conforming to a simple data definition.  The C Data Interface carries no dependencies
+except a shared C ABI between binaries which use it.  C ABIs are platform-wide standards
+which are necessarily adhered to by all compilers which generate binaries and are extremely
+stable, ensuring portability of libraries and executable binaries.  Two libraries that utilize
+the C structures defined by the C Data Interface can do zero-copy data
+transfers at runtime without any build-time or link-time dependency
+requirements.</p>
+
+<p>The best way to learn about the C Data Interface is to read the
+<a href="https://arrow.apache.org/docs/format/CDataInterface.html">spec</a>.
+However, we will quickly go over its strong points.</p>
+
+<h2 id="two-simple-struct-definitions">Two simple struct definitions</h2>
+
+<p>To interact with the C Data Interface at the C or C++ level, the only
+thing you have to include in your code is two struct type declarations
+(and a couple of <code class="highlighter-rouge">#define</code>s for constant values).  Those declarations
+only depend on standard C types, and can simply be pasted in a header
+file.  Other languages can also participate as long as they provide a
+Foreign Function Interface layer; this is the case for most modern
+languages, such as Python (with <code class="highlighter-rouge">ctypes</code> or <code class="highlighter-rouge">cffi</code>), Julia, Rust, Go, etc.</p>
+
+<h2 id="zero-copy-data-sharing">Zero-copy data sharing</h2>
+
+<p>The C Data Interface passes Arrow data buffers through memory pointers.  So,
+by construction, it allows you to share data from one runtime to
+another without copying it.  Since the data is in standard
+<a href="https://arrow.apache.org/docs/format/Columnar.html">Arrow in-memory format</a>,
+its layout is well-defined and unambiguous.</p>
+
+<p>This design also restricts the C Data Interface to <em>in-process</em> data sharing.
+For interprocess communication, we recommend use of the Arrow
+<a href="https://arrow.apache.org/docs/format/Columnar.html#serialization-and-interprocess-communication-ipc">IPC format</a>.</p>
+
+<h2 id="reduced-marshalling">Reduced marshalling</h2>
+
+<p>The C Data Interface stays close to the natural way of expressing Arrow-like
+data in C or C++.  Only two aspects involve non-trivial marshalling:</p>
+
+<ul>
+  <li>the encoding of data types, using a very simple string-based language</li>
+  <li>the encoding of optional metadata, using a very simple length-prefixed format</li>
+</ul>
+
+<h2 id="separate-type-and-data-representation">Separate type and data representation</h2>
+
+<p>For applications which produce many instances of data of a single datatype
+(for example, as a stream of record batches), repeatedly reconstructing the
+datatype from its string encoding would represent unnecessary overhead.  To
+address this use case, the C Data Interface defines two independent structures:
+one representing a datatype (and optional metadata), one representing a piece
+of data.</p>
+
+<h2 id="lifetime-handling">Lifetime handling</h2>
+
+<p>One common difficulty of data sharing between heterogenous runtimes is to
+correctly handle the lifetime of data.  The C Data Interface allows the producer
+to define its own memory management scheme through a release callback.
+This is a simple function pointer which consumers will call when they are
+finished using the data.  For example when used as a producer the Arrow C++
+library passes a release callback which simply decrements a <code class="highlighter-rouge">shared_ptr</code>’s
+reference count.</p>
+
+<h2 id="application-passing-data-between-r-and-python">Application: passing data between R and Python</h2>
+
+<p>The R and Python Arrow libraries are both based on the Arrow C++ library,
+however their respective toolchains (mandated by the R and Python packaging
+standards) are ABI-incompatible.  It is therefore impossible to pass data
+directly at the C++ level between the R and Python bindings.</p>
+
+<p>Using the C Data Interface, we have circumvented this restriction and provide
+a zero-copy data sharing API between R and Python.  It is based on the R
+<a href="https://rstudio.github.io/reticulate/"><code class="highlighter-rouge">reticulate</code></a> library.</p>
+
+<p>Here is an example session mixing R and Python library calls:</p>
+
+<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">library</span><span class="p">(</span><span class="n">arrow</span><span class="p">)</span><span class="w">
+</span><span class="n">library</span><span class="p">(</span><span class="n">reticulate</span><span class="p">)</span><span class="w">
+</span><span class="n">use_virtualenv</span><span class="p">(</span><span class="s2">"arrow"</span><span class="p">)</span><span class="w">
+</span><span class="n">pa</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">import</span><span class="p">(</span><span class="s2">"pyarrow"</span><span class="p">)</span><span class="w">
+
+</span><span class="c1"># Create an array in PyArrow</span><span class="w">
+</span><span class="n">a</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">pa</span><span class="o">$</span><span class="n">array</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="m">3</span><span class="p">))</span><span class="w">
+</span><span class="n">a</span><span class="w">
+
+</span><span class="c1">## Array</span><span class="w">
+</span><span class="c1">## &lt;double&gt;</span><span class="w">
+</span><span class="c1">## [</span><span class="w">
+</span><span class="c1">##   1,</span><span class="w">
+</span><span class="c1">##   2,</span><span class="w">
+</span><span class="c1">##   3</span><span class="w">
+</span><span class="c1">## ]</span><span class="w">
+
+</span><span class="c1"># Apply R methods on the PyArrow-created array:</span><span class="w">
+</span><span class="n">a</span><span class="p">[</span><span class="n">a</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="m">1</span><span class="p">]</span><span class="w">
+
+</span><span class="c1">## Array</span><span class="w">
+</span><span class="c1">## &lt;double&gt;</span><span class="w">
+</span><span class="c1">## [</span><span class="w">
+</span><span class="c1">##   2,</span><span class="w">
+</span><span class="c1">##   3</span><span class="w">
+</span><span class="c1">## ]</span><span class="w">
+
+</span><span class="c1"># Create an array in R and pass it to PyArrow</span><span class="w">
+</span><span class="n">b</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">Array</span><span class="o">$</span><span class="n">create</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="m">5</span><span class="p">,</span><span class="w"> </span><span class="m">6</span><span class="p">,</span><span class="w"> </span><span class="m">7</span><span class="p">))</span><span class="w">
+</span><span class="n">a_and_b</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">pa</span><span class="o">$</span><span class="n">concat_arrays</span><span class="p">(</span><span class="n">r_to_py</span><span class="p">(</span><span class="nf">list</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">)))</span><span class="w">
+</span><span class="n">a_and_b</span><span class="w">
+
+</span><span class="c1">## Array</span><span class="w">
+</span><span class="c1">## &lt;double&gt;</span><span class="w">
+</span><span class="c1">## [</span><span class="w">
+</span><span class="c1">##   1,</span><span class="w">
+</span><span class="c1">##   2,</span><span class="w">
+</span><span class="c1">##   3,</span><span class="w">
+</span><span class="c1">##   5,</span><span class="w">
+</span><span class="c1">##   6,</span><span class="w">
+</span><span class="c1">##   7</span><span class="w">
+</span><span class="c1">## ]</span><span class="w">
+</span></code></pre></div></div>
+
+    </main>
+
+    <hr/>
+<footer class="footer">
+  <p>Apache Arrow, Arrow, Apache, the Apache feather logo, and the Apache Arrow project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.</p>
+  <p>&copy; 2016-2019 The Apache Software Foundation</p>
+  <script integrity="sha256-GM0wKVV/c8HuguQRExJ7BPb82ExW2dsMucQOvibvbjM=" crossorigin="anonymous" type="text/javascript" src="/assets/main-18cd3029557f73c1ee82e41113127b04f6fcd84c56d9db0cb9c40ebe26ef6e33.js"></script>
+</footer>
+
+  </div>
+</body>
+</html>
diff --git a/blog/index.html b/blog/index.html
index 1056b3a..c51c96f 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -217,6 +217,21 @@
   
   <p>
     <h3>
+      <a href="/blog/2020/05/03/introducing-arrow-c-data-interface/">Introducing the Apache Arrow C Data Interface</a>
+    </h3>
+    
+    <p>
+    <span class="blog-list-date">
+      3 May 2020
+    </span>
+    </p>
+    Apache Arrow includes a cross-language, platform-independent in-memory columnar format allowing zero-copy data sharing and transfer between heterogenous runtimes and applications. The easiest way to use the Arrow columnar format has always been to depend on one of the concrete implementations developed by the Apache Arrow community. The project codebase contains...
+  </p>
+  
+
+  
+  <p>
+    <h3>
       <a href="/blog/2020/04/21/0.17.0-release/">Apache Arrow 0.17.0 Release</a>
     </h3>
     
diff --git a/feed.xml b/feed.xml
index 1fe1316..5473ed5 100644
--- a/feed.xml
+++ b/feed.xml
@@ -1,4 +1,139 @@
-<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.4">Jekyll</generator><link href="https://arrow.apache.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://arrow.apache.org/" rel="alternate" type="text/html" /><updated>2020-04-23T17:55:54-04:00</updated><id>https://arrow.apache.org/feed.xml</id><title type="html">Apache Arrow</title><subtitle>Apache Arrow is a cross-language developm [...]
+<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.4">Jekyll</generator><link href="https://arrow.apache.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://arrow.apache.org/" rel="alternate" type="text/html" /><updated>2020-05-04T13:49:32-04:00</updated><id>https://arrow.apache.org/feed.xml</id><title type="html">Apache Arrow</title><subtitle>Apache Arrow is a cross-language developm [...]
+
+--&gt;
+
+&lt;p&gt;Apache Arrow includes a cross-language, platform-independent in-memory
+&lt;a href=&quot;https://arrow.apache.org/docs/format/Columnar.html&quot;&gt;columnar format&lt;/a&gt;
+allowing zero-copy data sharing and transfer between heterogenous runtimes
+and applications.&lt;/p&gt;
+
+&lt;p&gt;The easiest way to use the Arrow columnar format has always been to depend
+on one of the concrete implementations developed by the Apache Arrow community.
+The project codebase contains libraries for 11 different programming languages
+so far, and will likely grow to include more languages in the future.&lt;/p&gt;
+
+&lt;p&gt;However, some projects may wish to import and export the Arrow columnar format
+without taking on a new library dependency, such as the Arrow C++ library.
+We have therefore designed an alternative which exchanges data at the C level,
+conforming to a simple data definition.  The C Data Interface carries no dependencies
+except a shared C ABI between binaries which use it.  C ABIs are platform-wide standards
+which are necessarily adhered to by all compilers which generate binaries and are extremely
+stable, ensuring portability of libraries and executable binaries.  Two libraries that utilize
+the C structures defined by the C Data Interface can do zero-copy data
+transfers at runtime without any build-time or link-time dependency
+requirements.&lt;/p&gt;
+
+&lt;p&gt;The best way to learn about the C Data Interface is to read the
+&lt;a href=&quot;https://arrow.apache.org/docs/format/CDataInterface.html&quot;&gt;spec&lt;/a&gt;.
+However, we will quickly go over its strong points.&lt;/p&gt;
+
+&lt;h2 id=&quot;two-simple-struct-definitions&quot;&gt;Two simple struct definitions&lt;/h2&gt;
+
+&lt;p&gt;To interact with the C Data Interface at the C or C++ level, the only
+thing you have to include in your code is two struct type declarations
+(and a couple of &lt;code class=&quot;highlighter-rouge&quot;&gt;#define&lt;/code&gt;s for constant values).  Those declarations
+only depend on standard C types, and can simply be pasted in a header
+file.  Other languages can also participate as long as they provide a
+Foreign Function Interface layer; this is the case for most modern
+languages, such as Python (with &lt;code class=&quot;highlighter-rouge&quot;&gt;ctypes&lt;/code&gt; or &lt;code class=&quot;highlighter-rouge&quot;&gt;cffi&lt;/code&gt;), Julia, Rust, Go, etc.&lt;/p&gt;
+
+&lt;h2 id=&quot;zero-copy-data-sharing&quot;&gt;Zero-copy data sharing&lt;/h2&gt;
+
+&lt;p&gt;The C Data Interface passes Arrow data buffers through memory pointers.  So,
+by construction, it allows you to share data from one runtime to
+another without copying it.  Since the data is in standard
+&lt;a href=&quot;https://arrow.apache.org/docs/format/Columnar.html&quot;&gt;Arrow in-memory format&lt;/a&gt;,
+its layout is well-defined and unambiguous.&lt;/p&gt;
+
+&lt;p&gt;This design also restricts the C Data Interface to &lt;em&gt;in-process&lt;/em&gt; data sharing.
+For interprocess communication, we recommend use of the Arrow
+&lt;a href=&quot;https://arrow.apache.org/docs/format/Columnar.html#serialization-and-interprocess-communication-ipc&quot;&gt;IPC format&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h2 id=&quot;reduced-marshalling&quot;&gt;Reduced marshalling&lt;/h2&gt;
+
+&lt;p&gt;The C Data Interface stays close to the natural way of expressing Arrow-like
+data in C or C++.  Only two aspects involve non-trivial marshalling:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;the encoding of data types, using a very simple string-based language&lt;/li&gt;
+  &lt;li&gt;the encoding of optional metadata, using a very simple length-prefixed format&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;separate-type-and-data-representation&quot;&gt;Separate type and data representation&lt;/h2&gt;
+
+&lt;p&gt;For applications which produce many instances of data of a single datatype
+(for example, as a stream of record batches), repeatedly reconstructing the
+datatype from its string encoding would represent unnecessary overhead.  To
+address this use case, the C Data Interface defines two independent structures:
+one representing a datatype (and optional metadata), one representing a piece
+of data.&lt;/p&gt;
+
+&lt;h2 id=&quot;lifetime-handling&quot;&gt;Lifetime handling&lt;/h2&gt;
+
+&lt;p&gt;One common difficulty of data sharing between heterogenous runtimes is to
+correctly handle the lifetime of data.  The C Data Interface allows the producer
+to define its own memory management scheme through a release callback.
+This is a simple function pointer which consumers will call when they are
+finished using the data.  For example when used as a producer the Arrow C++
+library passes a release callback which simply decrements a &lt;code class=&quot;highlighter-rouge&quot;&gt;shared_ptr&lt;/code&gt;’s
+reference count.&lt;/p&gt;
+
+&lt;h2 id=&quot;application-passing-data-between-r-and-python&quot;&gt;Application: passing data between R and Python&lt;/h2&gt;
+
+&lt;p&gt;The R and Python Arrow libraries are both based on the Arrow C++ library,
+however their respective toolchains (mandated by the R and Python packaging
+standards) are ABI-incompatible.  It is therefore impossible to pass data
+directly at the C++ level between the R and Python bindings.&lt;/p&gt;
+
+&lt;p&gt;Using the C Data Interface, we have circumvented this restriction and provide
+a zero-copy data sharing API between R and Python.  It is based on the R
+&lt;a href=&quot;https://rstudio.github.io/reticulate/&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;reticulate&lt;/code&gt;&lt;/a&gt; library.&lt;/p&gt;
+
+&lt;p&gt;Here is an example session mixing R and Python library calls:&lt;/p&gt;
+
+&lt;div class=&quot;language-r highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;library&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;arrow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;library&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reticulate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;use_virtualenv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arrow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pa&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;pyarrow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Create an array in PyArrow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pa&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;s [...]
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## Array&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## &amp;lt;double&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## [&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   1,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   2,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## ]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Apply R methods on the PyArrow-created array:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## Array&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## &amp;lt;double&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## [&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   2,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   3&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## ]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Create an array in R and pass it to PyArrow&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;& [...]
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a_and_b&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pa&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;concat_arrays&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;r_to_py&lt;/span&gt;&lt;span class=&quot;p&quot;&gt; [...]
+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a_and_b&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## Array&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## &amp;lt;double&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## [&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   1,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   2,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   3,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   5,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   6,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;##   7&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;## ]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><author><name>apitrou</name></author><summary type="html">Apache Arrow includes a cross-language, platform-independent in-memory columnar format allowing zero-copy data sharing and transfer between heterogenous runtimes and applications. The easiest way to use the Arrow columnar format has always been to depend on one of the concrete implementations developed by the Apache Arrow community. The project codebase contai [...]
 
 --&gt;
 
@@ -1862,165 +1997,4 @@ in the Arrow binary protocol&lt;/li&gt;
 needs&lt;/li&gt;
   &lt;li&gt;&lt;a href=&quot;https://lists.apache.org/thread.html/a99124e57c14c3c9ef9d98f3c80cfe1dd25496bf3ff7046778add937@%3Cdev.arrow.apache.org%3E&quot;&gt;Sparse representation and compression in Arrow&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href=&quot;https://lists.apache.org/thread.html/82a7c026ad18dbe9fdbcffa3560979aff6fd86dd56a49f40d9cfb46e@%3Cdev.arrow.apache.org%3E&quot;&gt;Flight extensions: middleware API and generalized Put operations&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;</content><author><name>pmc</name></author><summary type="html">The Apache Arrow team is pleased to announce the 0.14.0 release. This covers 3 months of development work and includes 602 resolved issues from 75 distinct contributors. See the Install Page to learn how to get the libraries for your platform. The complete changelog is also available. This post will give some brief highlights in the project since the 0.13.0 release from April. New committers Since the 0.13.0 relea [...]
-
---&gt;
-
-&lt;p&gt;The Apache Arrow team is pleased to announce the 0.13.0 release. This covers
-more than 2 months of development work and includes &lt;a href=&quot;https://issues.apache.org/jira/issues/?jql=project%20%3D%20ARROW%20AND%20status%20%3D%20Resolved%20AND%20fixVersion%20%3D%200.13.0&quot;&gt;&lt;strong&gt;550 resolved
-issues&lt;/strong&gt;&lt;/a&gt; from &lt;a href=&quot;https://arrow.apache.org/release/0.13.0.html#contributors&quot;&gt;&lt;strong&gt;81 distinct contributors&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
-
-&lt;p&gt;See the &lt;a href=&quot;https://arrow.apache.org/install&quot;&gt;Install Page&lt;/a&gt; to learn how to get the libraries for your
-platform. The &lt;a href=&quot;https://arrow.apache.org/release/0.13.0.html&quot;&gt;complete changelog&lt;/a&gt; is also available.&lt;/p&gt;
-
-&lt;p&gt;While it’s a large release, this post will give some brief highlights in the
-project since the 0.12.0 release from January.&lt;/p&gt;
-
-&lt;h2 id=&quot;new-committers-and-pmc-member&quot;&gt;New committers and PMC member&lt;/h2&gt;
-
-&lt;p&gt;The Arrow team is growing! Since the 0.12.0 release we have increased the size
-of our committer and PMC rosters.&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;&lt;a href=&quot;https://github.com/andygrove&quot;&gt;Andy Grove&lt;/a&gt; was promoted to PMC member&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://github.com/paddyhoran&quot;&gt;Paddy Horan&lt;/a&gt; was added as a committer&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://github.com/emkornfield&quot;&gt;Micah Kornfield&lt;/a&gt; was added as a committer&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://github.com/pravindra&quot;&gt;Ravindra Pindikura&lt;/a&gt; was added as a committer&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://github.com/sunchao&quot;&gt;Chao Sun&lt;/a&gt; was added as a committer&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;p&gt;Thank you for all your contributions!&lt;/p&gt;
-
-&lt;h2 id=&quot;rust-datafusion-query-engine-donation&quot;&gt;Rust DataFusion Query Engine donation&lt;/h2&gt;
-
-&lt;p&gt;Since the last release, we received a donation of &lt;a href=&quot;http://incubator.apache.org/ip-clearance/arrow-rust-datafusion.html&quot;&gt;DataFusion&lt;/a&gt;, a
-Rust-native query engine for the Arrow columnar format, whose development had
-been led prior by Andy Grove. &lt;a href=&quot;http://arrow.apache.org/blog/2019/02/04/datafusion-donation/&quot;&gt;Read more about DataFusion&lt;/a&gt; in our February
-blog post.&lt;/p&gt;
-
-&lt;p&gt;This is an exciting development for the Rust community, and we look forward to
-developing more analytical query processing within the Apache Arrow project.&lt;/p&gt;
-
-&lt;h2 id=&quot;arrow-flight-grpc-progress&quot;&gt;Arrow Flight gRPC progress&lt;/h2&gt;
-
-&lt;p&gt;Over the last couple months, we have made significant progress on Arrow Flight,
-an Arrow-native data messaging framework. We have integration tests to check
-C++ and Java compatibility, and we have added Python bindings for the C++
-library. We will write a future blog post to go into more detail about how
-Flight works.&lt;/p&gt;
-
-&lt;h2 id=&quot;c-notes&quot;&gt;C++ notes&lt;/h2&gt;
-
-&lt;p&gt;There were 231 issues relating to C++ in this release, far too much to
-summarize in a blog post. Some notable items include:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;An experimental &lt;code class=&quot;highlighter-rouge&quot;&gt;ExtensionType&lt;/code&gt; was developed for creating user-defined data
-types that can be embedded in the Arrow binary protocol. This is not yet
-finalized, but &lt;a href=&quot;https://github.com/apache/arrow/blob/master/cpp/src/arrow/extension_type.h&quot;&gt;feedback would be welcome&lt;/a&gt;.&lt;/li&gt;
-  &lt;li&gt;We have undertaken a significant reworking of our CMake build system for C++
-to make the third party dependencies more configurable. Among other things,
-this eases work on packaging for Linux distributions. Read more about this in
-the &lt;a href=&quot;https://github.com/apache/arrow/blob/master/docs/source/developers/cpp.rst#build-dependency-management&quot;&gt;C++ developer documentation&lt;/a&gt;.&lt;/li&gt;
-  &lt;li&gt;Laying more groundwork for an Arrow-native in-memory query engine&lt;/li&gt;
-  &lt;li&gt;We began building a reader for line-delimited JSON files&lt;/li&gt;
-  &lt;li&gt;Gandiva can now be compiled on Windows with Visual Studio&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h2 id=&quot;c-notes-1&quot;&gt;C# Notes&lt;/h2&gt;
-
-&lt;p&gt;C# .NET development has picked up since the initial code donation last
-fall. 11 issues were resolved this release cycle.&lt;/p&gt;
-
-&lt;p&gt;The Arrow C# package is &lt;a href=&quot;https://www.nuget.org/packages/Apache.Arrow/0.13.0&quot;&gt;now available via NuGet&lt;/a&gt;.&lt;/p&gt;
-
-&lt;h2 id=&quot;go-notes&quot;&gt;Go notes&lt;/h2&gt;
-
-&lt;p&gt;8 Go-related issues were resolved. A notable feature is the addition of a CSV
-file writer.&lt;/p&gt;
-
-&lt;h2 id=&quot;java-notes&quot;&gt;Java notes&lt;/h2&gt;
-
-&lt;p&gt;26 Java issues were resolved. Outside of Flight-related work, some notable
-items include:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;Migration to Java 8 date and time APIs from Joda&lt;/li&gt;
-  &lt;li&gt;Array type support in JDBC adapter&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h2 id=&quot;javascript-notes&quot;&gt;Javascript Notes&lt;/h2&gt;
-
-&lt;p&gt;The recent &lt;a href=&quot;https://www.npmjs.com/package/apache-arrow/v/0.4.1&quot;&gt;JavaScript 0.4.1 release&lt;/a&gt; is the last JavaScript-only release
-of Apache Arrow. Starting with 0.13 the Javascript implementation is now
-included in mainline Arrow releases! The version number of the released
-JavaScript packages will now be in sync with the mainline version number.&lt;/p&gt;
-
-&lt;h2 id=&quot;python-notes&quot;&gt;Python notes&lt;/h2&gt;
-
-&lt;p&gt;86 Python-related issues were resolved. Some highlights include:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;The Gandiva LLVM expression compiler is now available in the Python wheels
-through the &lt;code class=&quot;highlighter-rouge&quot;&gt;pyarrow.gandiva&lt;/code&gt; module.&lt;/li&gt;
-  &lt;li&gt;Flight RPC bindings&lt;/li&gt;
-  &lt;li&gt;Improved pandas serialization performance with RangeIndex&lt;/li&gt;
-  &lt;li&gt;pyarrow can be used without pandas installed&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;p&gt;Note that Apache Arrow will continue to support Python 2.7 until January 2020.&lt;/p&gt;
-
-&lt;h2 id=&quot;ruby-and-c-glib-notes&quot;&gt;Ruby and C GLib notes&lt;/h2&gt;
-
-&lt;p&gt;36 C/GLib- and Ruby-related issues were resolved. The work continues to follow
-the upstream work in the C++ project.&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Arrow::RecordBatch#raw_records&lt;/code&gt; was added. It can convert a record batch to
-a Ruby’s array in 10x-200x faster than the same conversion by a pure-Ruby
-implementation.&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h2 id=&quot;rust-notes&quot;&gt;Rust notes&lt;/h2&gt;
-
-&lt;p&gt;69 Rust-related issues were resolved. Many of these relate to ongoing work in
-the DataFusion query engine. Some notable items include:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;Date/time support&lt;/li&gt;
-  &lt;li&gt;SIMD for arithmetic operations&lt;/li&gt;
-  &lt;li&gt;Writing CSV and reading line-delimited JSON&lt;/li&gt;
-  &lt;li&gt;Parquet data source support for DataFusion&lt;/li&gt;
-  &lt;li&gt;Prototype DataFrame-style API for DataFusion&lt;/li&gt;
-  &lt;li&gt;Continued evolution of Parquet file reader&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h2 id=&quot;r-development-progress&quot;&gt;R development progress&lt;/h2&gt;
-
-&lt;p&gt;The Arrow R developers have expanded the scope of the R language bindings and
-additionally worked on packaging support to be able to submit the package to
-CRAN in the near future. 23 issues were resolved for this release.&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://arrow.apache.org/blog/2019/01/25/r-spark-improvements/&quot;&gt;We wrote in January about ongoing work&lt;/a&gt; to accelerate R work on Apache Spark
-using Arrow.&lt;/p&gt;
-
-&lt;h2 id=&quot;community-discussions-ongoing&quot;&gt;Community Discussions Ongoing&lt;/h2&gt;
-
-&lt;p&gt;There are a number of active discussions ongoing on the developer
-&lt;code class=&quot;highlighter-rouge&quot;&gt;dev@arrow.apache.org&lt;/code&gt; mailing list. We look forward to hearing from the
-community there:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;&lt;strong&gt;Benchmarking&lt;/strong&gt;: we are working to create tools for tracking all of our
-benchmark results on a commit-by-commit basis in a centralized database
-schema so that we can monitor for performance regressions over time. We hope
-to develop a publicly viewable benchmark result dashboard.&lt;/li&gt;
-  &lt;li&gt;&lt;strong&gt;C++ Datasets&lt;/strong&gt;: development of a unified API for reading and writing
-datasets stored in various common formats like Parquet, JSON, and CSV.&lt;/li&gt;
-  &lt;li&gt;&lt;strong&gt;C++ Query Engine&lt;/strong&gt;: architecture of a parallel Arrow-native query engine
-for C++&lt;/li&gt;
-  &lt;li&gt;&lt;strong&gt;Arrow Flight Evolution&lt;/strong&gt;: adding features to support different real-world
-data messaging use cases&lt;/li&gt;
-  &lt;li&gt;&lt;strong&gt;Arrow Columnar Format evolution&lt;/strong&gt;: we are discussing a new “duration” or
-“time interval” type and some other additions to the Arrow columnar format.&lt;/li&gt;
-&lt;/ul&gt;</content><author><name>wesm</name></author><summary type="html">The Apache Arrow team is pleased to announce the 0.13.0 release. This covers more than 2 months of development work and includes 550 resolved issues from 81 distinct contributors. See the Install Page to learn how to get the libraries for your platform. The complete changelog is also available. While it’s a large release, this post will give some brief highlights in the project since the 0.12.0 release from Janua [...]
\ No newline at end of file
+&lt;/ul&gt;</content><author><name>pmc</name></author><summary type="html">The Apache Arrow team is pleased to announce the 0.14.0 release. This covers 3 months of development work and includes 602 resolved issues from 75 distinct contributors. See the Install Page to learn how to get the libraries for your platform. The complete changelog is also available. This post will give some brief highlights in the project since the 0.13.0 release from April. New committers Since the 0.13.0 relea [...]
\ No newline at end of file