From: Spiros Eliopoulos <seliopou@gmail.com>
To: OCaml <caml-list@inria.fr>
Subject: [Caml-list] ANN: angstrom
Date: Fri, 22 Jul 2016 16:35:18 +0300 [thread overview]
Message-ID: <CAEkQQgKO+JnpDw4YDaY19EqU_a9=Hwh8a3+w0+TUnU4vqTn7tA@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1817 bytes --]
Hey List,
It is with great pleasure that I announce the initial release of angstrom,
a parser-combinator library that I have been developing over the past
several months:
https://github.com/inhabitedtype/angstrom
http://opam.ocaml.org/packages/angstrom
Angstrom exposes monadic and applicative interfaces for composition, and
supports incremental input through buffered and unbuffered interfaces. Both
interfaces give the user total control over the blocking behavior of their
application, with the unbuffered interface enabling zero-copy IO. Parsers
are backtracking by default and support unbounded lookahead.
Whereas many OCaml parser combinator libraries claim heritage from the
Parsec[0] Haskell library, angstrom instead follows the design and
semantics of attoparsec[1], hence the name[2]. For a high-level comparison
of Angstrom's features to other parser-combinator libraries, see the table
included in the README:
https://github.com/inhabitedtype/angstrom#comparison-to-other-libraries
The source distribution ships with a JSON parser, which I've benchmarked
against ezjsonm and yojson. Yojson wins hands down (it benefits greatly
from not having to support non-blocking incremental input), though the
angstrom-based parser comes in second both in terms of latency and
allocations. The results can be found here:
https://gist.github.com/seliopou/7487875d36914efe74f736aaa3fbed16
There are several more performance improvements in the pipeline, which
should further reduce allocation rates, in some cases dramatically so. More
on that in the next release, along with other developments.
As always, issues and pull requests are welcomed.
-Spiros E.
[0]: https://hackage.haskell.org/package/parsec
[1]: https://github.com/bos/attoparsec
[2]: https://en.wikipedia.org/wiki/%C3%85ngstr%C3%B6m
[-- Attachment #2: Type: text/html, Size: 2598 bytes --]
next reply other threads:[~2016-07-22 13:35 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-22 13:35 Spiros Eliopoulos [this message]
2016-07-22 14:38 ` Daniel Bünzli
2016-07-22 21:46 ` Spiros Eliopoulos
2016-07-23 2:17 ` Daniel Bünzli
2016-07-23 6:41 ` Cole Brown
2016-07-23 11:37 ` Daniel Bünzli
2016-07-25 14:15 ` Spiros Eliopoulos
2016-07-25 15:44 ` Daniel Bünzli
2016-07-25 16:07 ` Spiros Eliopoulos
2016-07-25 16:21 ` Daniel Bünzli
2016-07-25 19:37 ` Spiros Eliopoulos
2016-07-25 20:03 ` Daniel Bünzli
2016-10-13 12:42 ` Anil Madhavapeddy
2017-02-03 19:37 ` Hendrik Boom
2017-02-04 16:36 ` Spiros Eliopoulos
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAEkQQgKO+JnpDw4YDaY19EqU_a9=Hwh8a3+w0+TUnU4vqTn7tA@mail.gmail.com' \
--to=seliopou@gmail.com \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox