[cwn] Attn: Development Editor, Latest OCaml Weekly News
Alan Schmitt
alan.schmitt at polytechnique.org
Tue Oct 25 02:39:13 PDT 2022
Hello
Here is the latest OCaml Weekly News, for the week of October 18 to 25,
2022.
Table of Contents
─────────────────
tablecloth-native 0.0.8 released
ocaml-lsp-server 1.14.0
What are pros and cons of Eliom web framework?
dune 3.5.0
Killer use-cases (tools, libraries, domains, etc) for OCaml
Snóke, a good (?) old game
Interesting: Running WebAssembly in OCaml with Wasmer
OCaml Community Code of Conduct
multicodec, multibase, multihash and multihash-digestif
Timmy, a time and calendar library
Opam hacking afternoon for OCaml 5.0.0 on Friday 28
Other OCaml News
Old CWN
tablecloth-native 0.0.8 released
════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-tablecloth-native-0-0-8-released/10656/1>
Paul Biggar announced
─────────────────────
We’ve released version 0.0.8 of [Tablecloth], an ergonomic,
cross-platform standard library to allow you share code between OCaml
and Rescript. This version has dozens of new functions, which you can
see in the [Changelog].
You can install it:
• in Rescript: via npm as `tablecloth-rescript'
• in OCaml: via opam as `tablecloth-native'
From [the announcement]:
This is the last release of Tablecloth in this format. As
Rescript and OCaml have diverged, Tablecloth’s old purpose
(a library to allow you to share code between ReasonML and
OCaml) no longer makes sense (and in fact we had struggled
to get much value out of sharing code between the two).
What we actually found valuable about Tablecloth was being
able to use the same function names in our multiple
codebases.
As such, we’ve refocused Tablecloth to be a simple shim
over existing standard libraries, allowing developers who
use multiple languages to have a consistent set of
standard library functions, while being idiomatic to
language they’re in (eg pipe-first vs pipe-last,
`camelCase' vs `snake_case'). The next release is planned
to support [OCaml], [Rescript], and [F#].
[Tablecloth] <https://www.tablecloth.dev/>
[Changelog]
<https://github.com/darklang/tablecloth/blob/main/Changelog.md>
[the announcement]
<https://blog.darklang.com/new-version-of-tablecloth/>
[OCaml] <https://github.com/darklang/tablecloth-ocaml-base>
[Rescript] <https://github.com/darklang/tablecloth-rescript>
[F#] <https://github.com/darklang/tablecloth-fsharp>
ocaml-lsp-server 1.14.0
═══════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-ocaml-lsp-server-1-14-0/10657/1>
Rudi Grinberg announced
───────────────────────
On behalf of the ocamllsp team, I’m pleased to announce version
1.14.0. This release contains a new code action to help you inline
definitions thanks to @jfeser. We look forward to your feedback.
Full change log:
Features
╌╌╌╌╌╌╌╌
• Code action for inlining let bindings within a module or expression.
(#847)
• Tag “unused code” and “deprecated” warnings, allowing clients to
better display them. (#848)
• Refresh merlin configuration after every dune build in watch mode
(#853)
Fixes
╌╌╌╌╌
• Respect `showDocument' capabilities. Do not offer commands or code
actions that rely on this request without client support. (#836)
• Fix signatureHelp on .mll files: avoid “Document.dune” exceptions
What are pros and cons of Eliom web framework?
══════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/what-are-pros-and-cons-of-eliom-web-framework/10658/1>
Volodymyr Melnyk asked
──────────────────────
I’m interested in pros and cons of Eliom web framework to understand
if it is well suitable for my idea of corporate blogging/content
marketing SaaS. What successful SaaS projects made with Eliom do you
know? Do you know any issues related to Eliom (or why many people
prefer, for example, Dream)? Also I’m interested if there are any
popular iOS apps made with Eliom?
Vincent Balat replied
─────────────────────
There is a huge app written with Eliom: The Be Sport social network.
It was written by a team of 2 to 15 developers over the past 7 years
(including Jerôme Vouillon and myself, who are the creators of
Ocsigen). You can have a look here: <https://www.besport.com/news> and
download the mobile apps on [Google Play store] or [Apple app store].
Be Sport is 100% written in OCaml with Ocsigen, as multi-tier and
multi-platform Eliom app. There is only one code base for the server
part and the Web, Android and iOS clients. The mobile apps are running
in in webviews, using cordova (or may be soon capacitor). Pages are
generated on server side (for example for indexing by search engines,
or if it is the first page you load) or on the client (in client apps,
or if you change page in the Web app). This is the most distinguishing
feature of Eliom w.r.t. any other Web framework (in any programming
language).
Another advantage of multi-tier programming is that Web APIs are
generated automatically by Eliom. More generally communication between
server and client are transparent: as you have only one program, you
can call server side OCaml functions from your client side OCaml
program. Communication from server to clients (notifications) is also
handle by Eliom. Of course you can define your own APIs if you need to
interact with third party apps.
When you master them, these features save a lot of time and are
probably what made possible to implement a very complete Facebook-like
social network with such a small team. Of course if you don’t need all
this, you can use Eliom for more traditional Web programming and it be
very similar to what you can do with Dream.
Server parts of your app are compiled to OCaml module, loaded
dynamically into Ocsigen Server (which is now using cohttp as HTTP
lib) through its configuration file. There is currently no way to
write standalone apps without this dynlink, but it is in our todo
list.
Clients parts are compiled into Javascript with js_of_ocaml.
Other features of Ocsigen:
• Ocsigen has a very powerful, yet simple, **service identification
mechanism** to program server-side page generation,
• It implements [*continuation-based Web programming*] (through
dynamic creation of specialized services),
• It includes a [*powerful session mechanism*] (you can for example
decide if session data corresponds to a browser, or to a tab, or to
all browser and mobile apps for a same user)
• HTML pages are [*statically type-checked with Tyxml* ]
• Ocsigen allows to insert *reactive page elements*, using Functional
Reactive Programming
• Several native libraries are available: A [set of interface
*widgets*] designed to be compatible with multi-tier programming,
[an *internationalisation* library], [user management], etc.
As Ocsigen innovates in many fields, you have some learning to do to
become fully operational (lwt, reactive programming, multi-tier
programming, html typing with polymorphic variants and phantom types,
etc.). Everything is summarized on [the first chapter of the
programming manual].
Ocsigen is now mature. It can work without a lot of maintenance.
However the project is currently not funded (no developer is currently
paid to work on Ocsigen).
Do not hesitate to contact me if you need to build a team for your
project. I may have some names.
[Google Play store]
<https://play.google.com/store/apps/details?id=com.besport.www.mobile&hl=en>
[Apple app store]
<https://itunes.apple.com/us/app/besport/id1104216922?mt=8>
[*continuation-based Web programming*]
<https://pages.lip6.fr/Christian.Queinnec/PDF/www.pdf>
[*powerful session mechanism*]
<https://ocsigen.org/tuto/latest/manual/basics#h5o-26>
[*statically type-checked with Tyxml* ] <https://ocsigen.org/tyxml>
[set of interface *widgets*] <https://ocsigen.org/ocsigen-toolkit>
[an *internationalisation* library]
<https://github.com/besport/ocsigen-i18n>
[user management] <https://ocsigen.org/ocsigen-start>
[the first chapter of the programming manual]
<https://ocsigen.org/tuto/latest/manual/basics>
Volodymyr Melnyk then asked and Vincent Balat replied
─────────────────────────────────────────────────────
Thank your for such a detailed response. I have few
questions about Eliom:
1. Does it support SOA/microservice architectures or only
monoliths?
2. Does it support “backends for frontents” approach?
We did not work on microservices which means that if you want to
implement some microservices, you can, but I guess it will be very
similar to what you can do with other frameworks. The BFF patterns
does not make a lot of sense in our vision, as you have only one
frontend and build the frontend and backend together as a single app.
Our multitier approach removes most the problems of multi-frontend
apps. When programming with Eliom, you don’t have separate teams for
each frontend and backend. One developer is responsible for its own
feature from the db to the interface and for all patforms, which
reduces a lot the need of communication between teams, and the risk of
API problems. However if you want several backends, for example to
interact with external apps, of course you can do that. Eliom does
reduce the possibilities w.r.t. more traditional Web programming.
<https://global.discourse-cdn.com/standard11/uploads/ocaml/optimized/2X/1/10332d49eb6ebf67e3ef84047bed384ae7bc248c_2_1380x696.jpeg>
dune 3.5.0
══════════
Archive: <https://discuss.ocaml.org/t/ann-dune-3-5-0/10660/1>
Etienne Millon announced
────────────────────────
I’d like to announce the release of dune 3.5.0 on opam. This release
is packed with fixes and new features, that are described below with a
description of what this means for project maintainers.
dune executable
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
This lists features of the “dune” executable itself. Upgrading dune
will bring in these changes. We consider these changes safe, but it is
difficult to define what a breaking change is for a command-line tool
(for example, some error messages change). It is important to note
that just upgrading the dune executable is not supposed to change how
dune interprets existing projects. If just upgrading dune breaks
compilation, it is a bug in dune, please report it!
◊ Added
• Allow dune describe workspace to accept directories as arguments.
The provided directories restrict the worskpace description to those
directories. (#6107, fixes #3893, @esope)
• Add a terminal persistence mode that attempts to clear the terminal
history. It is enabled by setting terminal persistence to
`clear-on-rebuild-and-flush-history' (#6065, @rgrinberg)
◊ Fixed
• Fix build-info version when used with flambda (#6089, fixes #6075,
@jberdine)
• Fix compilation of Dune under esy on Windows (#6109, fixes #6098,
@nojb)
• Improve error message when parsing several licenses in `(license)'
(#6114, fixes #6103, @emillon)
• Handle CSI n K code in ANSI escape codes from commands. (#6214,
fixes #5528, @emillon)
• Do not ignore rules marked `(promote (until-clean))' when
`--ignore-promoted-rules' (or `-p') is passed. (#6010, fixes #4401,
@emillon)
◊ Changed
• dune install: copy files in an atomic way (#6150, @emillon)
• update vendored copy of cmdliner to 1.1.1. This improves the
built-in documentation for command groups such as `dune ocaml'.
(#6038, @emillon, #6169, @shonfeder)
• Extend dune describe to include the root path of the workspace and
the relative path to the build directory. (#6136, @reubenrowe)
macOS support
╌╌╌╌╌╌╌╌╌╌╌╌╌
This is technically a subset of above section. For M1 mac users, dune
3.5.0 is the first version which will correctly support
`dune-build-info'.
◊ Added
• on macOS, sign executables produced by artifact substitution (#6137,
#6231, fixes #5650, fixes #6226, @emillon)
• Enable file watching on MacOS SDK < 10.13. (#6218, @rgrinberg)
◊ Fixed
• macOS: Handle unknown fsevents without crashing (#6217, @rgrinberg)
(lang dune 3.5)
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
This lists changes if you opt into the new `(lang dune 3.5)' version
in your `dune-project' file. For this too, these are changes that we
consider safe, but they can require changes to your `dune' files. For
example, sandboxing is enabled in more places, which means that you
might have to be more precise in expressing your dependencies. Please
reach out on the issue tracker if you have trouble fixing your dune
file or if something does not seem to be possible anymore.
◊ Added
• Add a `runtime_deps' field in the `cinaps' stanza to specify runtime
dependencies for running the cinaps preprocessing action (#6175,
@rgrinberg)
• Allow rules producing directory targets to be not sandboxed (#6056,
@rgrinberg)
• Introduce a `dirs' field in the `install' stanza to install entire
directories (#5097, fixes #5059, @rgrinberg)
• Add an `(include <file>)' term to the `include_dirs' field for
adding directories to the include paths sourced from a file. (#6058,
fixes #3993, @gridbugs)
• Support `(extra_objects ...)' field in `(executable ...)' and
`(library ...)' stanzas (#6084, fixes #4129, @gridbugs)
• Allow rules producing directory targets to create symlinks (#6077,
fixes #5945, @rgrinberg)
• Added an (aliases …) field to the (rules …) stanza which allows the
specification of multiple aliases per rule (#6194, @Alizter)
• Allow include statement in install stanza (#6139, fixes #256,
@gridbugs)
• Add a new experimental feature `mode_specific_stubs' that allows the
specification of different flags and sources for foreign stubs
depending on the build mode (#5649, @voodoos)
◊ Changed
• Sandbox running cinaps actions starting from cinaps 1.1 (#6176,
@rgrinberg)
• Cinaps actions are now sandboxed by default (#6062, @rgrinberg)
• Menhir rules are now sandboxed by default (#6076, @rgrinberg)
• Inline tests are now sandboxed by default (#6079, @rgrinberg)
◊ Fixed
• Shadow alias module `Foo__' when building a library `Foo' (#6126,
@rgrinberg)
• Disallow generating targets in sub direcories in inferred rules. The
check to forbid this was accidentally done only for manually
specified targets (#6031, @rgrinberg)
• odoc rules now about `ODOC_SYNTAX' and will rerun accordingly
(#6010, fixes #1117, @emillon)
Coq support
╌╌╌╌╌╌╌╌╌╌╌
These changes, associated with `(lang dune 3.5)', are specific to
`coq'.
◊ Added
• Add `%{coq:...}' macro for accessing data about the configuration
about Coq. For instance `%{coq:version}' (#6049, @Alizter)
• Starting with Coq build language 0.6, theories can be built without
importing Coq’s standard library by including `(stdlib no)'. (#6165
#6164, fixes #6163, @ejgallego @Alizter @LasseBlaauwbroek)
◊ Changed
• Dune no longer considers .aux files as targets during Coq
compilation. This means that .aux files are no longer cached.
(#6024, fixes #6004, @alizter)
• The test suite for Coq now requires Coq >= 8.16 due to changes in
the plugin loading mechanism upstream (which now uses `Findlib').
• The `(coq.theory ...)' stanza will now ensure that for each declared
`(plugin ...)', the `META' file for it is built before calling
`coqdep'. This enables the use of the new `Findlib'-based loading
method in Coq 8.16; however as of Coq 8.16.0, Coq itself has some
bugs preventing this to work yet. (#6167 , workarounds #5767,
@ejgallego)
Killer use-cases (tools, libraries, domains, etc) for OCaml
═══════════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/killer-use-cases-tools-libraries-domains-etc-for-ocaml/10662/1>
Bozhidar Batsov asked
─────────────────────
I wanted to ask all of you to share your thoughts on what are the
killer use-cases for OCaml today (think along the lines of Rails for
Ruby, systems programming for Rust, data science for Python, etc).
Basically I want us to discuss the type of problems for which OCaml is
a great fit and the tools (e.g. libraries, frameworks, etc) that go
hand-in-hand with the respective problem spaces. E.g. one can say that
OCaml is a great option for building parsers because of Menhir and so
on.
In a way the topic is similar to the recent topic about favorite
libraries (see
<https://discuss.ocaml.org/t/top-5-favorite-ocaml-libraries/10626/17>),
but I’ve noticed most people there mentioned just basic libraries,
which don’t really help to understand how are they actually using
OCaml and what do they consider its strongest areas.
Eric Taucher replied
────────────────────
A few [Proof Assistants] are written with OCaml
• [Coq]
• [HOL Light]
• Albatross
[Proof Assistants] <https://en.wikipedia.org/wiki/Proof_assistant>
[Coq] <https://en.wikipedia.org/wiki/Coq>
[HOL Light] <https://en.wikipedia.org/wiki/HOL_Light>
Nicolas Ojeda Bar also replied
──────────────────────────────
Symbolic computation (compilers, interpreters, DSLs, etc) is OCaml’s
“traditional” bread and butter, but at LexiFi we use OCaml for
everything from web frontends (via `js_of_ocaml'), to server backend
(databases, web servers), native UIs, high performance numeric code,
etc; in our experience OCaml is an excellent choice for each one of
these. I shudder when I think about maintaining (not so much
implementing) this code in more “popular” languages.
Olle Härstedt also replied
──────────────────────────
To add to that, Facebook uses OCaml for Hacklang type-checking, Flow
type-checking, and their pfff analyzer.
Oh, pfff is discontinued, I see now. The other two should still be
used. And apparently they made a Python analyzer too.
<https://github.com/orgs/facebook/repositories?q=&type=all&language=ocaml&sort>=
Artem Pianykh also replied
──────────────────────────
Meta’s Infer is too implemented in OCaml <https://fbinfer.com/> But
this is still the same symbolic computation area.
From my experience, OCaml is a good general purpose language. It has a
reputation of being esoteric, but in fact it’s much more
straightforward than, say, Haskell. However, the ecosystem is
historically much more tuned to compilers, static analysis tools, etc.
Although, there are libraries for web and whatnot, I feel when it
comes to running stuff in prod it’s less mature than what you’d find
e.g. on the JVM.
Kay-Uwe Kirstein also replied
─────────────────────────────
In the engineering/data science domain I use OCaml to deal with
unstructered (measurement) data, e.g., parsing logfiles, import/export
from device specific databases, and controlling of test equipment. The
range is from small script-like tools to convert data to complete
desktop applications to run production tests in an assembly line
(incl. GUI, controlling test equipment, and database storage).
OCaml’s strength here is the support for robust tools that rarely show
undefined behavior in case of unexpected input data. Applications
usually run everyday without errors/crashes. Also, extending and
refactoring for changed or extended requirements hardly breaks
existing funcionality. This is probably due to the strong type system
and functional paradigm, and the high quality of compiler/build tools
and libraries.
OCaml’s weak points are the perception as an exotic programming
language which makes it harder to gain acceptance in other software
teams and the development experience on Windows. The main
“competitors” in the described fields are Python and C#/.NET (I am
working in a Windows-centric company).
According to the described use cases, the following libs are on my top
list:
• [cmdline]
• [re]
• [angstrom]
• [owl]
• [lablgtk3]
• [sqlite3]
• [cohttp]
[cmdline] <https://opam.ocaml.org/packages/cmdliner/>
[re] <https://opam.ocaml.org/packages/re/>
[angstrom] <https://opam.ocaml.org/packages/angstrom/>
[owl] <https://opam.ocaml.org/packages/owl/>
[lablgtk3] <https://opam.ocaml.org/packages/lablgtk3/>
[sqlite3] <https://opam.ocaml.org/packages/sqlite3/>
[cohttp] <https://opam.ocaml.org/packages/cohttp/>
Dennis Dang asked and Kay-Uwe Kirstein replied
──────────────────────────────────────────────
That’s a huge range of applications with OCaml!
I don’t ever go work related to hardware. How do you go
actually “[control] test equipment” with OCaml? Is there a
assembly/c api that you use and wrap OCaml over?
Yes, usually the test equipment supplier provides a C-api for their
instruments. With OCaml‘s C-api it is easy to write bindings for that,
sometimes with the help of the [ctypes] library. There is also a
communication/driver standard called VISA that can be used for
different instruments (and therefore can reuse generated OCaml
bindings for it)
[ctypes] <https://opam.ocaml.org/packages/ctypes/>
Snóke, a good (?) old game
══════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-snoke-a-good-old-game/10676/1>
sanette announced
─────────────────
I’m proud to announce a super original new game entirely written in
`ocaml', one that you can /not/ play in your browser (this is to save
energy, of course ;) ): *Snóke*! The ó is for Ocaml, or Original, or
whatever.
<https://github.com/sanette/snoke>
Yes, it is yet another variant of the classic 1976 snake video game,
but there /is/ a new idea (well, at least I couldn’t find it
elsewhere, please don’t disprove me): the goal is not to eat as many
apples as possible, but just the exact amount to cover a “shed skin”
(or ghost snake, if you prefer, this is the grey snake in the
screenshot).
You can already have… well maybe a few minutes of fun with it, but of
course contributors are welcome to make it even better.
<https://global.discourse-cdn.com/standard11/uploads/ocaml/optimized/2X/4/459406484b8faba4b1c3bff15c1e431c11f6260c_2_1146x1000.jpeg>
Vidéo: <https://youtu.be/h1MC9-xDKFA>
Interesting: Running WebAssembly in OCaml with Wasmer
═════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/interesting-running-webassembly-in-ocaml-with-wasmer/10679/1>
Christian Lindig said
─────────────────────
[Running WebAssembly in OCaml with Wasmer]
I found the article above and think it is exciting: how OCaml code can
call WebAssembly code which in turn could have been created from many
languages. I assume the authors are here - so maybe they can comment
on this?
[Running WebAssembly in OCaml with Wasmer]
<https://wasmer.io/posts/running-wasm-in-ocaml-with-wasmer>
OCaml Community Code of Conduct
═══════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ocaml-community-code-of-conduct/10494/62>
Sudha Parimala announced
────────────────────────
Here’s our new draft of the proposed [Code of Condcut] for the OCaml
community. The link in the original post is updated to reflect the
latest version of the draft. Many thanks to everyone for the
thoughtful suggestions. After taking into account the feedback we
received here and in private, we’ve decided to go with the Coq
Community Code of Conduct as our base text.
We’ve retained the section on [strained situations] from our previous
draft. The text is due to @bobot, who wrote it for a previous
iteration of the Code of Conduct text. We’d like to make it clear that
this part of the text was not derived from contributor covenant. This
section was written during the times of covid lockdowns and made a lot
of sense to include, with many people having limited contact with the
outside world. Thankfully we’re past the lockdown stages at most
places, still we believe it’s useful for people to reach out to us in
difficult situations even if there isn’t a clear code of conduct
violation.
[Code of Condcut]
<https://gist.github.com/Sudha247/ed049de0fd91d26f43777fb11ac0453f>
[strained situations]
<https://gist.github.com/Sudha247/ed049de0fd91d26f43777fb11ac0453f#strained-situations>
Scope
╌╌╌╌╌
As mentioned in the document, the Code of Conduct is currently
proposed to be enforced at:
• OCaml github org
• discuss.ocaml.org forum
• caml at inria.fr mailing list
• OCaml IRC
and other spaces managed by the OCaml development team and OCaml
Software Foundation.
Next steps
╌╌╌╌╌╌╌╌╌╌
Any comments and ideas regarding the text are appreciated. We kindly
request everyone to keep the discussions relevant to the proposed text
and OCaml community. If there are no strong objections, the Code of
Conduct will be enforced in the spaces listed above. The admins and
moderators of those spaces have kindly approved to the idea.
We’d very much appreciate more maintainers following suit and
implementing the Code of Conduct for their projects. It’s completely
up to the maintainers to decide to do so for their projects. The
maintainers can also choose to list the contact details of the Code of
Conduct committee, at the discretion of the committee members. We will
come back with more details on this process soon.
Happy inclusive camling, @Khady, @mseri, @rjbou, @c-cube, @pitag,
@sudha
multicodec, multibase, multihash and multihash-digestif
═══════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-multicodec-multibase-multihash-and-multihash-digestif/10686/1>
Patrick Ferris announced
────────────────────────
Happy to announce the initial release of four somewhat related
packages. They are all libraries falling under [multiformats], which
are
Self-describing values for Future-proofing. The
Multiformats Project is a collection of protocols which
aim to future-proof systems, today. They do this mainly by
enhancing format values with self-description. This allows
interoperability, protocol agility, and helps us avoid
lock in.
[multiformats] <https://multiformats.io>
Releases
╌╌╌╌╌╌╌╌
◊ Mutlicodec
[Multicodec] is a fairly simple package providing OCaml values and
types for the [multicodec]. This is an agreed upon mapping of integers
to protocols.
[Multicodec] <https://github.com/patricoferris/ocaml-multicodec>
[multicodec] <https://github.com/multiformats/multicodec>
◊ Multibase
[Multibase] provides self-identifying base encodings, so given a
multibase-encoded string, this library can tell you what the base
encoding was and if supported it will then decode the message. You can
of course also encode messages too, with the currently supported
encodings being Base32, Base58 and Base64.
[Multibase] <https://github.com/patricoferris/ocaml-multibase>
◊ Multihash and Multihash-digestif
[Multihash] provides _self-describing_ hash functions. The library
`multihash' takes a hash implementation and provides multihashes.
Multihash-digestif is multihash using [digestif] as an implementation.
[Multihash] <https://github.com/patricoferris/ocaml-multihash>
[digestif] <https://github.com/mirage/digestif>
◊ Use Case
One fun thing you can do is replace [Irmin]’s hash implementation
with Multihash.
┌────
│ let main () =
│ let open Lwt.Syntax in
│ let config = Irmin_mem.config () in
│ let* repo = Store.Repo.v config in
│ let* main = Store.main repo in
│ let* () = Store.set_exn ~info main [ "a" ] "Hello World" in
│ let* hash = Store.hash main [ "a" ] in
│ match hash with
│ | Some md ->
│ Format.printf "%a%!" Multihash_digestif.pp md;
│ Lwt.return_unit
│ | None -> assert false
│
│ let () = Lwt_main.run (main ())
└────
And this program prints
┌────
│ ident(sha2-256) length(32) digest(4a 2b 43 6f 2b 5a 16 b0 1e 3c e5 28 5e 88 b1 99
│ a9 a4 ae fd b1 e1 6a c8 31 c3 32 d4 92 c5 d1 57
│ )
└────
See [this gist for all of the details].
[Irmin] <https://github.com/mirage/irmin>
[this gist for all of the details]
<https://gist.github.com/patricoferris/c6cc8b638bdf3a32a0a183a6532cb94a>
Furture Work
╌╌╌╌╌╌╌╌╌╌╌╌
Two short term goals are:
1. Release [Content-addressed Identifiers (CID)]
2. Release [multiaddr]
Thanks for reading :))
[Content-addressed Identifiers (CID)]
<https://github.com/patricoferris/ocaml-cid>
[multiaddr]
<https://github.com/patricoferris/ocaml-multiformat/tree/main/src/multiaddr>
Timmy, a time and calendar library
══════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/rfc-timmy-a-time-and-calendar-library/10694/1>
mefyl announced
───────────────
Much of the work we do at Routine revolves around calendar features,
and over time an internal library emerged to address some common needs
in that regard. As we strive to open source most of our reusable code,
I’m pleased to submit the current 0.14.2 version of [Timmy] for
comments.
The philosophy and rationale for the library is [explained at length
in its root module documentation], so I will only sum up here that our
design goals and possible differentiator are a high level interface,
type safety, timezone safety, DST support and advanced calendar
features.
We’d be happy to collect feedback on the current API and usefulness of
the library before committing to a stable API.
[Timmy] <https://github.com/mefyl/timmy>
[explained at length in its root module documentation]
<https://mefyl.github.io/timmy/timmy/index.html>
Opam hacking afternoon for OCaml 5.0.0 on Friday 28
═══════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/opam-hacking-afternoon-for-ocaml-5-0-0-on-friday-28/10698/1>
octachron announced
───────────────────
With the newly released beta for OCaml 5.0.0, I will be spending more
time looking at updating opam packages to make them compatible with
OCaml 5.0 in the coming month.
As an experiment, I am planning to have an open hacking session for
opam packages on Friday afternoon starting at 16h00 Paris time. If
people are interested to join me to do some live opam package fixing,
you are very welcome.
Currently, I am planning to work with a manually updated
synchronization note at: <https://hackmd.io/@octachron/HkaQfvV4i> .
Antonio Nuno Monteiro then said
───────────────────────────────
We’ve been hard at work getting our [`nix-overlays'] package set ready
for OCaml 5.0 too!
Feel free to look into [this file] for specific Git commits / branches
and patches applied on top of many of the existing packages.
Our [exclusion list] for OCaml 5 has been getting smaller almost every
day since a few months ago.
[`nix-overlays'] <https://github.com/nix-ocaml/nix-overlays>
[this file]
<https://github.com/nix-ocaml/nix-overlays/blob/master/ocaml/default.nix>
[exclusion list]
<https://github.com/nix-ocaml/nix-overlays/blob/adf6cf1f60e451cb79a89b85c9596ed10d66d360/ci/filter.nix#L122-L159>
Other OCaml News
════════════════
>From the ocaml.org blog
───────────────────────
Here are links from many OCaml blogs aggregated at [the ocaml.org
blog].
• [Up-to-Date Online Documentation]
• [Porting Charrua-Unix and Rawlink to Eio]
• [OCaml’s Platform Installer Alpha Release]
• [OCaml 5 Beta Release]
[the ocaml.org blog] <https://ocaml.org/blog/>
[Up-to-Date Online Documentation]
<https://tarides.com/blog/2022-10-20-up-to-date-online-documentation>
[Porting Charrua-Unix and Rawlink to Eio]
<https://tarides.com/blog/2022-10-19-porting-charrua-unix-and-rawlink-to-eio>
[OCaml’s Platform Installer Alpha Release]
<https://tarides.com/blog/2022-10-18-ocaml-s-platform-installer-alpha-release>
[OCaml 5 Beta Release]
<https://tarides.com/blog/2022-10-17-ocaml-5-beta-release>
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/20221025/852a7f7d/attachment-0001.html>
More information about the caml-news-weekly
mailing list