caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Yotam Barnoy <yotambarnoy@gmail.com>
To: Ocaml Mailing List <caml-list@inria.fr>
Subject: [Caml-list] Language feature stability levels
Date: Wed, 8 Oct 2014 11:39:41 -0400	[thread overview]
Message-ID: <CAN6ygO==ZepF-NpE-CyrbevU+2Xvjs0PaJWBVBMkvK6KgGEOZQ@mail.gmail.com> (raw)

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

One thing I've noticed over my time with ocaml and observing its
development, is that there's some confusion and difficulty with regard to
the introduction of new features. Some features are introduced with an
obscure note in the manual stating that they could change in future ocaml
versions. Others are introduced rapidly in one version and then cause
backwards-compatibility problems for future language expansions. Still
others take very long to integrate into the language. I'm wondering if it
makes sense to make levels of integration into the language more official,
and in the process, make it easier to introduce new features while giving
users feedback about feature stability.

The basic problem, as I see it, is that when features are written into the
language, there's no good way for the authors to know how much these
features will be used by programmers, or whether they'll cause
complications in existing or future code. This gap between feature
introduction and feature testing isn't currently accounted for in ocaml's
development cycles.

On the other hand, some features that would benefit from quick introduction
to the users (as well as testing) get stuck in development hell because the
language developers are overly conservative, trying to puzzle out whether
the feature will be useful and consistent many years in the future, without
the advantage of existing long-term user testing.

Haskell has language extensions which, despite some negative effects, such
as language bloat and bad backwards-compatibility, allow haskell to develop
very quickly. A new feature is introduced under a language extension, which
must be activated on a per-file basis. If people like it, the extension
will survive to live in future versions. If not enough people use it or the
feature is shown to be ineffective, the feature can be pruned out in future
versions. The overall result is that haskell is very nimble, developing at
a rapid clip and easily satiating user demands.

While I'm not suggesting playing it fast and loose like haskell, perhaps it
makes sense to have stages of integration into the language. I suggest 3
stages, borrowing the terminology from software release cycles (but
perfectly willing to use other terminology or number of stages). An alpha
feature is one that was just introduced, and is still likely to change in
future versions. An alpha feature that has survived enough ocaml version
iterations and seems useful and complete can move into beta level. I
foresee features spending a long time in the beta state, which also
guarantees the users a further level of stability over alpha features. At
the same time, if ocaml users find little intrerest in maintaining certain
beta features, they may be changed (slowly) or even demoted to alpha level
(with sufficient notification). Graduating beta level means that the
feature is fully incorporated into the language, and cannot change without
serious consideration and *many* notifications to the users. Preferably,
release-level language features will never be changed as is, but instead
require being moved down to beta status first (given sufficient user
notification).

Some examples of possible current alpha features are modular implicits (as
soon as they're ready to integrate into the code, but since they're alpha
they can remain fairly fluid), immutable strings and the Bytes module, as
well as extension types. Possible beta features could be GADTs(?) and
first-class modules.

Thoughts?

-Yotam

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

             reply	other threads:[~2014-10-08 15:40 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-08 15:39 Yotam Barnoy [this message]
2014-10-08 16:35 ` Milan Stanojević
2014-10-08 16:45   ` Yotam Barnoy
2014-10-08 18:26     ` Drup

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='CAN6ygO==ZepF-NpE-CyrbevU+2Xvjs0PaJWBVBMkvK6KgGEOZQ@mail.gmail.com' \
    --to=yotambarnoy@gmail.com \
    --cc=caml-list@inria.fr \
    /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;
as well as URLs for NNTP newsgroup(s).