Hello
Here is the latest OCaml Weekly News, for the week of March 06 to 13, 2018.
Archive: https://discuss.ocaml.org/t/ann-release-of-interval-1-4/1673/1
Christophe announced:It is my pleasure to announce the release of the library _Interval_, version 1.4. _Interval_ is a library developed by Jean-Marc Alliot, Jean-Baptiste Gotteland and slightly improved by myself, which implements [interval-arithmetic](https://en.wikipedia.org/wiki/Interval_arithmetic): a mathematical value _x_ is represented on the computer as an interval _[x]_ with machine numbers as bounds such that _x ∈ [x]_ (of course the tighter the interval, the better). All mathematical functions are _lifted_ to functions taking and returning intervals. The following interactive session: ```ocaml # #require "interval";; ~/.opam/4.05.0/lib/interval: added to search path ~/.opam/4.05.0/lib/interval/interval.cma: loaded # open Interval;; # let x = I.v 1. 1.;; val x : Interval.t = {low = 1.; high = 1.} # I.sin x;; - : Interval.t = {low = 0.841470984807896505; high = 0.841470984807896616} ``` constructs an interval `x` with lower and upper bounds 1 (thus 1 ∈ x since 1 is exactly representable) and the next line computes an interval containing the true value of the sine on 1 (thus taking into account all rounding and truncation errors along the computation). You can read this as the fact that the exact value of _sin(1)_ belongs to the interval _[0.841470984807896505, 0.841470984807896616]_. Hope you find that library useful. For more information, contributing, bug reports,... see the [Github page](https://github.com/Chris00/ocaml-interval).
Archive: https://discuss.ocaml.org/t/a-proposal-for-a-resource-management-model-for-ocaml/1680/1
Guillaume Munch-Maccagnoni announced:I would like to offer for discussion a proposal for a resource management model for OCaml. It proposes to extend the OCaml language with RAII, move semantics and resource polymorphism. https://hal.inria.fr/hal-01724997 > We present a resource-management model for ML-style programming languages, > designed to be compatible with the OCaml philosophy and runtime model. This is > a proposal to extend the OCaml language with destructors, move semantics, and > resource polymorphism, to improve its safety, efficiency, interoperability, > and expressiveness. It builds on the ownership-and-borrowing models of systems > programming languages (Cyclone, C++11, Rust) and on linear types in functional > programming (Linear Lisp, Clean, Alms). It continues a synthesis of resources > from systems programming and resources in linear logic initiated by Baker. > > It is a combination of many known and some new ideas. On the novel side, it > highlights the good mathematical structure of Stroustrup's “Resource > acquisition is initialisation” (RAII) idiom for resource management based on > destructors, a notion sometimes confused with finalizers, and builds on it a > notion of resource polymorphism, inspired by polarisation in proof theory, > that mixes C++'s RAII and a tracing garbage collector (GC). In particular, it > proposes to identify the types of GCed values with types with trivial > destructor: from this definition it deduces a model in which GC is the default > allocation mode, and where GCed values can be used without restriction both in > owning and borrowing contexts. > > The proposal targets a new spot in the design space, with an automatic and > predictable resource-management model, at the same time based on lightweight > and expressive language abstractions. It is backwards-compatible: current code > is expected to run with the same performance, the new abstractions fully > combine with the current ones, and it supports a resource-polymorphic > extension of libraries. It does so with only a few additions to the runtime, > and it integrates with the current GC implementation. It is also compatible > with the upcoming multicore extension, and suggests that the Rust model for > eliminating data-races applies. > > Interesting questions arise for a safe and practical type system, many of > which have already been thoroughly investigated in the languages and > prototypes Cyclone, Rust, and Alms.Ivan Gotovchits asked and Guillaume Munch-Maccagnoni replied:
> Also, are there any publically available artifacts of this work, besides the > book itself? The quoted OCaml code is available here: https://guillaume.munch.name/files/ocaml-raii.ml
Archive: https://discuss.ocaml.org/t/profiling-in-ocaml/1675/7
Deep in this thread, Yawar Amin said:Hi Douglas, OCaml includes a feature to warn if your `rec` function is not tail-recursive: https://caml.inria.fr/pub/docs/manual-ocaml-4.06/extn.html#sec260 > “ocaml.tailcall” or “tailcall” can be applied to function application in order > to check that the call is tailcall optimized. If it it not the case, a warning > (51) is emitted. E.g. ```ocaml [@ocaml.tailcall] let rec f x = if x < 1 then x else 1 + tail (x - 2) ``` ...should warn. Btw @octachron, I don't believe Bob was saying 'port it to BuckleScript', it was more '_If_ you can port to BuckleScript'.n4323 then added:
@yawaramin I think the annotation should be at the call site? I think it should be ``` let rec f x = if x < 1 then x else 1 + (f [@tailcall]) (x - 2) ``` at least on cursory testing it did not work before the `let rec` for me.
Archive: https://discuss.ocaml.org/t/lwt-3-3-0-and-lwt-ppx-1-1-0-released-nice-stack-traces-restored/1684/1
Anton Bachin announced:We are pleased to announce release **3.3.0** of [**Lwt**](https://github.com/ocsigen/lwt), the promise and concurrent I/O library. **Lwt_ppx** **1.1.0** is released simultaneously. The main highlight is that proper stack trace support is restored in the PPX (thanks [Gabe Levi](https://twitter.com/evilgabe)!). Stack traces now look like this: ```text Raised at file "pervasives.ml", line 32, characters 17-33 Called from file "test.ml" (inlined), line 1, characters 14-29 Called from file "test.ml" (inlined), line 6, characters 23-39 Called from file "test.ml", line 13, characters 13-31 Called from file "src/core/lwt.ml", line 1950, characters 23-26 Re-raised at file "test.ml", line 8, characters 2-117 Re-raised at file "test.ml", line 25, characters 0-70 ``` For *a couple years*, they would just stop at the `src/core/lwt.ml` entry (argh!), even though, in this case, `Pervasives.failwith` was called at `test.ml` line 1. There are several other important fixes and improvements. From the [changelog](https://github.com/ocsigen/lwt/releases/tag/3.3.0): > Bugs fixed > > - Restore backtrace support ([#554](https://github.com/ocsigen/lwt/pull/554), > [#556](https://github.com/ocsigen/lwt/pull/556), Gabe Levi). > - Serious logic error that could cause Lwt to hang or crash > ([#549](https://github.com/ocsigen/lwt/issues/549), reported @koen-struyve). > - All `Lwt_list` functions are now tail-recursive > ([#538](https://github.com/ocsigen/lwt/pull/538), @jsthomas). > > Additions > > - Support `;%lwt` syntax in the PPX > ([#307](https://github.com/ocsigen/lwt/pull/307), @hcarty). > - `Lwt_stream.iter_n` ([#312](https://github.com/ocsigen/lwt/pull/312), @hcarty). > > Miscellaneous > > - Testing improvements ([#536](https://github.com/ocsigen/lwt/pull/536), > [#541](https://github.com/ocsigen/lwt/pull/541), @cedlemo). > - Documentation improvements ([#544](https://github.com/ocsigen/lwt/pull/544), > [#546](https://github.com/ocsigen/lwt/pull/546), > [#547](https://github.com/ocsigen/lwt/pull/547), > [#553](https://github.com/ocsigen/lwt/pull/553), > [#559](https://github.com/ocsigen/lwt/pull/559), @dmbaturin, Jason Evans, Jess > Smith, Milo Turner). Many thanks to all the contributors! https://github.com/ocsigen/lwt
Archive: https://sympa.inria.fr/sympa/arc/caml-list/2018-03/msg00021.html
Thomas Gazagnaire announced:Hi all, please forward this to anyone would could be interested :-) --- Tarides is looking for software engineers to help developing and maintaining the MirageOS[1] unikernel project and Irmin[2], a Git-like library database. Founded in Paris in early 2018, Tarides helps developers and companies build secure, performant and resource-efficient network and storage services. We are using MirageOS to run applications without the overhead of a traditional operating system and Irmin to create scalable distributed applications. Tarides offers commercial support and commercial development services for companies interested to run MirageOS or Irmin as part of their technology stack. Depending on experience and interests the job will involve: - Using MirageOS or Irmin to develop new applications for our customers; - Interfacing with the wider MirageOS community to work out a consistent architecture for the project and help defining its evolution; - Designing, developing and maintaining new functionalities and open-source libraries for MirageOS, such as a fast buffer library or an extensible connection framework; - Becoming a maintainer for existing MirageOS libraries; - Working with the OCaml compiler toolchain and the upcoming OCaml platform to ensure that it has all the features required for high performance and secure MirageOS operations; - Identifying and developing missing functionalities to make Irmin the reliable storage persistence layer of the MirageOS platform; - Improving user-facing interfaces (CLI, bindings and API) for Irmin to turn it into a successful general-purpose database on its own. We are opening permanent positions in our (future) office based in Paris, but remote work is also possible. We are looking for candidates with a good knowledge of OCaml, with an interest in operating systems (virtualisation, networking or storage). Previous or existing contributions to open-source projects are welcome and encouraged. Tarides is a very young company, so expect a lot of flexibility in your work assignments. Be prepared to wear many hats and to sometimes go beyond your original job description. For more details, please send your CV (including open-source contributions) and questions to thomas@tarides.com. [1]: https://mirage.io [2]: https://mirage.io/blog/introducing-irmin
Archive: https://discuss.ocaml.org/t/ann-emile-0-2-e-mail-address-decoder/1694/1
Calascibetta Romain announced:I'm happy to announce the second version of [Emile](https://github.com/dinosaure/emile.git). Emile is a little library which depends on `angstrom` (`0.9`), `fmt`, `ipaddr` and `uutf`, and aims to decode e-mail adresses. We could believe it's easy to parse e-mail, but, as I said to [my last conference at ICFP 2017](https://www.youtube.com/watch?v=kQkRsNEo25k), it's not the case. So, I decided to extract from [Mr. Mime](https://github.com/oklm-wsh/MrMime.git) the e-mail address parser and release it to let users recognize and understand e-mail addresses in OCaml. Thus we provide some functions to recognize some kinds of e-mail: * `address_of_string`: could be the most used function, it expects an e-mail address as you expect * `set_of_string` & `of_string`: recognizes an e-mail address which could be bound with a name * `List.of_string`: recognizes a (optionally named) list of e-mail address _set_ Obviously, all of these functions handle (nested) comments, _folding whitespace_, and unicode (using `uutf`). About the domains of the parsed e-mail adresses, we follow explanation provided by [RFC5321](https://tools.ietf.org/html/rfc5321#section-4.1.3) so we handle IPv4 and IPv6 domains (using `ipaddr`). We also nicely support old e-mail adresses (e.g. multiple domains) As you can see, this library is very young and we need to improve API further. It was designed to be used in Mr. MIME which is not the better use-case to know what people really need, so PR are welcome! PS: this library was propulsed by the #MirageOS hackathon in Marrakech!
Archive: https://discuss.ocaml.org/t/ocaml-developer-position-at-be-sport/1701/1
Vincent Balat announced:Be Sport is looking for programmers familiar with functional languages, for a development and research work. Send an email to jobs@besport.com if you want to apply! **The company** Be Sport is a start-up company with sound funding, with a team of 20 people today. We have a very ambitious development program and we believe in the use of modern technologies coming from research to build strong basis for our apps. We work in close relationship with research laboratories (CNRS, Inria, univ. Paris Diderot ...). Our main focus at the moment are languages and typing for Web and mobile apps, recommendation algorithms for social networks, classification algorithms. Our first app is a social network dedicated to sport. Be Sport premises are located in the center of Paris. **Work** We are looking for developers to take part in the development of some features of our apps. The developers will be integrated in the programming team: participation in the writing of specifications, implementation (client / server), testing … They will initially work on improving existing features, before progressively taking the lead on some components. **Skills** Good general developers, knowing OCaml or other functional languages (or willing to learn) are welcome. Other skills related to the implementation of a social network are also welcome: machine learning, database, search engines, etc. Candidates must have some expertise on some of the following technologies: * Typed functional languages, especially OCaml (and Ocsigen Js_of_ocaml/Eliom) * MacOS, iOS * Databases * Machine learning * Web programming (CSS, Javascript…)
Archive: https://discuss.ocaml.org/t/rfp-2-enhance-ocaml-interop-with-tcl-tk/1702/1
Claude Jager-Rubinson announced:A second call for proposals; again, pending funding. The University of Houston-Downtown is seeking one or more software developers to work on Tcl/Tk and OCaml interop. There are two distinct tasks here, feel free to apply for one or both. The first is to implement bindings to the newer Ttk/Tile widgets/themes. The other is to simplify development and deployment of Tcl extensions written in OCaml. The call is available at http://gator.uhd.edu/~rubinsonc/RfP_OCaml_TclTk_Interop.pdf Please don't hesitate to contact me with any questions, either here or at <rubinsonc@uhd.edu>
Here are links from many OCaml blogs aggregated at OCaml Planet, http://ocaml.org/community/planet/. New updates on TzScan http://www.ocamlpro.com/2018/03/09/new-updates-on-tzscan/
If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.
If you also wish to receive it every week by mail, you may subscribe online.