Previous week Up Next week

Hello

Here is the latest OCaml Weekly News, for the week of November 07 to 14, 2017.

  1. LASCAr - A library for manipulating Labeled Transition Systems
  2. osc 0.1.4
  3. OCamlFormat open-source released
  4. Tuareg 2.1.0 is in OPAM
  5. Large binaries - break down by libraries?
  6. MirageOS bug cleaning day: Friday, 17th November 2017
  7. New release: ProVerif 1.97pl3
  8. Ecaml: OCaml Emacs plugins tutorial
  9. Post-doc at Inria Paris to work on the OCaml language and core system
  10. OCaml internship opportunities?
  11. Statistical memory profiling for OCaml
  12. OCaml Internships at LexiFi (France)
  13. Ocaml Github Pull Requests
  14. Other OCaml News

LASCAr - A library for manipulating Labeled Transition Systems

Archive: https://sympa.inria.fr/sympa/arc/caml-list/2017-11/msg00027.html

Jocelyn Sérot announced:
I'm pleased to announce the first release of LASCAr, an OCaml library for
manipulating Labeled Transition Systems.

The library provides, in particular, functions for
- building and inspecting models of such systems
- generating graphical (`.dot` format) and text (`.tex` format) representations
- computing execution trees and displaying them in graphical or text format
- computing the product (in various flavors) of such systems

Its provides implementations both for "generic" LTS (with or without state
attributes) and for "specialized" versions such as
- deterministic and non-deterministic finite automata (DFA, NFA),
- Mealy and Moore automata
- Finite State Machines (FSMs)

The source code, documentation and some examples can be downloaded from GitHub at : 

https://github.com/jserot/lascar

For a quick glance, some annotated code snippets are available here

http://htmlpreview.github.io/?https://github.com/jserot/lascar/blob/master/doc/examples/examples.html

The API is documented here 

http://htmlpreview.github.io/?https://github.com/jserot/lascar/blob/master/doc/api/lascar.html

Contributions are welcome since this kind of library is, due to pervasive nature
of LTS, highly extensible in many ways.
[please note that, since i’m new to GitHub, any advice on how to handle this
would be appreciated].
      

osc 0.1.4

Archive: https://discuss.ocaml.org/t/ann-osc-0-1-4/1085/1

John Else announced:
Hi, I'm happy to announce the release of osc 0.1.4.

osc is a pure OCaml implementation of
[OpenSoundControl](http://opensoundcontrol.org/spec-1_0), a networking protocol
designed for communication between computers, synthesizers and other multimedia
devices.

Version 0.1.4 adds `-safe-string` compatibility, and the ability to use OSC
timetags as message arguments.

Repo: https://github.com/johnelse/ocaml-osc
      

OCamlFormat open-source released

Archive: https://discuss.ocaml.org/t/ann-ocamlformat-open-source-released/990/8

Josh Berdine announced:
OCamlFormat v0.2 has been released and is now available from opam.

v0.2 includes fixes for several assert-due-to-misformatting bugs reported by
people who tried v0.1, as well as a few improvements to the generated output.

An opam package is now available after some build/packing refactoring.

Many thanks to everyone who has submitted an issue or pull request!
      

Tuareg 2.1.0 is in OPAM

Archive: https://discuss.ocaml.org/t/tuareg-2-1-0-is-in-opam/1096/1

Christophe announced:
It is my pleasure to announce a new release of
[Tuareg](https://github.com/ocaml/tuareg) which provides Emacs modes to edit
OCaml, OPAM, and jbuild files. The full changelog is below.

Happy hacking,
C.

### Changes

* Let <kbd>M-q</kbd> reformat strings (and use only SMIE).
* Do not indent an expression after `;;` (issue #106).
* New face `tuareg-font-double-colon-face` to highlight `;;`.
* For `type … and …`, left-align `and` with `type`.
* Fix indentation of some GADT type definitions.
* Use `prettify-symbols-mode` to turn `+.` into `∔`,… and add a menu
  entry to toggle it.
* Properly indent `type 'a foo = 'a bla = …` (issue #98).
* Properly indent (issue #7):

        module … with module X = Z
                  and type t := C.t

* Support `let exception E in expr` (issue #102).
* Improved highlighting of `val` and `module` in first class module
  expressions.
* Warn if a file inside a `_build` is edited and propose to switch.
* Add a custom face `tuareg-font-lock-label-face` for labels.
* Add option `tuareg-match-patterns-aligned` to allow to choose
  between the two styles:

        function          v.s.        function
        | A                           | A
          | B -> ...                  | B -> ...
        | C -> ...                    | C -> ... "

* Highlight attributes and extension nodes.
* Disable by default and improve the compilation advice—see the new
  variable `tuareg-opam-insinuate` (issue #97).
* New keybinding <kbd>C-cC-w</kbd> and function `tuareg-opam-update-env`
  to update the environment to an opam switch (offering completion).
* Improved highlighting of quoted strings `{|…|}` (issue #89).
* Move after `;;` when evaluating a phrase in the toploop (issue #96).

* ocamldebug:
  - Add support for `completion-at-point`.
  - Highlight the right location even in presence of non-ascii chars
	(issue #80).
  - Make possible to pass argument to ocamldebug (say, paths with `-I`).
  - Make possible to pass argument to the program being debugged (issue #66).
  - Warn if SMIE is disabled.

* New modes `tuareg-jbuild` and `tuareg-opam` with syntax
  highlighting, indentation, and skeletons.
      

Large binaries - break down by libraries?

Archive: https://discuss.ocaml.org/t/large-binaries-break-down-by-libraries/1098/1

Christian Lindig asked:
We have observed that some of our binaries have grown in size over several
releases and I'd like to find out what are the biggest contributors to this. I'd
be grateful for recommendations how best to do this: can the compiler or linker
be made to emit informations, or is it better to analyse the binary with
something like nm(1). Obviously I can take a look at library files before
linking but it seems a bit tedious to me and I don't know how much the linker
actually selects.
      
Hannes Mehnert replied:
Some time ago I had the same interest (and still have). I have implemented an
overproximation (by hooking into the link step of `ocamlbuild`, and gathering
the byte sizes of all linked libraries). This is available
[here](https://gist.github.com/hannesm/c8a9b2e75bb4f98b5100a838ea125f3b). I also
wrote some text about the results over in [my
blog](https://hannes.nqsb.io/Posts/BottomUp). This will obviously need some
adaption for the jbuilder area. I also didn't so far find enough time to
upstream this analysis into the mirage utility (or make it more standalone).

I'd also be really interested to have a way coming from the binary, using
objdump/nm to find the function names and sizes, and then some heuristics which
puts function names into library buckets. Especially to see the comparison in
terms of bytes of the results.
      
Christian Lindig then said:
Looking at output from nm(1), the code for each module is marked:

```
: ring3tools $ nm -n logfreq.native | egrep '_code_begin|_code_end' | head
000000000002e500 T caml_startup__code_begin
0000000000030fd4 T caml_startup__code_end
0000000000030fe0 T camlStd_exit__code_begin
000000000003100d T camlStd_exit__code_end
0000000000031010 T camlLogfreq__code_begin
0000000000031fca T camlLogfreq__code_end
0000000000031fd0 T camlUnix__code_begin
0000000000037443 T camlUnix__code_end
0000000000037450 T camlUnixLabels__code_begin
0000000000037ccc T camlUnixLabels__code_end
```

While this does not account for space taken up for data, it could be a good
approximation.
      

MirageOS bug cleaning day: Friday, 17th November 2017

Archive: https://discuss.ocaml.org/t/mirageos-bug-cleaning-day-friday-17th-november-2017/1100/1

Mindy Preston announced:
In the MirageOS organization, we have many repositories that have lots of old
and no-longer-relevant issues in them (some have even been fixed!) as well as
issues that haven't gotten a reply yet from a maintainer. In preparation for the
upcoming hack retreat (starting on 29th November), when more eyes are on obscure
corners of the Mirage ecosystem than usual, I think it would be nice to take a
day and do some housecleaning.

On Friday, 17th November (a week from now), @hannes, @djs55, and I will be going
through old issues and coordinating our efforts on the #mirage channel over on
irc.freenode.net (the same venue as our biweekly catchups). I expect there to be
the most activity during the afternoon UTC and maybe a bit later, but don't feel
limited to that timeslot -- if you're familiar with a repository and have a bit
of time, we'd love your help any time at all. Please do join us if you're free!

If you're not sure where to start, here's a link to a GitHub search for all
issues in repositories owned by the Mirage organization which are open and not
archived, sorted with the least recently updated first, for your editing and
browsing pleasure:

https://github.com/issues?q=is%3Aopen+is%3Aissue+org%3Amirage+archived%3Afalse+sort%3Aupdated-asc
      

New release: ProVerif 1.97pl3

Archive: https://discuss.ocaml.org/t/new-release-proverif-1-97pl3/1109/1

Bruno Blanchet announced:
I am pleased to announce a new release of ProVerif, version 1.97pl3.
ProVerif is a automatic security protocol verifier that relies on the symbolic
model of cryptography.

ProVerif is available at
   http://proverif.inria.fr
It is also available via opam. If you use opam, you can install it by:
   opam install proverif
(You may need to do "opam update" before, to get the latest version.)
This release is mainly a bug fix release.

Recent changes:

Version 1.97pl3

- Modified the code so that it is compatible with OCaml 4.06

Version 1.97pl2

- Fixed bug that could cause an internal error in trace reconstruction,
  when a message was received of a type different from the one expected
  by the input.
- Fixed bug that happened when "sync" was under a process macro.
  It could lead to unbound variables, causing an internal error.
      

Ecaml: OCaml Emacs plugins tutorial

Archive: https://discuss.ocaml.org/t/ann-ecaml-ocaml-emacs-plugins-tutorial/1074/2

bcc continued the thread from last week:
[Part
2](https://blag.bcc32.com/ecaml-getting-started/2017/11/12/emacs-plugins-in-ocaml-2/)
and [Part
3](https://blag.bcc32.com/ecaml-getting-started/2017/11/12/emacs-plugins-in-ocaml-3/)
are now online.
      

Post-doc at Inria Paris to work on the OCaml language and core system

Archive: https://sympa.inria.fr/sympa/arc/caml-list/2017-11/msg00031.html

Xavier Leroy announced:
Interested in contributing to OCaml as part of the team that created it?

The Gallium project-team at Inria Paris (http://gallium.inria.fr/) is
opening a post-doctoral position to work on the OCaml language and
core system.

The position is part of the SecurOCaml project
(http://ocamlpro.github.io/SecurOCaml/) and aims at improving the
usability and reliability of OCaml for the development of
high-assurance applications.  

In this context, a broad variety of OCaml-related research topics can
be considered depending on the expertise of the post-doctoral
scientist.  Theory-oriented topics will be considered but more
practically-oriented topics such as tool development and short-term
improvements to the OCaml system are especially welcome.

The position can start as early as February 2018 and extends until
June 2019, with a possible extension to December 2019.

The candidate should have a PhD, prior experience in the design and
implementation of functional programming languages, and a solid
experience in developing advanced software in OCaml.

To apply, send your curriculum vitae (including software portfolio and
names of references) to Xavier.Leroy@inria.fr.
      

OCaml internship opportunities?

Archive: https://discuss.ocaml.org/t/ocaml-internship-opportunities/1113/1

theindigamer asked:
I know about Jane Street -- are there any other companies which offer OCaml
internships?

Related:

* Haskell subreddit threads
[1](https://www.reddit.com/r/haskell/comments/6yuelo/internship_for_haskellers/),
[2](https://www.reddit.com/r/haskell/comments/76men2/summer_research_internship_opportunities_for/)
* I've asked in the ReasonML discord chat and the Reason team at Facebook
doesn't have internships this year.
      
Ivan Gotovchits replied:
Here, in CMU, [Cylab][2] (Pittsburgh, PA, USA), we sometimes do OCaml
internship. We are doing Binary Analysis and Reverse engineering using [a
platform][1] written in OCaml. Those who are interested may contact me, and I
will try to figure out if we can sponsor an internship this year.

[1]: https://github.com/BinaryAnalysisPlatform/bap
[2]: https://www.cylab.cmu.edu/
      
Mindy Preston also replied:
The MirageOS project has had several interns through the [Google Summer of
Code](https://developers.google.com/open-source/gsoc/) (for students) and
[Outreachy](https://www.outreachy.org/) (for people from groups underrepresented
in tech) programs. We keep a list of projects that might be good fits for
interns [under our canopy](http://canopy.mirage.io/tags/help%20needed).
      

Statistical memory profiling for OCaml

Archive: https://sympa.inria.fr/sympa/arc/caml-list/2017-11/msg00033.html

Jacques-Henri Jourdan announced:
It is my pleasure to announce statmemprof, a statistical memory profiler
for OCaml. This tool will help you better understand the memory
consumption of your programs and find memory leaks. It can be tuned to
have little overhead (as low as < 1%) while still gathering useful
information.

This tool can already be installed via opam:
$ opam switch 4.06.0+statistical-memprof  #The switch also exists for 4.03.0 and 4.05.0.
$ opam install statmemprof-emacs

Then, instructions for using it can be found be reading the 
https://github.com/jhjourdan/statmemprof-emacs/blob/master/README.md README
file.

Please note that even though this tool is already useful, it is still at
a preliminary stage of development. I would be very happy to get your
comments to help me understand what would be the most useful improvements.
      

OCaml Internships at LexiFi (France)

Archive: https://discuss.ocaml.org/t/ocaml-internships-at-lexifi-france/1118/1

Marc Lasson announced:
LexiFi is currently looking for talented master students with a genuine interest
in functional programming for an internship that would take place in our offices
in [Boulogne-Billancourt](https://goo.gl/maps/uVWcmVrwx3u).The internship should
last at least 4 months and up to 6 months.

The candidate should be confident in its ability to quickly learn to write OCaml
code proficiently and should have good algorithmic skills. No knowledge of
finance is required.

If you wish to apply please send an e-mail to careers@lexifi.com with your
resume attached.

You will find more details about the topics the candidate could work on by
[following this link](https://www.lexifi.com/careers/internships_developer).

Do not hesitate to contact me for any further information. 

Marc Lasson (marc.lasson@lexifi.com). 

PS: I hope I did not break any upcoming rule for posting job offers here.
      

Ocaml Github Pull Requests

Gabriel Scherer and the editor compiled this list:
Here is a sneak peek at some potential future features of the Ocaml
compiler, discussed by their implementers in these Github Pull Requests.

- Better error reporting in case of missing 'rec' in let-bindings
  https://github.com/ocaml/ocaml/pull/1472
- Add extended sequencing operators
  https://github.com/ocaml/ocaml/pull/1474
- Fix Spacetime under Windows
  https://github.com/ocaml/ocaml/pull/1478
      

Other OCaml News

From the ocamlcore planet blog:
Here are links from many OCaml blogs aggregated at OCaml Planet,
http://ocaml.org/community/planet/.

Towers of Hanoi
 http://blog.shaynefletcher.org/2017/11/towers-of-hanoi.html
      

Old cwn

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.


Alan Schmitt