what does 'deprecated' mean with respect to "bare structure types"?

Luís Oliveira loliveira at common-lisp.net
Mon Jun 10 20:41:53 UTC 2013


On Mon, Jun 10, 2013 at 8:51 PM, james anderson <james.anderson at setf.de> wrote:
> it appears that the semantics of the elementary form is unambiguously known and supported in all contexts, that there is no indication of impending changes which would change this situation, and that, given these circumstances, the deprecation warning is gratuitous and can actually be ignored.
>
> is this a true comprehension of the situation?

Indeed, we've done our best not to break backwards compatibility. So,
if you're pressed for time, you can safely ignore the warnings for
now.

We probably overlooked the annoyance that the style-warning may be
causing. You can muffle the warning in the following less-than-ideal
way:

  (handler-bind
      ((alexandria:simple-style-warning
         (lambda (warning)
           (when (alexandria:starts-with-subseq
                  "bare references to struct types are deprecated."
                  (simple-condition-format-control warning))
             (muffle-warning warning)))))
    (load-your-ffi-code-here))

[ Hooking this up with ASDF is left as an exercise for the reader. :-) ]


> if i have overlooked or disregarded some key aspect of this change, please advise.

The thing is, given a struct foo, the FOO type means different things
in different contexts. Sometimes it has pass-by-reference semantics,
other times it has pass-by-value semantics. This was less of an issue
when each context only had to handle one of the semantics, but now
that both are supported (thanks to cffi-libffi), we have to
disambiguate.

There were two reasons for deprecating the bare struct type, then.
>From the implementation point of view, the disambiguation code is
intrusive and error-prone so we'd like to remove it as soon as
possible. From the API point of view, the bare struct type became even
more schizophrenic.

There's no scheduled date for the removal of the bare struct type, but
it won't be removed without a proper and timely warning.

Cheers,

--
Luís Oliveira
http://r42.eu/~luis/



More information about the cffi-devel mailing list