iopipe v0.1.0 - now with Windows support!
DigitalDesigns
DigitalDesigns at gmail.com
Tue Jun 12 18:14:13 UTC 2018
On Tuesday, 12 June 2018 at 13:51:56 UTC, Steven Schveighoffer
wrote:
> On 6/12/18 1:51 AM, DigitalDesigns wrote:
>>
>> Could you explain some benefits specific to this
>> implementation and a bit of the functional aspects for a
>> proper overview of it's capabilities and why I should chose
>> this method over others?
>
> The things that I think make this approach better are:
>
> 1. Direct buffer access
>
> Direct buffer access I have found is one of those ideas that
> doesn't seem like it's that impressive until you start using
> it. Many times, buffering is used in a generic library for
> optimization (basically amortizing reads) and is an
> implementation detail hidden from your view. Think of how FILE
> * keeps a large buffer of data inside itself, but only gives
> you access to one character at a time.
>
> This forces you to create your *own* buffering scheme on top of
> that. What a waste! Iopipe allows you to use buffering for your
> purposes on top of the benefits of amortization. It's my belief
> that this is why iopipe's byline feature is 2x faster than
> Phobos'.
>
> 2. Using templates to their fullest
>
> Iopipes are all templated on the buffer or iopipe underneath
> it. This makes tings easily swappable. It's really cool to be
> able to take your JSON or XML parser, and hook it onto an
> in-memory string in one line, and then hook it onto a socket,
> and everything is optimized for that situation. It takes the
> fun and flexibility of range programming and brings it to i/o.
>
> This is why iopipe's byline handles all forms of UTF, compared
> to Phobos which only handles UTF8.
>
> For example, I handle all forms of UTF with iopipe, with a
> decent set of utilities. Here is a complete program using
> iopipe that converts any type of UTF into another type,
> optimized for the specific situation:
>
> https://github.com/schveiguy/iopipe/blob/master/examples/convert/convert.d
>
> 3. Compiler optimization for everything
>
> All parts of iopipe, except for the low-level reads and writes
> (which ironically are not really part of iopipe) are visible to
> the compiler for inlining and optimization. I'm leveraging the
> power of the decades of optimization experience that the
> compiler can provide. This makes it easy to write code that
> performs well.
>
> An anecdote: For my talk on iopipe in 2017
> (http://dconf.org/2017/talks/schveighoffer.html) I wanted to
> have a live demo showing the performance power. I literally was
> still working on it 2 or 3 days before, while at dconf. I had
> already written a JSON parser, which was part of my
> presentation, but when I was showing it to another D user
> (Daniel Murphy), I couldn't really answer the question "how
> does it perform?". So he gave me a challenge -- do pretty
> printing on a JSON file. Simple enough, with the parser I had
> already written, took me about 1 hour to write it. It performed
> poorly compared to what we would have expected, but tweaking a
> few things (almost all were due to using some algorithms
> incorrectly), I got it to go faster than RapidJson in certain
> use cases, and reasonably close in others. And I did nothing in
> terms of lookup tables or using any special instructions. All
> in all, it was probably 2 hours of work, and the code is
> beautiful IMO!
> https://github.com/schveiguy/jsoniopipe/blob/master/examples/formatjson/formatjson.d
>
> I think anyone who is doing parsing should have a look at
> iopipe, it not only may make your code much simpler and easier
> to read and write, but it would help me tune iopipe to cater to
> parsers, which I think is its wheelhouse.
>
> I plan to eventually finish the JSON parser for a releasable
> state, and eventually tackle XML and a few other things.
>
> -Steve
Thanks!
More information about the Digitalmars-d-announce
mailing list