Hello

Here is the latest OCaml Weekly News, for the week of November 22 to 29,
2022.

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

B·o·B, an universal and secure peer-to-peer file-transfer in OCaml
ISO3166 (Country Codes)
Is there any way to get live preview of plots from Owl_plplot?
OCaml Community Code of Conduct
Adopting the OCaml Code of Conduct
OCaml 5.0.0, second beta release
OUPS meetup december 2022
Optimising an interpreter
Old CWN


B·o·B, an universal and secure peer-to-peer file-transfer in OCaml
══════════════════════════════════════════════════════════════════

  Archive:
  
<https://discuss.ocaml.org/t/ann-b-o-b-an-universal-secure-peer-to-peer-file-transfer-in-ocaml/10833/3>


Continuing this thread, Yawar Amin asked and Calascibetta Romain replied
────────────────────────────────────────────────────────────────────────

  Hello and thank you for your interest in the project!

        Does this mean that uncompressed files are sent without
        encryption?

  Any documents sent with Bob is encrypted :) . What we don’t want to do
  is infer the MIME type of what the user wants to send - in this we are
  not trying to introspect the content of the document. The trade-off is
  that we can’t infer whether it would make sense to compress the
  document or not. For example, a user might expect Bob to be smart
  enough to recognise the document as a video and, in that case, not
  compress the document. This is not the case, however, if you do not
  want to introspect the MIME type of the document to be sent.

  In other words, the user must be aware of what is trying to be sent
  and use `--no-compression' or not accordingly. Again, the latter
  option does not override the encryption :) .

        Would it be possible to use the relay only for
        establishing the connection and after that is done for the
        relay to connect the two peers directly, removing itself
        from the middle?

  One of the improvements we want to make is the ability for Bob to
  actually do “peer-to -peer” - and not go through the relay. However,
  we would like to keep the default of using the relay for simplicity.
  The peer-to-peer case probably requires a network state (open ports,
  accessible peer) that many don’t have for various reasons -
  conversely, we know that it is possible for the user not to have
  access to our relay (but to have access to the peer) and it is in this
  case that we would like to do true peer-to-peer.


ISO3166 (Country Codes)
═══════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-iso3166-country-codes/10854/1>


Patrick Ferris announced
────────────────────────

  Hello :wave:

  On behalf of the [geocaml] organisation, I’m happy to announce the
  initial release of [ISO3166], a very simple library for working with
  “country codes”.

  ┌────
  │ # ISO3166.alpha3_to_country `IRL |> ISO3166.Country.name;;
  │ - : string = "Ireland"
  └────

  The `Country' module already contains all of the countries for
  convenience named after the alpha2 country code.

  ┌────
  │ # ISO3166.Country.fr |> ISO3166.Country.name;;
  │ - : string = "France"
  │ # ISO3166.Country.fr |> ISO3166.Country.numeric |> 
ISO3166.numeric_to_string;;
  │ - : string = "250"
  └────

  This [is the data source], read it with care if you want to use this
  library in your code.

  Happy coding :))


[geocaml] <https://github.com/geocaml>

[ISO3166] <https://github.com/geocaml/ISO3166>

[is the data source]
<https://github.com/lukes/ISO-3166-Countries-with-Regional-Codes>


Is there any way to get live preview of plots from Owl_plplot?
══════════════════════════════════════════════════════════════

  Archive:
  
<https://discuss.ocaml.org/t/is-there-any-way-to-get-live-preview-of-plots-from-owl-plplot/10787/6>


Continuing this thread, sanette announced
─────────────────────────────────────────

  Done!

  version 0.6 ([github]) now uses SDL2 (via tsdl)


[github] <https://github.com/sanette/oplot>


OCaml Community Code of Conduct
═══════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ocaml-community-code-of-conduct/10494/80>


Sudha Parimala said
───────────────────

  Once again, thanks everyone for all the feedback here and over DMs.
  Really appreciate everyone’s involvement in this. Below is our
  response. Feel free to nudge us if we missed somethig!


Scope of the Code of Conduct
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  The list of spaces has been modified to better capture the essence of
  the spaces this Code of Conduct applies to (thanks to Xavier & Gabriel
  for the wording)

        These rules apply to the projects hosted in the [GitHub
        ocaml organization], the [discuss.ocaml.org] forum, the
        [caml-l...@inria.fr](<mailto:caml-l...@inria.fr>) mailing
        list, [OCaml IRC](irc://irc.libera.chat:6697/#ocaml),
        [OCaml discord], physical events like OCaml Workshop, and
        any other OCaml-related space that adopted this Code of
        Conduct. A more comprehensive list of spaces is available
        at the [code-of-conduct] GitHub repository.

  *Built-in moderation tools*

  Platforms such as discuss have built-in moderation tools to make it
  easier to bring something to the attention of the moderators. At the
  moment, we think it might be best to keep admin activities such as
  spam filtering and Code of Conduct violations separate. We may want to
  display Code of Conduct details at platforms like discuss/discord etc.
  Happy to sync on this with the admins and moderators of the various
  platforms on this.

  *Offline events*

  This code of conduct document can serve as a good place to start for
  offline events such as OCaml workshop, Mirage retreat, local meetups
  etc., but it may not be sufficient to cover all the needs for physical
  events. The Code of Conduct team is willing to work with organisers of
  OCaml related physical events to improve the text and help with
  moderation.

  *Violations outside community spaces*

  We understand inhibitions about including violations outside community
  spaces, though we think it’s important not to skip it in the text. It
  is in order to account for interactions not within the places we’ve
  listed explicitly; such as direct messages, private mailing lists etc.
  in the context of OCaml community. Hopefully we have little need to
  fall back to this clause, and even when there is it will be evaluated
  in a case by case basis.


[GitHub ocaml organization] <http://github.com/ocaml>

[discuss.ocaml.org] <http://discuss.ocaml.org/>

[OCaml discord] <https://discord.gg/cCYQbqN>

[code-of-conduct] <https://github.com/ocaml/code-of-conduct>


Reporting
╌╌╌╌╌╌╌╌╌

  As mentioned in the document itself, the rules apply to everyone in
  the community. We would like to make it clear that there are no
  exceptions to this, including Code of Conduct committee members. If a
  report is submitted on a committee member, the report will be treated
  as any other report, the committee composed by all members except the
  one reported against. If any other member wants to recuse themselves
  for whatever reason, they will be free to do so. In fact, members will
  be free to recuse themselves for any report before the discussions
  start, e.g. if the reporter or the person whom it is reported against
  is close to the member. This is one of the reasons individual emails
  to contact members are made available, people are free to contact a
  subset of the committee members to submit a violation report. Again,
  the member will recuse from the process when they themselves are
  reporting a violation. If a member’s actions are found to be in strong
  violation of the CoC, after necessary steps are taken, they may also
  be asked to resign and a new member inducted.


Next steps
╌╌╌╌╌╌╌╌╌╌

  The text has a more permanent place at
  <https://github.com/ocaml/code-of-conduct>. You are welcome to use it
  for your OCaml projects. Recommendations for using this Code of
  Conduct can be found in the repository. Feel free to get in touch or
  use the issue tracker if you have questions.


Adopting the OCaml Code of Conduct
══════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/adopting-the-ocaml-code-of-conduct/10870/1>


Sudha Parimala announced
────────────────────────

  Hello everyone!

  The OCaml Community Code of Conduct is hosted at
  <https://github.com/ocaml/code-of-conduct>. The code of conduct
  applies to the spaces listed in the document, namely the [GitHub ocaml
  organization], the [discuss.ocaml.org] forum, the
  [caml-l...@inria.fr](<mailto:caml-l...@inria.fr>) mailing list, [OCaml
  IRC](irc://irc.libera.chat:6697/#ocaml), [OCaml discord], physical
  events like OCaml Workshop.

  In addition to this, OCaml open source projects and OCaml community
  spaces [are welcome to adopt] this Code of Conduct. When you adopt
  this code of conduct for your project, you can add your project to the
  [list of adopters].

  You are requested to add your contact details for reporting
  violations, and/or you may also add the Code of Conduct team’s contact
  details for reporting violations if you wish. Some recommendations to
  add the Code of Conduct to your projects [here].

  Happy inclusive camling!


[GitHub ocaml organization] <http://github.com/ocaml>

[discuss.ocaml.org] <http://discuss.ocaml.org/>

[OCaml discord] <https://discord.gg/cCYQbqN>

[are welcome to adopt]
<https://github.com/ocaml/code-of-conduct#adopting-this-code-of-conduct>

[list of adopters]
<https://github.com/ocaml/code-of-conduct/blob/main/list-of-adopters.md>

[here]
<https://github.com/ocaml/code-of-conduct#adopting-this-code-of-conduct>


OCaml 5.0.0, second beta release
════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ocaml-5-0-0-second-beta-release/10871/1>


octachron announced
───────────────────

  The release of OCaml 5.0.0 is drawing close.

  In order to test the most recent bug fixes and to help you update your
  software and libraries ahead of the release, we have released a second
  beta version of OCaml 5.0.0, (see below for the installation
  instructions).

  If you find any bugs, please report them here:

  <https://github.com/ocaml/ocaml/issues>

  Compared to the first beta release, this second beta contains many
  small internal standard library fixes, one configuration fix and many
  small bug fixes.

  We also have few updates of the documentation, which introduce two new
  alerts: one for the `unstable' modules `Domain' and `Effect', and
  another for functions doing `unsynchronized_access' to mutable state
  in the standard library. Those two alerts are disabled by default, but
  are available for interested users.

  The first release candidate for OCaml 5.0.0 is expected to follow
  closely this second beta release.

  If you are interested by the ongoing list of bug fixes, the updated
  change log for OCaml 5.0.0 is available at:

  <https://github.com/ocaml/ocaml/blob/5.0/Changes>

  You can also follow the state of the opam ecosystem on

  <http://check.ocamllabs.io/>

  A short summary of the changes since the first beta release is also
  available below.


Installation instructions
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  The base compiler can be installed as an opam switch with the
  following commands on opam 2.1:

  ┌────
  │ opam update
  │ opam switch create 5.0.0~beta2
  └────

  For previous versions of opam, the switch creation command line is
  slightly more verbose:
  ┌────
  │ opam update
  │ opam switch create 5.0.0~beta2 
--repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
  └────
  It might be also interesting to check the new support for parallelism
  by installing the domainslib library with
  ┌────
  │ opam install domainslib
  └────

  The source code for the beta release is available at these addresses:

  • <https://github.com/ocaml/ocaml/archive/5.0.0-beta2.tar.gz>
  • <https://caml.inria.fr/pub/distrib/ocaml-5.0/ocaml-5.0.0~beta2.tar.gz>


Fine-tuned compiler configuration
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  If you want to tweak the configuration of the compiler, you can switch
  to the option variant with:
  ┌────
  │ opam updatse
  │ opam switch create <switch_name> ocaml-variants.5.0.0~beta2+options 
<option_list>
  └────
  where `<option_list>' is a comma separated list of `ocaml-option-*'
  packages. For instance, for a flambda and no-flat-float-array switch:
  ┌────
  │ opam switch create 5.0.0~beta2+flambda+nffa 
ocaml-variants.5.0.0~beta2+options ocaml-option-flambda 
ocaml-option-no-flat-float-array
  └────
  The command line above is slightly more complicated for opam versions
  anterior to 2.1:
  ┌────
  │ opam update
  │ opam switch create <switch_name> 
--packages=ocaml-variants.5.0.0~beta2+options,<option_list>
  │ 
--repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
  └────
  In both cases, all available options can be listed with “opam search
  ocaml-option”.


Changes since the first beta
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

◊ Configuration changes

  • [#11097]: Build native-code compilers on NetBSD/aarch64 (Kate
    Deplaix, review by Anil Madhavapeddy)


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


◊ Bug fixes

  • [#10875], +[#11731]: Add option to allocate fiber stacks and
    sigaltstacks with mmap(MAP_STACK) instead of malloc. This is exposed
    via a configure –enable-mmap-map-stack option, and is enabled by
    default on OpenBSD where it is mandatory. (Anil Madhavapeddy, review
    by Gabriel Scherer, Tom Kelly, Michael Hendricks and KC
    Sivaramakrishnan).

  • [#11652]: Fix benign off-by-one error in Windows implementation of
    caml_mem_map. (David Allsopp, review by Gabriel Scherer)

  • [#11669], [#11704]: Fix construction of Effect.Unhandled exceptions
    in the bytecode interpreter. (David Allsopp and Xavier Leroy, report
    by Samuel Hym, review by Xavier Leroy and Gabriel Scherer)

  • [#11184], +[#11670]: Stop calling ranlib on created / installed
    libraries (Sébastien Hinderer and Xavier Leroy, review by the same)

  • [#11194], [#11609]: Fix inconsistent type variable names in “unbound
    type var” messages (Ulysse Gérard and Florian Angeletti, review
    Florian Angeletti and Gabriel Scherer)

  • [#11622]: Prevent stack overflow when printing a constructor or
    record mismatch error involving recursive types. (Florian Angeletti,
    review by Gabriel Scherer)

  • [#11662], [#11673]: fix a memory leak when using Dynlink, the bug
    was only present in development version of OCaml 5. (Stephen Dolan,
    report by Andre Maroneze, review by Gabriel Scherer)

  • [#11732]: Ensure that types from packed modules are always
    generalised (Stephen Dolan and Leo White, review by Jacques
    Garrigue)

  • [#11737]: Fix segfault condition in Unix.stat under Windows in the
    presence of multiple threads. (Marc Lasson, Nicolás Ojeda Bär,
    review by Gabriel Scherer and David Allsopp)


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

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

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

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

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

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

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

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

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

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

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

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

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

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


◊ Documentation

  • [#11193], [#11227]: documentation on concurrency safety for mutable
    data types and states in the standard library. A
    `unsynchronized_access' alert have been added for functions that
    require user synchronizations on concurrent access. The new alert is
    diabled by default. (Florian Angeletti, review by François Pottier
    and KC Sivaramakrishnan )

  • [#11526], add a `unstable' alert to the Domain and Effect modules.
    The new alert is disabled by default. (Florian Angeletti, review by
    Nicolás Ojeda Bär, Daniel Bünzli, and Kate Deplaix)

  • [#11640]: Add Flambda commonly-used options to the ocamlopt manpage
    (Amandine Nangah, review by David Allsopp, Florian Angeletti,
    Sébastien Hinderer, and Vincent Laviron)


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

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

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

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


OUPS meetup december 2022
═════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/oups-meetup-december-2022/10872/1>


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

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

  :warning: :trumpet: It *won’t* be in the usual room but in the *Astier
  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.

  As usual, presentations will be streamed on the [OUPS’ galène].

  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/289909374>

[OUPS’ galène] <https://galene.irill.org/group/oups>

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

Camlboot: debootstrapping the OCaml compiler - Nathanaëlle Courant
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  In this talk, I will present Camlboot, a project which debootstraps
  the OCaml compiler, that is, is able to compile the OCaml compiler
  without using the bootstrap binary. Camlboot consists in a naïve
  compiler for a subset of OCaml called MiniML, and an interpreter for
  OCaml written in MiniML. I will first justify the interest of
  debootstrapping, then explain the architecture and parts of Camlboot,
  and finally present the experimental validation of Camlboot.


The Camel’s Voice - Enguerrand Decorne
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  This presentation will be an informal and simplistic introduction to
  music programming via a computer. There are many “live coding”
  languages (SonicPi, TidalCycles), but it is also quite possible to
  experiment with having fun with our favorite language! I will present
  various projects on which I have experimented, with accompanying sound
  demonstrations. Disclaimer: This presentation contains compliments to
  the MIDI protocol.


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.


  After the presentations, there will be some pizzas offered by the
  [OCaml Software Foundation] ! :pizza:


[OCaml Software Foundation] <https://ocaml-sf.org>


Optimising an interpreter
═════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/optimising-an-interpreter/10874/1>


Jon Harrop asked
────────────────

  If I have an interpreter written in OCaml and I want it to run code
  faster without the burden of having to write a compiler what are my
  options?

  I could use MetaOCaml and do staged metaprogramming. Should be easy
  and achieve a very respectable speedup but MetaOCaml is obscure so I
  assume dev tools would no longer work?

  If I run my interpreter as bytecode can I generate bytecode on-the-fly
  and have it executed? If so, how? Can malfunction do this sort of
  thing?

  Are there any libraries that might help like expression trees to LLVM
  compilers?


Didier Wenzek replied
─────────────────────

  This series of posts might help you: [ How I wrote my own “proper”
  programming language]. This uses a combination of OCaml/C++/LLVM. So
  not exactly what you are looking for, but definitely a valuable source
  of inspiration.


[ How I wrote my own “proper” programming language]
<https://mukulrathi.com/create-your-own-programming-language/intro-to-compiler/>


ygrek replied
─────────────

  <https://github.com/stedolan/malfunction>


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

Reply via email to