On 5 Apr 2014 21:31, "Iain Buclaw" <ibuc...@gdcproject.org> wrote:
>
> On 5 Apr 2014 19:55, "Johannes Pfau" <nos...@example.com> wrote:
> >
> > Am Sun, 6 Apr 2014 02:51:28 +1000
> > schrieb "Daniel Murphy" <yebbliesnos...@gmail.com>:
> >
> > > "Johannes Pfau"  wrote in message
> > > news:lhp8h4$2j38$1...@digitalmars.com...
> > >
> > > > But we'd want this to work/inline nevertheless, right?:
> > > > ------------
> > > > void test(const(char)[] a)
> > > > {
> > > > }
> > > >
> > > > char[] abc;
> > > > test(abc);
> > > > ------------
> > > >
> > > > Then we still need to tell GCC that const(char)[] is a variant of
> > > > char[] or it won't inline.
> > >
> > > Can you just strip all const/immutable/etc when the type is passed to
> > > the backend?
> > >
> >
> > This would impact debug info which is also emitted by the backend. GCC
> > supports 'variants' of types which means only different qualifiers but
> > the same apart from type qualifiers. We just need to set the variant
> > information correctly (e.g. const(char)[] should be recognized as a
> > variant of char[])
>
> Right, and not having const applied to the type means that gcc might miss
an optimisation opportunity.
>
> In this case however I think that parameters declared in should not be
mapped to C-style 'const'.  The 'in' keyword is close, but something other.
FORTRAN for instance has intent attributes.

---
intent(in) - yes, pass by value, so changes of this are not reflected in
outside code.

intent(out) - pass somehow by reference, in fact a return argument

intent(inout) - pass by reference, normal in/out parameter.
---

These are interesting concepts that allows more aggressive optimisation
than using C/C++ const/ref type variants.  I think gdc should go down this
route, but I've never experimented too much round this area.

Reply via email to