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 `o...@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/@bactr...@watch.ocaml.org/106827591951684363> [here] <https://amok.recoil.org/@patrickfer...@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.schm...@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/>
_______________________________________________ caml-news-weekly mailing list caml-news-weekly@lists.idyll.org http://lists.idyll.org/listinfo/caml-news-weekly