caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Determining compatibility for evolving programming interfaces
@ 2021-01-02  7:50 Markus Elfring
  2021-01-04  6:05 ` Malcolm Matalka
  2021-01-04 16:07 ` Yawar Amin
  0 siblings, 2 replies; 4+ messages in thread
From: Markus Elfring @ 2021-01-02  7:50 UTC (permalink / raw)
  To: caml-list

Hello,

OCaml is also an instance of a programming language where type inference belongs
to core functionality. The usage of various data types will evolve in several
programming interfaces.

* How do you think about to check if API revisions are still compatible there?

* Which kind of variations can be occasionally tolerated in interface descriptions?


I would appreciate your advices.

Regards,
Markus

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] Determining compatibility for evolving programming interfaces
  2021-01-02  7:50 [Caml-list] Determining compatibility for evolving programming interfaces Markus Elfring
@ 2021-01-04  6:05 ` Malcolm Matalka
  2021-01-04  7:59   ` Fabrice Le Fessant
  2021-01-04 16:07 ` Yawar Amin
  1 sibling, 1 reply; 4+ messages in thread
From: Malcolm Matalka @ 2021-01-04  6:05 UTC (permalink / raw)
  To: Markus Elfring; +Cc: caml-list


Markus Elfring <Markus.Elfring@web.de> writes:

> Hello,
>
> OCaml is also an instance of a programming language where type inference belongs
> to core functionality. The usage of various data types will evolve in several
> programming interfaces.
>
> * How do you think about to check if API revisions are still
> compatible there?

IME, this is really up to the author and I don't know if there is a
single correct answer.  Usually people define it as if, between
versions, the function does the same thing given the same inputs.  The
common question is: what about bug fixes?  Whether or not the fix is to
document the bug fix because people depend on it or break it is up to
the developer.

>
> * Which kind of variations can be occasionally tolerated in interface
> descriptions?

From a technical perspective, the following are safe:

- Adding optional parameters

- Supporting more polymorphic variant types.

- Returning fewer polymorphic variant types.

- Probably similar with objects but I don't have much experience with
  objects.

From a human perspective, I tend to be OK with breaking changes if the
cause a compilation failure, that way the developer is forced to
understand the change and update it.  If an interface is sufficiently
changed, I might just make a new library (library2) that implements the
change, especially if the core functionality is staying the same and I'm
mostly changing the feel of the library.  That's also nice if you're
comparing two implementations and want to have them side-by-side.

I, personally, find semantic versioning to be not very useful because,
at the end of the day, it requires humans to make decisions about if
their changes fit into the various categories of change, and by our
nature we don't like to increment the major version for some reason.
I've come across numerous libraries in opam that break even compiling
despite not changing the major.

>
>
> I would appreciate your advices.
>
> Regards,
> Markus

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] Determining compatibility for evolving programming interfaces
  2021-01-04  6:05 ` Malcolm Matalka
@ 2021-01-04  7:59   ` Fabrice Le Fessant
  0 siblings, 0 replies; 4+ messages in thread
From: Fabrice Le Fessant @ 2021-01-04  7:59 UTC (permalink / raw)
  To: Malcolm Matalka; +Cc: Markus Elfring, Ocaml Mailing List

Hi,

   In a few libraries I have been involved recently in the
development, we decided to export the interface under a module `V1`,
with the principle that we shouldn't make incompatible changes to V1,
or switch to a new interface V2, keeping V1 as it was. Then, the user
can use `open Library.V1` to access the interface and have more
guarantees that it will not break too often in the future. As Malcom
wrote, we assume that some changes in the interface are ok without
changing the version, like adding an optional argument or a field in a
record, though it is possible for such changes to break other packages
(if the function is passed as an argument for example, or if
warn-error is enabled). For now, it is just an experiment, made also
possible by the fact that these libraries are "one-module" libraries,
and we will see in the future if it was a good idea or not.

--
Fabrice




On Mon, Jan 4, 2021 at 7:05 AM Malcolm Matalka <mmatalka@gmail.com> wrote:
>
>
> Markus Elfring <Markus.Elfring@web.de> writes:
>
> > Hello,
> >
> > OCaml is also an instance of a programming language where type inference belongs
> > to core functionality. The usage of various data types will evolve in several
> > programming interfaces.
> >
> > * How do you think about to check if API revisions are still
> > compatible there?
>
> IME, this is really up to the author and I don't know if there is a
> single correct answer.  Usually people define it as if, between
> versions, the function does the same thing given the same inputs.  The
> common question is: what about bug fixes?  Whether or not the fix is to
> document the bug fix because people depend on it or break it is up to
> the developer.
>
> >
> > * Which kind of variations can be occasionally tolerated in interface
> > descriptions?
>
> From a technical perspective, the following are safe:
>
> - Adding optional parameters
>
> - Supporting more polymorphic variant types.
>
> - Returning fewer polymorphic variant types.
>
> - Probably similar with objects but I don't have much experience with
>   objects.
>
> From a human perspective, I tend to be OK with breaking changes if the
> cause a compilation failure, that way the developer is forced to
> understand the change and update it.  If an interface is sufficiently
> changed, I might just make a new library (library2) that implements the
> change, especially if the core functionality is staying the same and I'm
> mostly changing the feel of the library.  That's also nice if you're
> comparing two implementations and want to have them side-by-side.
>
> I, personally, find semantic versioning to be not very useful because,
> at the end of the day, it requires humans to make decisions about if
> their changes fit into the various categories of change, and by our
> nature we don't like to increment the major version for some reason.
> I've come across numerous libraries in opam that break even compiling
> despite not changing the major.
>
> >
> >
> > I would appreciate your advices.
> >
> > Regards,
> > Markus

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] Determining compatibility for evolving programming interfaces
  2021-01-02  7:50 [Caml-list] Determining compatibility for evolving programming interfaces Markus Elfring
  2021-01-04  6:05 ` Malcolm Matalka
@ 2021-01-04 16:07 ` Yawar Amin
  1 sibling, 0 replies; 4+ messages in thread
From: Yawar Amin @ 2021-01-04 16:07 UTC (permalink / raw)
  To: Markus Elfring; +Cc: Ocaml Mailing List

[-- Attachment #1: Type: text/plain, Size: 850 bytes --]

In general this is very difficult, because of 'module type of' and
functors. Almost any change can be a breaking change. If we pretend that
those two don't exist then we can make a modest set of guarantees. See
https://inbox.ocaml.org/caml-list/71ff7d61-6899-9b05-4c01-3984d47698ca@cea.fr/t/#u
for
more on this.

Regards,

Yawar

On Sat, Jan 2, 2021 at 2:51 AM Markus Elfring <Markus.Elfring@web.de> wrote:

> Hello,
>
> OCaml is also an instance of a programming language where type inference
> belongs
> to core functionality. The usage of various data types will evolve in
> several
> programming interfaces.
>
> * How do you think about to check if API revisions are still compatible
> there?
>
> * Which kind of variations can be occasionally tolerated in interface
> descriptions?
>
>
> I would appreciate your advices.
>
> Regards,
> Markus
>

[-- Attachment #2: Type: text/html, Size: 1331 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-01-04 16:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-02  7:50 [Caml-list] Determining compatibility for evolving programming interfaces Markus Elfring
2021-01-04  6:05 ` Malcolm Matalka
2021-01-04  7:59   ` Fabrice Le Fessant
2021-01-04 16:07 ` Yawar Amin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).