[m-dev.] shims
Paul Bone
paul at bone.id.au
Tue Sep 16 10:43:05 AEST 2014
On Mon, Sep 15, 2014 at 03:25:25PM +1000, Mark Brown wrote:
> On Mon, Sep 15, 2014 at 12:05 PM, Paul Bone <paul at bone.id.au> wrote:
> > Another option, although I think this is less acheiveable in the short term,
> > is to require that all libraries provide semantic versioning, and that when
> > you :- import_module you may specify a specific version, or use conditional
> > compilation that's predicated on a library's version.
> >
> > :- if.
> > :- import_module set ver(1.1).
> >
> > ... use the new feature in set 1.1
> > :- else if.
> > :- import_module set ver(1.0).
> >
> > ... write slower/longer code due to the unavailable feature.
> > :- else.
> > :- end if.
> >
> >
> > About semantic versioning: http://semver.org/
> >
>
>
> This could already be done with the above proposal. The library author
> exports some dummy definitions, e.g. for version 2.3:
>
> :- type version_major_2.
> :- type version_minor_1.
> :- type version_minor_2.
> :- type version_minor_3.
>
Eww. Well I understand that this would be possible in this way but if I
actually expect people to use it I think a nicer syntax would be best.
Such as making it an (optional) part of module declrations.
:- module my_module (2.3.1).
> (You keep the earlier minor versions since these represent backwards
> compatible changes, but you remove the earlier major version.)
>
> Then the library user writes:
>
> :- import_module set.
> :- if.
> :- type set.version_major_2.
> :- then.
> :- if.
> :- type set.version_minor_3.
> :- then.
> % Use features added in 2.3.
> :- else.
> % Use features present in 2.0.
> :- end_if.
> :- else.
> % Error if we don't have version 2.x.
> :- end_if.
>
> The version names don't have to follow any particular scheme.
>
> If conditional compilation is adopted, it might make sense to allow items like:
>
> :- feature feature_name.
>
> which do nothing except add declare a name, but you could test for it
> in the above fashion, and could even extend pragma require_feature_set
> to look for these module qualified names.
>
> Another useful item would be error/1, to provide a detailed compiler
> message for unsupported branches.
Yes, error would be useful.
--
Paul Bone
More information about the developers
mailing list