Giter Club home page Giter Club logo

Comments (13)

kinke avatar kinke commented on June 16, 2024 1

It doesn't have anything to do with the array syntax, it's just an invalid non-constant initializer for a global as expected. I've added a full example in https://issues.dlang.org/show_bug.cgi?id=24469#c2. And it's actually a DMD regression (since v2.079).

from ldc.

MrcSnm avatar MrcSnm commented on June 16, 2024 1

Okay, I'll put there, thanks for the help :)

from ldc.

MrcSnm avatar MrcSnm commented on June 16, 2024

@kinke Some update on that: Although it compiles with DMD, it starts crashing randomly on a later step function return... Maybe this have an alternative?

from ldc.

kinke avatar kinke commented on June 16, 2024

Well in that case LDC might be doing the right thing, contrary to DMD. ;) - Your code somehow requires the delegate as a static constant, as part of an initializer for a global or so. And that cannot work if the delegate uses an outer context, e.g., the outer gemName parameter in your snippet, as that context is obviously dynamic.

from ldc.

kinke avatar kinke commented on June 16, 2024

You can use -vv when compiling with LDC, to see what it's doing right before the error; that could help.

from ldc.

MrcSnm avatar MrcSnm commented on June 16, 2024

Well in that case LDC might be doing the right thing, contrary to DMD. ;) - Your code somehow requires the delegate as a static constant, as part of an initializer for a global or so. And that cannot work if the delegate uses an outer context, e.g., the outer gemName parameter in your snippet, as that context is obviously dynamic.

I opened an issue on DMD: https://issues.dlang.org/show_bug.cgi?id=24469

What is a static constant delegate? I'm pretty sure I'm not using any kind of fancy keywords with delegates. Maybe is it possible to create a better error message like showing why have it turned to be required to be static constant?

I'll test with -vv and comment again

from ldc.

MrcSnm avatar MrcSnm commented on June 16, 2024

@kinke I was able to reduce the error after looking in all my code:

struct ExistenceChecker
{
    ///Optional. 
    bool delegate() checkExistenceFn;

}
ExistenceChecker makeExistenceChecker(string gemName)
{
    return ExistenceChecker(()
    {
        return executeShell("gem list | grep "~gemName).status == 0;
    });
}

ExistenceChecker[] chks = [
    makeExistenceChecker("test")
];

from ldc.

MrcSnm avatar MrcSnm commented on June 16, 2024

Maybe is it possible to put in the error that because of the array syntax there, it can't access the outer variables?

from ldc.

MrcSnm avatar MrcSnm commented on June 16, 2024

I'll put this as a feature request for showing which part requested for static initialization of a non constant delegate

from ldc.

kinke avatar kinke commented on June 16, 2024

I suggest you ask for better diagnostics (agreed; what would IMO be very helpful is knowing where the problematic initializer is) upstream, not here.

from ldc.

kinke avatar kinke commented on June 16, 2024

Wrt. how to work around this - create the array at runtime, not at compile-time, in a module ctor or so.

from ldc.

MrcSnm avatar MrcSnm commented on June 16, 2024

@kinke Btw I was checking that:

int delegate() makeClosure(int start)
{
    return (){return start+1;};
}

auto b = makeClosure(1);

void main()
{
}

You can see it shows from where it comes from. Does that also requires to be asked on upstream? Because the upstream doesn't even show an error 🤔

from ldc.

kinke avatar kinke commented on June 16, 2024

With run.dlang.io's current DMD v2.105, it shows the same CTFE error as LDC for your example above, nicely including the initializer line:

onlineapp.d(3): Error: closures are not yet supported in CTFE
onlineapp.d(6):        called from here: `makeClosure(1)`

This doesn't come from LDC directly, but the frontend's CTFE interpreter. The original error with the struct container seems to slip through there, and that's most likely where the fix should land (so in the DMD frontend, that's why I asked for the upstream issue).

from ldc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.