From: Alan Schmitt <alan.schmitt@polytechnique.org>
To: "lwn" <lwn@lwn.net>, "cwn" <cwn@lists.idyll.org>, caml-list@inria.fr
Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News
Date: Tue, 09 Aug 2022 10:02:39 +0200 [thread overview]
Message-ID: <87tu6l974w.fsf@m4x.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 14524 bytes --]
Hello
Here is the latest OCaml Weekly News, for the week of August 02 to 09,
2022.
Table of Contents
─────────────────
pyml_bindgen: a CLI app to generate Python bindings directly from OCaml value specifications
Interesting OCaml Articles
Logs to a file (a primitive way)
Timedesc 0.8.0 - modern date time handling
OCaml website: Owl book not listed
Application-specific Improvements to the Ecosystem
Other OCaml News
Old CWN
pyml_bindgen: a CLI app to generate Python bindings directly from OCaml value specifications
════════════════════════════════════════════════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-pyml-bindgen-a-cli-app-to-generate-python-bindings-directly-from-ocaml-value-specifications/8786/8>
Ryan Moore announced
────────────────────
New release
╌╌╌╌╌╌╌╌╌╌╌
Version 0.4.1 is now available from [GitHub] and [Opam]. The [change
log] has more details.
[GitHub]
<https://github.com/mooreryan/ocaml_python_bindgen/releases/tag/0.4.1>
[Opam] <https://opam.ocaml.org/packages/pyml_bindgen/>
[change log]
<https://github.com/mooreryan/ocaml_python_bindgen/blob/main/CHANGELOG.md>
New stuff
╌╌╌╌╌╌╌╌╌
New attributes
┄┄┄┄┄┄┄┄┄┄┄┄┄┄
There is a new attribute you can use: `py_arg_name'. It allows you to
use different argument names on the OCaml side from those that are
used on the Python side.
One use case is for Python functions that have an argument name that
is the same as some reserved OCaml keyword. In this case, you can use
`py_arg_name' to map it to something else on the OCaml side.
┌────
│ val f : t -> method_:string -> unit -> string
│ [@@py_arg_name method_ method]
└────
The attribute is followed by two items, the first is the argument name
on the OCaml side, and the second is the argument name on the Python
side.
See the [attributes example] on GitHub for more info.
[attributes example]
<https://github.com/mooreryan/ocaml_python_bindgen/tree/main/examples/attributes>
Helper scripts
┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I added a couple of scripts to help in cases where you need to run
`pyml_bindgen' on a lot of different input files in one go. I have
been using them when writing bindings for bigger Python libraries, and
in cases where there are a lot of cyclic python classes to bind.
[This] example has more info about using the helper scripts.
[This]
<https://github.com/mooreryan/ocaml_python_bindgen/tree/main/examples/recursive_modules>
Other stuff
┄┄┄┄┄┄┄┄┄┄┄
• Added an option to split generated modules into `ml' and `mli'
files.
• Added a dev package for (hopefully) easier installation of
development dependencies.
Interesting OCaml Articles
══════════════════════════
Archive:
<https://discuss.ocaml.org/t/interesting-ocaml-articles/1867/99>
Calascibetta Romain announced
─────────────────────────────
Hi, I would like to share my recent article about GADTs and state
machines: [GADTs and state machine]
It's another introduction about GADTs and it explains a bit what I did
for [robur.io]. Eenjoy it and happy hacking!
[GADTs and state machine]
<https://blog.osau.re/articles/gadt_and_state_machine.html>
[robur.io] <https://robur.io>
Logs to a file (a primitive way)
════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/logs-to-a-file-a-primitive-way/10262/1>
🌍 Marcus Rohrmoser asked
─────────────────────────
I found
<https://github.com/oxidizing/sihl/blob/c6786f25424c1b9f40ce656e908bd31515f1cd09/sihl/src/core_log.ml#L18>
and wonder what a primitive way to log to a file would be.
I need to keep `stdout' clean and not show any log message under all
circumstances.
🌍 Marcus Rohrmoser later added
───────────────────────────────
I do a cgi and `stdout' is the response – logging has to go to a
separate file. Not even `stderr' as I want debug logs not to taint the
webserver error log in case. And I would like to funnel logging
through `Logs'.
Yawar Amin suggested and 🌍 Marcus Rohrmoser replied
────────────────────────────────────────────────────
I don't know about `logs' but it should be relatively easy
to keep an open file handle and print log messages there.
<https://opam.ocaml.org/packages/logs/> - I like the loglevel
approach. But maybe I will do without and pass around the channel,
yes.
Jean Michel suggested
─────────────────────
I believe logs support logging to a file via Format. See
<https://erratique.ch/software/logs/doc/Logs/index.html#val-format_reporter>
Shon also suggested
───────────────────
I’ve found logs very ergonomic and easy to work with. I tend to pull
it in via [Bos], which has a very nice interface to OS
interactions. Opening the `Bos_setup' module also does default logs
configuration, and I find all quite painless and pleasant.
[Bos] <https://erratique.ch/software/bos>
🌍 Marcus Rohrmoser said
────────────────────────
thanks @yawaramin @beajeanm @shonfeder, I took a [middle ground] and
went along the lines of <https://opam.ocaml.org/packages/logs/> (using
the loglevels and logging call style) but base writing almost directly
on [out_channel]. (I need a log rotation on top)
I was struggling with lost messages however – the logfile remained
empty until I flushed after each log message.
Is that known behaviour that writing to a channel (with
[Printf.fprintf]) doesn't necessarily end up in the file? Even when
closed quickly.
[middle ground]
<https://codeberg.org/mro/seppo/src/branch/develop/lib/logr.ml>
[out_channel] <https://ocaml.org/api/Stdlib.html#TYPEout_channel>
[Printf.fprintf] <https://ocaml.org/api/Printf.html>
UnixJunkie replied
──────────────────
You must Printf.printf with "%!" at the end of your format string, to
be sure that the log is flushed to file.
That's what I do in dolog: <https://github.com/UnixJunkie/dolog>
Timedesc 0.8.0 - modern date time handling
══════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-timedesc-0-8-0-modern-date-time-handling/10138/2>
Darren announced
────────────────
Tiny update: Timedesc 0.9.0 has been released, moving `sexplib'
dependency into `timedesc-sexp' and moved from `mparser' to `angstrom'
for some date time text parsers since angstrom is a strict necessity
for some binary (de)serialization already.
This overall means Timedesc is about as slim as it can get as a date
time handling lib, depending only on: `seq', `angstrom', `result', and
`ptime' (`ptime' is not a strict dependency, but it's nice to have
timedesc <-> ptime convertors).
Florent Monnier asked
─────────────────────
Is this a lib that targets to process dates and time in a
programmatically way? (this is what the provided example make me
think) Or is it also supposed to be used to print something readable
for a user else than a programmer?
If there is no end-user goal in this lib, please just ignore my
message, and sorry to make you lose some time.
In the other case if you consider printing for end users, it's maybe
worth to mention that there is the [DateLocale-ocaml] module that is
available and which provides the name for the months, and days for
more than 200 languages. It also provides abbreviated versions for
both months and days, which are often used.
The [ocaml-community/calendar] was not designed with localisation in
mind, it just does `String.sub d 0 3' to provide short names, which
will not work with languages that need UTF8.
There is this PR that is still waiting for some review since 2 years
to make it compatible with localisation:
[ocaml-community/calendar/pull/33].
(At least the patch is available there for someone who could be
interested.)
I don't know if it could interest some one but I see that the example
outputs a list of dates, that look like some kind of logs. In case
some one would like to visualise it in a way similar than the unix
command `cal' you can just create empty files where the file name
follows the pattern YYYY-MM-DD like for example "dir/2022-08-06.txt",
you will then be able to visualise it in the console with [detri].
[DateLocale-ocaml] <https://github.com/fccm/DateLocale-ocaml>
[ocaml-community/calendar] <https://github.com/ocaml-community/calendar>
[ocaml-community/calendar/pull/33]
<https://github.com/ocaml-community/calendar/pull/33/commits/9fcd7386e287f8841e503fb1d1e0547295aeb0c9>
[detri] <https://github.com/fccm/detri>
Darren replied
──────────────
Is this a lib that targets to process dates and time in a
programmatically way? (this is what the provided example
make me think) Or is it also supposed to be used to print
something readable for a user else than a programmer?
Development has been primarily focused on former, mostly because
solving it properly was already (very) involved.
Now that Timedesc has stabilised, the latter reads like a very nice
next TODO to match feature parity of other date time libs.
In the other case if you consider printing for end users,
it’s maybe worth to mention that there is the
[DateLocale-ocaml] module that is available and which
provides the name for the months, and days for more than
200 languages. It also provides abbreviated versions for
both months and days, which are often used.
Looks neat! I believe there have been requests of locale sensitive
pretty printing/conversion functions, so I definitely would be
interested in incorporating your work (if that was the intention).
I don’t know if it could interest some one but I see that
the example outputs a list of dates, that look like some
kind of logs. In case some one would like to visualise it
in a way similar than the unix command `cal` you can just
create empty files where the file name follows the pattern
YYYY-MM-DD like for example “dir/2022-08-06.txt”, you will
then be able to visualise it in the console with [detri].
I was interested in something like this for another small utility cmd
I've written, neat!
[DateLocale-ocaml] <https://github.com/fccm/DateLocale-ocaml>
[detri] <https://github.com/fccm/detri>
OCaml website: Owl book not listed
══════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ocaml-website-owl-book-not-listed/10274/1>
Andreas Poisel said
───────────────────
It would be nice to add [OCaml Scientific Computing] to the list on
<https://ocaml.org/books>.
This is a great book and it would be a shame not to promote it. Maybe
anyone responsible for the website reads this or can point me in the
right direction.
I'm not in any way affiliated with the authors of this book.
[OCaml Scientific Computing]
<https://link.springer.com/book/10.1007/978-3-030-97645-3>
Application-specific Improvements to the Ecosystem
══════════════════════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/application-specific-improvements-to-the-ecosystem/10223/49>
Deep in this thread, Kay-Uwe Kirstein said
──────────────────────────────────────────
Personally, I often use the monadic Result type together with a
polymorphic variant for the actual errors. This makes dealing with
errors from different "levels" of my software (library, command-line
tool, and GUI) quite comfortable (and type-safe!). @keleshev has
written a nice blog post on this:
<https://keleshev.com/composable-error-handling-in-ocaml> with a
recent follow up:
<https://keleshev.com/advanced-error-handling-in-ocaml>
Other OCaml News
════════════════
From the ocaml.org blog
───────────────────────
Here are links from many OCaml blogs aggregated at [the ocaml.org
blog].
• [Irmin in the Browser]
[the ocaml.org blog] <https://ocaml.org/blog/>
[Irmin in the Browser]
<https://tarides.com/blog/2022-08-02-irmin-in-the-browser>
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@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/>
[-- Attachment #2: Type: text/html, Size: 26625 bytes --]
next reply other threads:[~2022-08-09 8:02 UTC|newest]
Thread overview: 236+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-09 8:02 Alan Schmitt [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-04-15 9:51 Alan Schmitt
2025-04-08 13:14 Alan Schmitt
2025-04-01 9:12 Alan Schmitt
2025-03-25 8:06 Alan Schmitt
2025-03-18 10:18 Alan Schmitt
2025-03-11 15:00 Alan Schmitt
2025-03-04 14:01 Alan Schmitt
2025-02-25 10:36 Alan Schmitt
2025-02-18 14:33 Alan Schmitt
2025-02-11 7:17 Alan Schmitt
2025-02-04 12:05 Alan Schmitt
2025-01-28 13:24 Alan Schmitt
2025-01-21 15:47 Alan Schmitt
2025-01-14 8:20 Alan Schmitt
2025-01-07 17:26 Alan Schmitt
2024-12-31 8:03 Alan Schmitt
2024-12-24 8:55 Alan Schmitt
2024-12-17 13:05 Alan Schmitt
2024-12-10 13:48 Alan Schmitt
2024-12-03 14:44 Alan Schmitt
2024-11-26 8:30 Alan Schmitt
2024-11-19 6:52 Alan Schmitt
2024-11-12 15:00 Alan Schmitt
2024-11-05 13:22 Alan Schmitt
2024-10-29 13:30 Alan Schmitt
2024-10-22 12:42 Alan Schmitt
2024-10-15 13:31 Alan Schmitt
2024-10-08 10:56 Alan Schmitt
2024-10-01 13:37 Alan Schmitt
2024-09-24 13:18 Alan Schmitt
2024-09-17 14:02 Alan Schmitt
2024-09-10 13:55 Alan Schmitt
2024-09-03 8:24 Alan Schmitt
2024-08-27 9:02 Alan Schmitt
2024-08-20 9:29 Alan Schmitt
2024-08-13 13:21 Alan Schmitt
2024-08-06 9:00 Alan Schmitt
2024-07-30 13:26 Alan Schmitt
2024-07-23 13:30 Alan Schmitt
2024-07-16 6:24 Alan Schmitt
2024-07-09 9:19 Alan Schmitt
2024-07-02 7:30 Alan Schmitt
2024-06-25 13:58 Alan Schmitt
2024-06-18 13:05 Alan Schmitt
2024-06-11 15:04 Alan Schmitt
2024-06-04 13:26 Alan Schmitt
2024-05-28 9:07 Alan Schmitt
2024-05-21 13:07 Alan Schmitt
2024-05-14 13:25 Alan Schmitt
2024-05-07 7:30 Alan Schmitt
2024-04-30 7:22 Alan Schmitt
2024-04-23 12:17 Alan Schmitt
2024-04-16 12:00 Alan Schmitt
2024-04-09 9:15 Alan Schmitt
2024-04-02 14:31 Alan Schmitt
2024-03-26 6:32 Alan Schmitt
2024-03-19 15:09 Alan Schmitt
2024-03-12 10:31 Alan Schmitt
2024-03-05 14:50 Alan Schmitt
2024-02-27 13:53 Alan Schmitt
2024-02-20 9:12 Alan Schmitt
2024-02-13 8:42 Alan Schmitt
2024-02-06 15:14 Alan Schmitt
2024-01-30 14:16 Alan Schmitt
2024-01-23 9:45 Alan Schmitt
2024-01-16 10:01 Alan Schmitt
2024-01-09 13:40 Alan Schmitt
2024-01-02 8:59 Alan Schmitt
2023-12-26 10:12 Alan Schmitt
2023-12-19 10:10 Alan Schmitt
2023-12-12 10:20 Alan Schmitt
2023-12-05 10:13 Alan Schmitt
2023-11-28 9:09 Alan Schmitt
2023-11-21 7:47 Alan Schmitt
2023-11-14 13:42 Alan Schmitt
2023-11-07 10:31 Alan Schmitt
2023-10-31 10:43 Alan Schmitt
2023-10-24 9:17 Alan Schmitt
2023-10-17 7:46 Alan Schmitt
2023-10-10 7:48 Alan Schmitt
2023-10-03 13:00 Alan Schmitt
2023-09-19 8:54 Alan Schmitt
2023-09-12 13:21 Alan Schmitt
2023-09-05 9:00 Alan Schmitt
2023-08-29 13:04 Alan Schmitt
2023-08-22 9:20 Alan Schmitt
2023-08-15 16:33 Alan Schmitt
2023-08-08 8:53 Alan Schmitt
2023-08-01 7:13 Alan Schmitt
2023-07-25 8:45 Alan Schmitt
2023-07-11 8:45 Alan Schmitt
2023-07-04 9:18 Alan Schmitt
2023-06-27 8:38 Alan Schmitt
2023-06-20 9:52 Alan Schmitt
2023-06-13 7:09 Alan Schmitt
2023-06-06 14:22 Alan Schmitt
2023-05-30 15:43 Alan Schmitt
2023-05-23 9:41 Alan Schmitt
2023-05-16 13:05 Alan Schmitt
2023-05-09 11:49 Alan Schmitt
2023-05-02 8:01 Alan Schmitt
2023-04-25 9:25 Alan Schmitt
2023-04-18 8:50 Alan Schmitt
2023-04-11 12:41 Alan Schmitt
2023-04-04 8:45 Alan Schmitt
2023-03-28 7:21 Alan Schmitt
2023-03-21 10:07 Alan Schmitt
2023-03-14 9:52 Alan Schmitt
2023-03-07 9:02 Alan Schmitt
2023-02-28 14:38 Alan Schmitt
2023-02-21 10:19 Alan Schmitt
2023-02-14 8:12 Alan Schmitt
2023-02-07 8:16 Alan Schmitt
2023-01-31 6:44 Alan Schmitt
2023-01-24 8:57 Alan Schmitt
2023-01-17 8:37 Alan Schmitt
2022-11-29 14:53 Alan Schmitt
2022-09-27 7:17 Alan Schmitt
2022-09-20 14:01 Alan Schmitt
2022-09-13 8:40 Alan Schmitt
2022-08-23 8:06 Alan Schmitt
2022-08-16 8:51 Alan Schmitt
2022-08-02 9:51 Alan Schmitt
2022-07-26 17:54 Alan Schmitt
2022-07-19 8:58 Alan Schmitt
2022-07-12 7:59 Alan Schmitt
2022-07-05 7:42 Alan Schmitt
2022-06-28 7:37 Alan Schmitt
2022-06-21 8:06 Alan Schmitt
2022-06-14 9:29 Alan Schmitt
2022-06-07 10:15 Alan Schmitt
2022-05-31 12:29 Alan Schmitt
2022-05-24 8:04 Alan Schmitt
2022-05-17 7:12 Alan Schmitt
2022-05-10 12:30 Alan Schmitt
2022-05-03 9:11 Alan Schmitt
2022-04-26 6:44 Alan Schmitt
2022-04-19 5:34 Alan Schmitt
2022-04-12 8:10 Alan Schmitt
2022-04-05 11:50 Alan Schmitt
2022-03-29 7:42 Alan Schmitt
2022-03-22 13:01 Alan Schmitt
2022-03-15 9:59 Alan Schmitt
2022-03-01 13:54 Alan Schmitt
2022-02-22 12:43 Alan Schmitt
2022-02-08 13:16 Alan Schmitt
2022-02-01 13:00 Alan Schmitt
2022-01-25 12:44 Alan Schmitt
2022-01-11 8:20 Alan Schmitt
2022-01-04 7:56 Alan Schmitt
2021-12-28 8:59 Alan Schmitt
2021-12-21 9:11 Alan Schmitt
2021-12-14 11:02 Alan Schmitt
2021-11-30 10:51 Alan Schmitt
2021-11-16 8:41 Alan Schmitt
2021-11-09 10:08 Alan Schmitt
2021-11-02 8:50 Alan Schmitt
2021-10-19 8:23 Alan Schmitt
2021-09-28 6:37 Alan Schmitt
2021-09-21 9:09 Alan Schmitt
2021-09-07 13:23 Alan Schmitt
2021-08-24 13:44 Alan Schmitt
2021-08-17 6:24 Alan Schmitt
2021-08-10 16:47 Alan Schmitt
2021-07-27 8:54 Alan Schmitt
2021-07-20 12:58 Alan Schmitt
2021-07-06 12:33 Alan Schmitt
2021-06-29 12:24 Alan Schmitt
2021-06-22 9:04 Alan Schmitt
2021-06-01 9:23 Alan Schmitt
2021-05-25 7:30 Alan Schmitt
2021-05-11 14:47 Alan Schmitt
2021-05-04 8:57 Alan Schmitt
2021-04-27 14:26 Alan Schmitt
2021-04-20 9:07 Alan Schmitt
2021-04-06 9:42 Alan Schmitt
2021-03-30 14:55 Alan Schmitt
2021-03-23 9:05 Alan Schmitt
2021-03-16 10:31 Alan Schmitt
2021-03-09 10:58 Alan Schmitt
2021-02-23 9:51 Alan Schmitt
2021-02-16 13:53 Alan Schmitt
2021-02-02 13:56 Alan Schmitt
2021-01-26 13:25 Alan Schmitt
2021-01-19 14:28 Alan Schmitt
2021-01-12 9:47 Alan Schmitt
2021-01-05 11:22 Alan Schmitt
2020-12-29 9:59 Alan Schmitt
2020-12-22 8:48 Alan Schmitt
2020-12-15 9:51 Alan Schmitt
2020-12-01 8:54 Alan Schmitt
2020-11-03 15:15 Alan Schmitt
2020-10-27 8:43 Alan Schmitt
2020-10-20 8:15 Alan Schmitt
2020-10-06 7:22 Alan Schmitt
2020-09-29 7:02 Alan Schmitt
2020-09-22 7:27 Alan Schmitt
2020-09-08 13:11 Alan Schmitt
2020-09-01 7:55 Alan Schmitt
2020-08-18 7:25 Alan Schmitt
2020-07-28 16:57 Alan Schmitt
2020-07-21 14:42 Alan Schmitt
2020-07-14 9:54 Alan Schmitt
2020-07-07 10:04 Alan Schmitt
2020-06-30 7:00 Alan Schmitt
2020-06-16 8:36 Alan Schmitt
2020-06-09 8:28 Alan Schmitt
2020-05-19 9:52 Alan Schmitt
2020-05-12 7:45 Alan Schmitt
2020-05-05 7:45 Alan Schmitt
2020-04-28 12:44 Alan Schmitt
2020-04-21 8:58 Alan Schmitt
2020-04-14 7:28 Alan Schmitt
2020-04-07 7:51 Alan Schmitt
2020-03-31 9:54 Alan Schmitt
2020-03-24 9:31 Alan Schmitt
2020-03-17 11:04 Alan Schmitt
2020-03-10 14:28 Alan Schmitt
2020-03-03 8:00 Alan Schmitt
2020-02-25 8:51 Alan Schmitt
2020-02-18 8:18 Alan Schmitt
2020-02-04 8:47 Alan Schmitt
2020-01-28 10:53 Alan Schmitt
2020-01-21 14:08 Alan Schmitt
2020-01-14 14:16 Alan Schmitt
2020-01-07 13:43 Alan Schmitt
2019-12-31 9:18 Alan Schmitt
2019-12-17 8:52 Alan Schmitt
2019-12-10 8:21 Alan Schmitt
2019-12-03 15:42 Alan Schmitt
2019-11-26 8:33 Alan Schmitt
2019-11-12 13:21 Alan Schmitt
2019-11-05 6:55 Alan Schmitt
2019-10-15 7:28 Alan Schmitt
2019-09-03 7:35 Alan Schmitt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87tu6l974w.fsf@m4x.org \
--to=alan.schmitt@polytechnique.org \
--cc=caml-list@inria.fr \
--cc=cwn@lists.idyll.org \
--cc=lwn@lwn.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox