Here a "doodle", please fill in by Friday 5PM Paris time, so that I can announce the date here before W.E.:
https://framadate.org/NCcsXegnmPy57Xwu
CC @Paolo Giarrusso (I don't know how many colleagues of yours read this stream, if they don't please tag them here)
Cc @Gregory Malecha @Gordon Stewart @David Swasey @David Swasey
I forgot to announce the best date, it is "Thursday, March 3, 2022 - 2PM (Paris time)"
(4PM has the same votes, but I prefer 2PM, if you don't mind)
It would be nice if a kernel maintainer could attend (CC @Gaëtan Gilbert @Maxime Dénès @Pierre-Marie Pédrot ).
I should be there.
https://rendez-vous.renater.fr/coq-engineering
not going to participate in the WG, but I hope I can make one comment: please distinguish between interfaces and their semantics on one hand, and implementation aspects such as separate compilation on the other. In my view, the title of CEP 62 is really misleading
@Karl Palmskog "separate compilation" is a semantic concept by Cardelli; even if arguably it's a questionable name, it's standard.
SML modules/functors/signatures is to me the standard of any kind of interfaces, and SML '97 does to my knowledge not even specify anything about compilation.
@Karl Palmskog well, http://portal.acm.org/citation.cfm?doid=1159876.1159883 adds separate compilation to Standard ML
authors include both "core SML people" (Karl Crary, Robert Harper), and David Swasey who's coauthoring the CEP
Here the toy: https://github.com/gares/coq-defunctor
in later discussion, we realized that using opaque ascription (as in Module A : A.interface.
) is not strictly necessary, since clients aren’t importing the implementation files. Using Module A <: A.interface.
gets closer to the opt-in ascription that @Jason Gross was suggesting.
The downside is that Cardelli's "separate compilation" guarantee, or rather the "compositional typechecking" one, is only as good as the import discipline. C++ friend declaration arguably have better ergonomics.
Enrico Tassi has marked this topic as resolved.
Enrico Tassi has marked this topic as unresolved.
Paolo Giarrusso said:
in later discussion, we realized that using opaque ascription (as in
Module A : A.interface.
) is not strictly necessary, since clients aren’t importing the implementation files. UsingModule A <: A.interface.
gets closer to the opt-in ascription that Jason Gross was suggesting.
Indeed. A single file coud implement even two interfaces in one go. This suggests that the link command needs to address more than a 1:1 relation
You can already combine module types via Include/<+, and this is somewhat extensively tested by Coq's numeric library.
But in general, even if I argued for automatically doing the translation or enforcing it, there are indeed cases needing a more flexible "source language"; so we should just use Link directly, and encode any rules we'd like in a linter.
linting infrastructure is also needed, but it'd be a separate discussion
Depending on what you call linter, my current work on having a separate parsing phase for the vernacular language may help. Namely if the linting is done on static criteria that does not require execution.
Last updated: Sep 09 2024 at 05:02 UTC