[cwn] Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt alan.schmitt at polytechnique.org
Tue Jan 10 00:38:51 PST 2023


Hello

Here is the latest OCaml Weekly News, for the week of January 03 to 10,
2023.

Table of Contents
─────────────────

OCaml.org: recapping 2022 and queries on the Fediverse
shuttle v0.3.1 released
Blog post: Testing in Seqes
ocplib-simplex v0.5 released
Looking for Participants for User Survey on ocaml.org Package Documentation and Learn Area
Release of ocaml-sf/learn-ocaml:0.14.1
The relationship between call/cc, shift/reset, and effect handlers
10 years of OUPS, meetup january 2023
ocaml-lsp-server 1.15.0-4.14 and 1.15.0-5.0
OCamlCC: Bazel-enabled OCaml Toolchain (new alpha release)
Other OCaml News
Old CWN


OCaml.org: recapping 2022 and queries on the Fediverse
══════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ocaml-org-recapping-2022-and-queries-on-the-fediverse/11099/10>


Deep in this thread, Anil Madhavapeddy replied to several questions
───────────────────────────────────────────────────────────────────

Energy Usage
╌╌╌╌╌╌╌╌╌╌╌╌

        were environmental issues taken into account (eg. energy
        consumption)?

  I punted on this in my recap as I hadn’t had a chance to catch up with
  @patricoferris about it, but since it’s a very important topic let’s
  start talking about it incrementally now instead of waiting for that!

  In the redesign for the new site, we explicitly removed third-party
  trackers and took advantage of the spare screen space (usually
  reserved for a privacy policy, now no longer needed) and put in a
  [OCaml.org carbon footprint statement] as a placeholder until we
  obtained more specific data.

  Later in 2022, @patricoferris investigated how we could do better in
  terms of power monitoring, and is developing a suite of OCaml tools
  that will hopefully be useful to the wider community as well:
  • [Variorium] collects hardware-level power counter information, for
    accurate monitoring
  • [Carbon Intensity] is a tool to integrate with country-level APIs
    for where energy is primarily coming from, in the absence of more
    specific information from the datacentre provider.
  • [Clarke] combines all this into a convenient Prometheus monitoring,
    for centralised analysis.

  These are all still unreleased, and I’ve opened a [tracking issue]
  about the deployment of these into the ocaml.org cluster. If anyone
  would like to help out (particularly around finding more accurate APIs
  for carbon intensity) then feel free to open issues/PRs on those
  various repositories.

  Some services, such as [restoring inbox.ocaml.org] are a little
  blocked on this topic as I’m reluctant to provision more long running
  virtual machines without thinking through more efficient alternatives
  that can consolidate services (e.g. have just one SMTP endpoint
  instead of multiple). My apologies to @xavierleroy and @nojb for the
  delay, as they have both done a bunch of work towards restoring it
  already, and I’ll do my best to catch up this month.


[OCaml.org carbon footprint statement]
<https://ocaml.org/policies/carbon-footprint>

[Variorium] <https://github.com/patricoferris/ocaml-variorum>

[Carbon Intensity] <https://github.com/geocaml/carbon-intensity>

[Clarke] <https://github.com/patricoferris/clarke>

[tracking issue] <https://github.com/ocaml/infrastructure/issues/25>

[restoring inbox.ocaml.org]
<https://github.com/ocaml/infrastructure/issues/15>


Privacy
╌╌╌╌╌╌╌

        I’m wondering if private messages on this forum are
        actually ‘private’, or are they readable by the admins

  The only digital communications mechanism that we’re using that
  features end-to-end encryption is Matrix. That implies that, as a
  general rule, that most of the alternatives such as Slack, IRC,
  Discord and Mastodon, do allow their respective admins to read your
  messages. Discourse (the software powering this forum) has [explicit
  support for admins to monitor private messages] for online safety
  reasons, although to my knowledge this facility has never needed to be
  used for this deployment.

  If you want a reasonably usable mechanism for private messages, then
  Matrix is the way to go, including for encrypted group channels, and
  all the other services are one security breach away from going public.

  As for the discussion about openness, I’m personally not really a
  believer in being radically transparent when doing open-source work. I
  find it really difficult to focus on a topic when in the public eye,
  and instead prefer to work on it with my immediate collaborators and
  then have an open discussion about it. What I _really_ miss is the
  ability to promote information that _results_ from the private
  discussions into a more open forum – all these recaps and newsletters
  are entirely written from scratch, and the inefficiency means that
  it’s a huge amount of effort to get right. It’s easy to put the time
  in with full papers since there is a reward structure (for academics,
  anyway) in place via the conference circuit, but less so for other
  mediums. A project I’m going to return to sometime this year is
  [Bushel], where I’ve been prototyping a communications format suitable
  for iterative promotion and integration with data scrapers.


[explicit support for admins to monitor private messages]
<https://meta.discourse.org/t/can-i-view-private-messages-as-an-admin/135699>

[Bushel] <https://github.com/avsm/bushel/tree/andreas/develop>


Source mirroring
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

        I know I’m no maintainer and this is no survey but
        *please* consider [sourcehut ]! It’s lean, easy to
        maintain, and very email-friendly! It could even double as
        the new home for ocaml-list.

  To be clear, there’s no special ’maintainer bit’ or survey required to
  give your feedback – a maintainer is just someone who puts the time in
  to help out with a particular area. For example, we got brilliantly
  helpful external feedback for the [opam archive migration here] just a
  few days ago.

  I do like SourceHut a lot, but we’d ideally self-host it, and that’s
  quite a bit of work due to its [microservice architecture]. It should
  be possible to strip down the services (remove the autobuilders and
  bug trackers) for a read-only mirror, and so a good way to contribute
  would be assemble a Docker compose file with such an installation and
  demonstrate how it might work with a sample set of Git repositories to
  mirror. If you (or anyone else reading this) wants to have a go, feel
  free to create an issue on
  <https://github.com/ocaml/infrastructure/issues> with your prototype.


[sourcehut ] <https://sourcehut.org/>

[opam archive migration here]
<https://github.com/ocaml/infrastructure/issues/19#issuecomment-1367885708>

[microservice architecture] <https://man.sr.ht/installation.md>


Anil Madhavapeddy later replied to more questions
─────────────────────────────────────────────────

        The “Books” page ([OCaml Books ]) is often out of date and
        needs more maintenance.

  I [updated] the RWO entry and added Michael Clarkson’s brilliant book
  from Cornell’s CS3110. We finished importing in the last of the OCaml
  Workshop videos yesterday so they should be up-to-date from 2012->2022
  now when [ocaml/ocaml.org#112] is merged.

  The papers could use significant backfilling (there have been a _lot_
  of OCaml related papers in the last 20 SIGPLAN conferences and
  affiliated workshops). @octachron [suggested BibTeX import] for that
  which should make it more practical.

  In general, more hands make light work of this data maintenance.
  There’s a good [CONTRIBUTING.md] for the ocaml.org site, so please do
  all of you look at it and see if you can help improve the job board,
  or success stories, or papers/books/anything else in there.

        • Having online documentation for OCaml packages is a huge
          progress. Yet, a Google search for a package name (e.g.
          “ocaml cryptokit”) generally lands on an opam.ocaml.org
          page (e.g. <https://opam.ocaml.org/packages/cryptokit/>)
          that does NOT point to the documentation, instead of the
          ocaml.org page (e.g.
          <https://ocaml.org/p/cryptokit/1.18>) that does link to
          the documentation. Why do we have two different pages
          with different contents for the same package? Could we
          merge them in one page that contains everything there is
          to know about that package?

  Tracking issue is now up at [ocaml/infrastructure#26]. It covers a few
  low hanging fruit things we can do straight away that’ll improve the
  situation.

        I agree that OCaml’s share of the computer carbon
        footprint is negligible. What then is the goal of pursuing
        this direction? Is there a demand among government users
        for these features? Is there commercial demand for this
        niche where OCaml could fill a role? Or is it because it’s
        a research area that is currently underserved?

  We are doing it __because it is the right thing to do at every level
  when we are in the middle of a [climate crisis]__. At an individual
  and organisational level, we all need to reduce our emissions
  footprints by avoiding wasteful consumption. As computer scientists,
  we need to develop tools to help society reduce our emissions
  footprints. As purchasers of computers and materials, we need to apply
  pressure on our vendors to reduce their emissions footprints and
  ensure they have responsible supply chains that adhere to good
  recycling and zero deforestation commitments. As consumers of cloud
  computing resources, we need to ensure they are minimal in their
  energy footprints and use of renewable power. As architects of
  distributed systems infrastructures, we need to ensure we engineer
  facilities to accurately record our emissions. As members of the
  global open source community, we need to set an example of best
  practises that may be replicated more widely.

  We learn by doing, and I am very disappointed that the responses here
  so far include no enthusiasm or encouragement to the interesting OCaml
  libraries by @patricoferris that I linked to. All of those are
  reusable more widely, and have obvious applications in reliable energy
  monitoring (in e.g. embedded systems) in the real world.

  And for those unmoved by the burning planet argument, there’s an even
  easier one. The best way to make computers go fast is to do less work,
  and that’s what all the disciplined tracking and reproducible
  infrastructure forming around ocaml.org does: makes it all go faster.
  Weren’t a bunch of you complaining that the opam package database
  sometimes took a day to update? Well, it’s rebuilding entire
  documentation universes in that time now, and package updates should
  take minutes once we finish the opam2web migration :slight_smile:


[OCaml Books ] <https://ocaml.org/books>

[updated] <https://github.com/ocaml/ocaml.org/pull/753>

[ocaml/ocaml.org#112]
<https://github.com/ocaml/ocaml.org/issues/112#issuecomment-1370416705>

[suggested BibTeX import]
<https://github.com/ocaml/ocaml.org/issues/648>

[CONTRIBUTING.md]
<https://github.com/ocaml/ocaml.org/blob/main/CONTRIBUTING.md>

[ocaml/infrastructure#26]
<https://github.com/ocaml/infrastructure/issues/26>

[climate crisis]
<https://www.un.org/en/un75/climate-crisis-race-we-can-win>


Anil Madhavapeddy answered yet more questions
─────────────────────────────────────────────

        I think that the new website has too much empty space. On
        the old website, information is a lot more compact. The
        new website has a lot of padding, which feel gratuitous to
        me.

  To follow on from @tmattio’s comments, I also raised the same query
  during the design process. As far as I can figure, most modern
  websites are designed for mobile usage – a huge percentage of users
  now come in via tablet/mobiles, and so responsive design is really
  important. That explains the medium/small layouts, but not why there
  is so much whitespace in the wider screen layouts. It’s really obvious
  when comparing an opam.ocaml.org package description with the
  equivalent on ocaml.org/p. The next iteration of design is beginning
  now, so please do help out with [the survey and your thoughts] that
  @sabine just posted about, and we can get those fixed.

        I’ve been running a Peertube instance with thousands of
        users for years and it never involved password sharing.
        I’m quite surprised to hear this…

  The problem is pretty simple: PeerTube doesn’t support [shared video
  channels], so one user has to own them. In our case, the intrepid
  [bactrian] returns for all the OCaml Workshop videos.

  If we do create separate users, then it also looks weird. For example,
  @patricoferris uploaded OCaml Workshop 2022 videos under [his own
  account], and now when you reference them from Mastodon it looks like
  you’re referring to `@patrickferris' since it drops the domain portion
  by default. See [here] for a ’toot’ that is owned by the bot, and
  [here] one that is harder to distinguish.

  And then… I did indeed create you an `oups at watch.ocaml.org' account in
  April, but you haven’t uploaded anything since. What do we do if
  someone else in the future wants to take over OUPS videos and get them
  online? You need to account share. Most of the ActivityPub services
  like Mastodon and PeerTube are quite user-centric at the moment, and
  not well suited to shared publishing. But it works well enough with a
  little coordination amongst ourselves and some trust. Concrete
  suggestions for improvement welcome.

        It’s probably better with a [link to the room ]. :wink:

  Even better with issues to improve the ocaml.org website ;-) Now at
  [ocaml/ocaml.org#767] and [ocaml/ocaml.org#768] for your events
  suggestion.

        It’s nice to hear about all the existing/future
        decentralized services. In the other hand, IIUC, all these
        services hosting/maintainance seem to be handled by a
        single person and I feel it may goes against the idea and
        benefits of decentralized services.

  Using decentralisation has got nothing to do with one hosted instance.
  By using these protocols, the information related to OCaml can be
  replicated across multiple sites and reconstructed if one service goes
  down. For example, my personal crank.recoil.org instance “follows” and
  mirrors the videos on watch.ocaml.org, as do around 50 other PeerTube
  instances. So the ocaml.org domain is most valuable as a namespace,
  where it can aggregate and publish information that is actually
  generated elsewhere. In an ideal world, the ACM SIGPLAN team would
  publish their videos on PeerTube as well as YouTube, and ocaml.org
  would be a bookmarking/mirroring service.

  While this is the theory, in practise the ActivityPub protocol is very
  URL-centric and so makes it hard to recover from federated domains
  disappearing. You can read more about this in an excellent
  undergraduate project last year by Gediminas Lelešius on [Improving
  the Resilience of ActivityPub Services].

  As for your point about hosting being centralised; I’m not the only
  maintainer. There are around a dozen maintainers spread across the
  [ocurrent] and opam/dune/ocaml orgs that keep everything ticking
  along. Some of the core machines do indeed only have a couple of
  people with access, but this is for obvious security reasons. No
  service has only 1 person with access, so we have a reasonable “bus
  factor”.

  As @jbeckford [observed] in another thread, we are in definite need of
  more maintainers throughout the OCaml ecosystem. For infrastructure,
  the best way to get involved is by help to scope out technologies
  (like Mobilizon or SourceHut, in this thread), or by contributing to
  the software stacks behind it (like the various CIs listed in the
  ocurrent site). My _personal_ hope is that someone will start building
  complete ActivityPub bindings in OCaml so we can start having some
  Fediverse fun in our own language :slight_smile:


[the survey and your thoughts]
<https://discuss.ocaml.org/t/looking-for-participants-for-user-survey-on-ocaml-org-package-documentation-and-learn-area/11128>

[shared video channels]
<https://github.com/Chocobozzz/PeerTube/issues/699>

[bactrian] <https://watch.ocaml.org/accounts/bactrian/video-channels>

[his own account]
<https://watch.ocaml.org/accounts/patrickferris/video-channels>

[here]
<https://amok.recoil.org/@bactrian@watch.ocaml.org/106827591951684363>

[here]
<https://amok.recoil.org/@patrickferris@watch.ocaml.org/109313722353063678>

[link to the room ] <https://matrix.to/#/#ocaml-language:matrix.org>

[ocaml/ocaml.org#767] <https://github.com/ocaml/ocaml.org/issues/767>

[ocaml/ocaml.org#768] <https://github.com/ocaml/ocaml.org/issues/768>

[Improving the Resilience of ActivityPub Services]
<https://github.com/gediminasel/activitypub-resilience/blob/main/dissertation.pdf>

[ocurrent] <https://github.com/ocurrent/overview>

[observed]
<https://discuss.ocaml.org/t/improving-windows-install-time/11082/7>


shuttle v0.3.1 released
═══════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-shuttle-v0-3-1-released/8684/3>


Anurag Soni announced
─────────────────────

  There’s a new version (0.8.1) of the library published to `opam'. Some
  highlights:


Shuttle
╌╌╌╌╌╌╌

  • Buffered reader’s support timeouts for the `refill' operation. If a
    file descriptor is currently not ready for a read sys call, the
    reader will wait for the user-defined upper bound time span and
    raise an exception indicating a timeout was reached if the
    underlying file-descriptor isn’t ready for IO within that duration.
  • The buffered reader and writer optionally accept an Async
    [Time_source]. They default to wall clock, but this input can be
    used to provide alternate time sources that match the Time_source
    interface.


[Time_source]
<https://github.com/janestreet/async_kernel/blob/master/src/time_source_intf.ml>


Shuttle_ssl
╌╌╌╌╌╌╌╌╌╌╌

  • Client and Server SSL connections forward the [SSL connection
    context] to the user provided callbacks. This can be useful to
    access the session certificates for ensuring they meet the user’s
    expectations.


[SSL connection context]
<https://github.com/janestreet/async_ssl/blob/86882526834e0d58a0e35b4ae4ce3303cb369bf6/src/ssl.mli#L41>


Shuttle_http
╌╌╌╌╌╌╌╌╌╌╌╌

  This is a new companion library that implements the HTTP/1.1 server
  codec. There is more work needed to ensure we cover the HTTP 1.1 spec
  properly, but this initial release includes a usable implementation of
  the most common use-cases. The library ships with a hand-rolled parser
  with decent performance and good test coverage (Thanks to ocaml-afl
  and afl-fuzz I found some bugs I otherwise wouldn’t have!!), and
  simple service definitions that can support HTTP keep-alive, fixed
  length and chunked bodies, streaming support to help work with large
  bodies, request pipelining and centralized error handling for any
  unhandled exception in the user handler or the I/O runtime. Most of
  the implementation of `http_async' directly within the `shuttle'
  project. Future work for the HTTP runtime will happen within shuttle,
  and http_async will focus on providing a more opinionated higher level
  interface for writing async http services.

  Some additional features that aren’t necessarily related to the HTTP
  spec include timeout support for request header parsing (this helps
  shut down clients that are too slow), and a public api that provides
  enough control to allow scheduling resources cleanup for streaming
  response bodies (Resources backing a stream will be shutdown when the
  socket connection closes, either for EOF, user-action, or any
  unhandled error while the runtime performs i/o).


◊ Examples

  ┌────
  │ open Shuttle_http
  │ 
  │ let hello_world (request : Request.t) =
  │   return (Response.create ~body:(Body.string "Hello World") `Ok)
  │ ;;
  └────

  ┌────
  │ open Shuttle_http
  │ 
  │ let my_service (ctx : Server.t) (request : Request.t) =
  │   let%map reader =
  │     (* This an example to show a stream that works with an external resource. *)
  │     Reader.open_file "<some file path>"
  │   in
  │   (* Create a pipe from the reader that we will use as a streaming response body. *)
  │   let reader_pipe = Reader.pipe reader in
  │   (* Register a callback that's called when the server handler is closed that will also
  │      close the pipe, in-turn closing the Reader and the underlying file descriptor. This
  │      is useful in scenarios where the connection is interrupted before the response body
  │      is fully exhausted and helps avoid resource leaks. This example is demonstrating how
  │      to do this manually using the server handler. Creating a response via
  │      [Server.respond_stream] will automatically register the action to close a stream on
  │      Server connection closing. *)
  │   upon (Server.closed ctx) (fun () -> Pipe.close_read reader_pipe);
  │   let response_stream = Body.of_pipe `Chunked reader_pipe in
  │   Response.create ~body:response_stream `Ok
  │ ;;
  │ 
  │ (* The same service written using the utility method for creating streaming responses. *)
  │ let my_service (ctx : Server.t) (request : Request.t) =
  │   let%map reader = Reader.open_file "<some file path>" in
  │   let reader_pipe = Reader.pipe reader in
  │   return (Server.respond_stream ctx (Body.Stream.of_pipe `Chunked reader_pipe))
  │ ;;
  └────

  The library is available [via opam]. If you try the library and
  experience any issues, or have further questions, please report an
  issue on the [Github Issue tracker].


  [via opam] <https://ocaml.org/p/shuttle_http/0.8.1/>

  [Github Issue tracker] <https://github.com/anuragsoni/shuttle/issues>


Blog post: Testing in Seqes
═══════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/blog-post-testing-in-seqes/11115/1>


Raphaël Proust announced
────────────────────────

  I have written a blog post about the test suite which covers this
  library.

  TL;DR:
  • I use GADTs to describe the library API and generate QCheck tests.
  • I manually used `mutaml' for mutation-testing on the test suite.

  <https://raphael-proust.gitlab.io/code/testing-seqes.html>

  The big takeaway for me is how useful mutation testing is. It gives
  some confidence in the test coverage not just in terms of what paths
  are visited but also that modifications are indeed caught by the
  tests. If you haven’t used `mutaml' I’d recommend giving it a go. If
  you have I’d be interested in ideas for integrating it better with
  some common build tools (`dune' mostly).

  (Also, version 0.2 of `Seqes' is now available.)


ocplib-simplex v0.5 released
════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-ocplib-simplex-v0-5-released/11118/1>


OCamlPro announced
──────────────────

  With a bit of delay, we are happy to announce that a new version of
  [ocplib-simplex], v0.5, was released on last November.

  `ocplib-simplex' implements the Simplex Algorithm, and is used for
  example in the Alt-Ergo SMT solver.

  This new version aims at making the interface more generic, so that it
  can easily be used in other projects.

  For more information, see our [post on OCamlPro’s blog]


[ocplib-simplex] <https://github.com/ocamlpro/ocplib-simplex>

[post on OCamlPro’s blog]
<https://ocamlpro.com/blog/2022_11_25_ocplib-simplex-0.5>


Looking for Participants for User Survey on ocaml.org Package Documentation and Learn Area
══════════════════════════════════════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/looking-for-participants-for-user-survey-on-ocaml-org-package-documentation-and-learn-area/11128/1>


Sabine Schmaltz announced
─────────────────────────

  the ocaml.org maintenance team is working diligently to bring you
  desperately needed UI/UX improvements. Starting right now, we are
  working with a UI/UX designer (hi Claire!) to make sure that the
  changes we make improve your experience on the site while also looking
  nice!

  We’re running a (short) user survey via Google forms on the *package
  documentation and learn areas* with two goals:
  1. to get a broad overview of what the most pressing UI/UX issues to
     fix are, and
  2. to recruit some participants for interviewing them in a 20 minute
     video chat with Claire (optional)

  To participate, please fill out the survey at
  <https://docs.google.com/forms/d/e/1FAIpQLScRGByWGyqawjTJHssJ5jfSoh6kIayuFmc12E0gLOUb82OJ1A/viewform?usp=sf_link>
  (any feedback is useful, you do not need to be available for interview
  to participate)

  Claire is an experienced UI/UX designer, but not a developer, so
  having the opportunity to get to know the community while also
  learning what problems you are experiencing on ocaml.org is very
  useful to bring her up to speed.

  It is likely that there will not be enough time to interview everyone
  who offers to help, but if you get invited to an interview with
  Claire, do not hesitate to show her what is, according to your
  experiences, wrong or broken with the package documentation and learn
  area on ocaml.org.


Release of ocaml-sf/learn-ocaml:0.14.1
══════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-release-of-ocaml-sf-learn-ocaml-0-14-1/11133/1>


Erik Martin-Dorel announced
───────────────────────────

  We are very pleased to announce the latest stable release of
  [Learn-OCaml], version `0.14.1'.

  Many thanks to all users who reported bugs and feature requests!

  A comprehensive list of the fixes and enhancements offered by this
  release is available in [the Release Notes], and the corresponding
  [opam-repository pull request] is pending.

  If you are using `learn-ocaml.0.14.0', we strongly recommend that you
  update your version to `0.14.1' to benefit from these latest fixes.

  In particular, this release removes the automatic dialog *“A more
  recent answer exists on the server. Do you want to fetch the new
  version?”* that was showing up after 180“, but happened to be
  [flawed]: Instead, the exercises view now contains a 3-fold Reload
  button that allows end users to retrieve the Template, the latest
  draft, or the latest graded version:

  <https://user-images.githubusercontent.com/10367254/209889453-72c43707-1829-4b36-bcba-db158234eac5.png>

  <https://github.com/ocaml-sf/learn-ocaml/pull/506#issuecomment-1367003486>

  If need be, feel free to open issues in the [Learn-OCaml bug tracker ]
  or the [learn-ocaml.el bug tracker], or post in this thread to share
  comments.

  Happy OCaml learning and teaching!


[Learn-OCaml] <https://github.com/ocaml-sf/learn-ocaml>

[the Release Notes]
<https://github.com/ocaml-sf/learn-ocaml/releases/tag/v0.14.1>

[opam-repository pull request]
<https://github.com/ocaml/opam-repository/pull/22877>

[flawed] <https://github.com/ocaml-sf/learn-ocaml/issues/505>

[Learn-OCaml bug tracker ]
<https://github.com/ocaml-sf/learn-ocaml/issues/new/choose>

[learn-ocaml.el bug tracker]
<https://github.com/pfitaxel/learn-ocaml.el/issues>


The relationship between call/cc, shift/reset, and effect handlers
══════════════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/the-relationship-between-call-cc-shift-reset-and-effect-handlers/11096/3>


François Pottier announced
──────────────────────────

  Advertisement!: [Paulo de Vilhena’s PhD dissertation], whose main
  theme is formal reasoning about programs that involve effect handlers,
  contains chapters about the connections between callcc/throw,
  shift/reset, and effect handlers (including encodings between these
  combinators and proofs that these encodings give rise to the expected
  reasoning rules).

  It also contains a specification and a proof of correctness for
  `invert', a function that uses effect handlers to turn an `iter'
  function into a lazy sequence.


[Paulo de Vilhena’s PhD dissertation]
<https://hal.inria.fr/tel-03891381>


10 years of OUPS, meetup january 2023
═════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/10-years-of-oups-meetup-january-2023/11140/1>


zapashcanon announced
─────────────────────

  The next OUPS meetup will take place on *Thursday, 19th of January*
  2022. It will start at *7pm* at the *4 place Jussieu*, 75005 Paris.

  This will be an opportunity to celebrate the 10th anniversary of OUPS
  meetups! :tada:

  :warning: :trumpet: It *won’t* be in the usual room but in the *Herpin
  amphitheater* in the *Esclangon building*. :trumpet: :warning:

  Please, *[register on meetup ]* as soon as possible to let us know how
  many pizza we should order.

  For more details, you may check the [OUPS’ website ].

  This month will feature the following talks :


[register on meetup ]
<https://www.meetup.com/fr-FR/ocaml-paris/events/290424039>

[OUPS’ website ] <https://oups.frama.io>

Analyse statique par interprétation abstraite de programmes fonctionnels manipulant des types algébriques récursifs – Milla Valnet
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  Afin de prévenir les erreurs de programmation, des analyseurs
  statiques ont été développés pour de nombreux langages ; cependant,
  aucun analyseur mature ne cible l’analyse de valeurs pour un langage
  fonctionnel /à la ML/. On décrira ici un analyseur statique de valeurs
  par interprétation abstraite pour un langage fonctionnel typé du
  premier ordre, approche sûre et automatique pour garantir l’absence
  d’erreurs à l’exécution. Cette approche nous permet d’analyser des
  fonctions récursives manipulant des types algébriques récursifs et
  d’inférer dans un domaine abstrait leur relation entrée-sortie. Une
  implémentation est en cours sur la plateforme MOPSA et analyse avec
  succès de courts programmes de quelques lignes. Ce travail ouvre ainsi
  la voie vers une analyse de valeurs précise et relationnelle basée sur
  l’interprétation abstraite pour les langages fonctionnels d’ordre
  supérieur /à la ML/.


YOcaml - Xavier Van de Woestyne
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  YOCaml is a static blog generator that was developed to test the
  Preface library. It is relatively impragmatic, partially poorly
  documented, and has no effective caching strategy. However, its
  genesis is fun (and tries to use tools not very present in the world
  of OCaml) and some external contributions have made it quite
  explicitly coupling with MirageOS. In this presentation, I invite you
  to discover its general operation, some design choices and a brief
  tutorial on how to use it.


ocaml-lsp-server 1.15.0-4.14 and 1.15.0-5.0
═══════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-ocaml-lsp-server-1-15-0-4-14-and-1-15-0-5-0/11141/1>


Ulugbek Abdullaev announced
───────────────────────────

  On behalf of the ocaml-lsp team, I’m pleased to announce
  ocaml-lsp-server versions `1.15.0-4.14' and `1.15.0-5.0' for OCaml
  4.14 and 5.0, respectively. This is the first time we release
  ocaml-lsp supporting two compiler versions. We look forward to your
  feedback.

  (the versions will be available on OPAM soon)


Full change log:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

◊ Features

  • Enable [semantic highlighting] support by default (#933)

  • Support connecting over pipes and socket. Pipes on Windows aren’t
    yet supported (#946)

    [More] about communication channels in LSP specification.

  • Re-enable `ocamlformat-rpc' for formatting code snippets (but not
    files and not on Windows) (#920, #939)

    One needs to have installed either `ocamlformat' package version >
    0.21.0 or, otherwise, `ocamlformat-rpc' package. Note that
    previously `ocamlformat-rpc' came in a standalone OPAM package, but
    since `ocamlformat' version > 0.21.0, it comes within `ocamlformat'
    package.

  • Add custom [`ocamllsp/hoverExtended'] request (#561)

  • Support utf-8 position encoding clients (#919)

    [More] about position encoding in LSP specification.

  • Show unwrapped module alias types on hovering over module names.
    This is due to upgrading to merlin 4.7 and using merlin’s
    `verbosity=smart' by default (#942)


  [semantic highlighting]
  <https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_semanticTokens>

  [More]
  <https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#implementationConsiderations>

  [`ocamllsp/hoverExtended']
  <https://github.com/ocaml/ocaml-lsp/blob/e165f6a3962c356adc7364b9ca71788e93489dd0/ocaml-lsp-server/docs/ocamllsp/hoverExtended-spec.md#L1>

  [More]
  <https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#position>


◊ Fixes

  • Respect the client’s completion item resolve and preSelect
    capabilities (#925, #936)

  • Disable polling for dune’s watch mode on Windows and OCaml 4.14.0
    (#935)

  • Fix semantic highlighting of “long identifiers,” e.g., `Foo.Bar.x'
    (#932)

  • Fix syncing of document contents:
    • For ranges that span an entire line (#927)
    • Previously, whole line edits would incorrectly eat the newline
      characters (#971)


OCamlCC: Bazel-enabled OCaml Toolchain (new alpha release)
══════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ocamlcc-bazel-enabled-ocaml-toolchain-new-alpha-release/11145/1>


Gregg Reynolds announced
────────────────────────

  Hi folks. A new alpha version of [OCamlCC], the Bazel-enabled version
  of the OCaml repository, is now available.

  This version includes many major changes and improvements. Highlights:

  • All the compilers are buildable under the usual names: ocamlc.byte,
    ocamlopt.byte, etc. This includes the flambda compilers, whose names
    use “optx” instead of “opt” (e.g. ocamloptx.optx), and the profiling
    compilers ocamlcp.byte, etc.

  • Test support. The makefiles use a custom tool, ocamltest, to run
    tests. This tool is essentially a mini build engine. Since we
    already have an excellent build engine in Bazel, we do not need
    ocamltest - all of its functionality is provided by Bazel and a few
    custom Bazel test rules. A small subset of the tests in testsuite
    (about 50) have been converted to use Bazel. Bazel’s testing
    capabilities are very powerful and flexible; for example it is easy
    to run any test individually, to create custom test suites, and to
    select tests to run based on tags - e.g run only of the inline
    expect tests in some set of test directories, or only tests
    involving integers.

  • The tools (ocamldep, ocamlobjinfo) can be built and run under
    Bazel’s control, which means arguments to the tools can be expressed
    as Bazel target labels. This saves the user the problem of finding
    filesytem paths for the arguments; e.g. you can pass
    `//bytecomp:Bytegen' to the ocamlcmt runner, which will
    automatically configure it to be built with -bin-annot, and will
    find the correct path for the resulting .cmt file and pass it to the
    tool. Build labels can also be used with ocamldep; the runner will
    find the source corresponding file and pass it to the tool.

  • Dependencies are fine-grained. For example, targets that depend on
    submodules of the standard library depend on them directly; they do
    not depend on the stdlib archive file.

  • In general, signatures (.mli files) depend only on other signatures,
    and with a few exceptions “modules” (.ml files) depend only on other
    modules. All of these dependencies are explicitly expressed, and
    they are quasi-typed: if you list a module as a dependency of a
    signature, Bazel will complain.

  • By default, compiler builds do not use archived libraries (e.g.
    stdlib.cmx?a); this can be configured by a command-line switch.

  This version also includes a lot of internal features relevant to
  maintainers. For example much of the logic involving configuration and
  preprocessing has been reworked to use mustache templates. This is not
  strictly-speaking a Bazel thing, it’s more of an experiment in
  improving and simplifying this logic. It also has implications for
  portability - the mustache tooling is written in portable C, and it
  replaces non-portable scripts.

  I’ve added quite a bit of documentation, although as you might expect
  it is neither complete nor polished. I’ve included a good deal of
  information about how Bazel does certain things.

  I’ve tested it on Mac an Linux. It does not require any special
  configuration, so it should be pretty easy to get started with it.

  If you need help: I monitor this list and the OCaml discord server,
  and I’ve set up an [OBazl discord] server. You can also file an issue.

  PRs are welcome, but since this is still in flux, please file an issue
  first to make sure your idea is still relevant and needed.


[OCamlCC] <https://github.com/obazl-repository/ocamlcc>

[OBazl discord] <https://discord.gg/wZCSq2nq6y>


Other OCaml News
════════════════

From the ocaml.org blog
───────────────────────

  Here are links from many OCaml blogs aggregated at [the ocaml.org
  blog].

  • [Engineer Spotlight: Zach Shipko]
  • [Engineer Spotlight: Jules Aguillon]
  • [Love Rust? Then OCaml’s New Eio Library is for You]
  • [OCaml 5 Multicore Testing Tools]
  • [Advanced Merlin Features: Destruct and Construct]
  • [How Nomadic Labs Used Multicore Processing to Create a Faster
    Blockchain]
  • [OCaml 5 With Multicore Support Is Here!]
  • [Hillingar: MirageOS Unikernels on NixOS]
  • [OCaml 5 Release Candidate Now Available!]
  • [Accelerating zk-SNARKs - MSM and NTT algorithms on FPGAs with
    Hardcaml]
  • [OCaml 5 Beta2 Release]
  • [Solve the 2022 Advent of Code Puzzles with OCaml]
  • [Visualizing information propagation in markets]
  • [Six Surprising Reasons the OCaml Programming Language is Good for
    Business]
  • [Deploying reproducible unikernels with albatross]
  • [Computations that differentiate, debug, and document themselves]
  • [OCaml 5 at Open Source India 2022]
  • [Presenting on Algebraic Effects at FP-SYD]
  • [Towards Minimal Disk-Usage for Tezos Bakers]


[the ocaml.org blog] <https://ocaml.org/blog/>

[Engineer Spotlight: Zach Shipko]
<https://tarides.com/blog/2023-01-05-engineer-spotlight-zach-shipko>

[Engineer Spotlight: Jules Aguillon]
<https://tarides.com/blog/2022-12-29-engineer-spotlight-jules-aguillon>

[Love Rust? Then OCaml’s New Eio Library is for You]
<https://tarides.com/blog/2022-12-27-love-rust-then-ocaml-s-new-eio-library-is-for-you>

[OCaml 5 Multicore Testing Tools]
<https://tarides.com/blog/2022-12-22-ocaml-5-multicore-testing-tools>

[Advanced Merlin Features: Destruct and Construct]
<https://tarides.com/blog/2022-12-21-advanced-merlin-features-destruct-and-construct>

[How Nomadic Labs Used Multicore Processing to Create a Faster
Blockchain]
<https://tarides.com/blog/2022-12-20-how-nomadic-labs-used-multicore-processing-to-create-a-faster-blockchain>

[OCaml 5 With Multicore Support Is Here!]
<https://tarides.com/blog/2022-12-19-ocaml-5-with-multicore-support-is-here>

[Hillingar: MirageOS Unikernels on NixOS]
<https://tarides.com/blog/2022-12-14-hillingar-mirageos-unikernels-on-nixos>

[OCaml 5 Release Candidate Now Available!]
<https://tarides.com/blog/2022-12-07-ocaml-5-release-candidate-now-available>

[Accelerating zk-SNARKs - MSM and NTT algorithms on FPGAs with Hardcaml]
<https://blog.janestreet.com/zero-knowledge-fpgas-hardcaml/>

[OCaml 5 Beta2 Release]
<https://tarides.com/blog/2022-11-29-ocaml-5-beta2-release>

[Solve the 2022 Advent of Code Puzzles with OCaml]
<https://tarides.com/blog/2022-11-24-solve-the-2022-advent-of-code-puzzles-with-ocaml>

[Visualizing information propagation in markets]
<https://blog.janestreet.com/visualizing-information-propagation-in-markets-index/>

[Six Surprising Reasons the OCaml Programming Language is Good for
Business]
<https://tarides.com/blog/2022-11-22-six-surprising-reasons-the-ocaml-programming-language-is-good-for-business>

[Deploying reproducible unikernels with albatross]
<https://hannes.robur.coop/Posts/Albatross>

[Computations that differentiate, debug, and document themselves]
<https://blog.janestreet.com/computations-that-differentiate-debug-and-document-themselves/>

[OCaml 5 at Open Source India 2022]
<https://tarides.com/blog/2022-11-16-ocaml-5-at-open-source-india-2022>

[Presenting on Algebraic Effects at FP-SYD]
<https://tarides.com/blog/2022-11-15-presenting-on-algebraic-effects-at-fp-syd>

[Towards Minimal Disk-Usage for Tezos Bakers]
<https://tarides.com/blog/2022-11-10-towards-minimal-disk-usage-for-tezos-bakers>


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]


[send me a message] <mailto:alan.schmitt at polytechnique.org>

[the archive] <https://alan.petitepomme.net/cwn/>

[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>

[online] <http://lists.idyll.org/listinfo/caml-news-weekly/>

[Alan Schmitt] <https://alan.petitepomme.net/>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20230110/fa6a4431/attachment-0001.html>


More information about the caml-news-weekly mailing list