May 14, 2018
On Sunday, 13 May 2018 at 16:23:49 UTC, Nikos wrote:
> I'm trying to wrap drepl (https://github.com/dlang-community/drepl)
>
> My dub.sdl files is
>
>>import autowrap.python;
>>mixin(
>>    wrapAll(
>>        LibraryName("drepl"),
>>        Modules("drepl.interpreter"),
>>    )
>>);
>
> I also flagged `export` the interpreter function
>
>>export Interpreter!Engine interpreter(Engine)(return scope Engine e) if (isEngine!Engine)
>>{
>>    // workaround Issue 18540
>>    return Interpreter!Engine(() @trusted { return move(e); }());
>>}
>
> I build the library with python35, but when I import it from python idle, I cannot access the `interpreter` function at all.
> I have the feeling I miss something essential here, but I don't know what it is.
> Any ideas?

It won't wrap a templated type or function.  You will have to make a little shim that instantiates the templated function with a particular type.


May 14, 2018
On Sunday, 13 May 2018 at 16:23:49 UTC, Nikos wrote:
> I'm trying to wrap drepl (https://github.com/dlang-community/drepl)
>
> My dub.sdl files is
>
>>import autowrap.python;
>>mixin(
>>    wrapAll(
>>        LibraryName("drepl"),
>>        Modules("drepl.interpreter"),
>>    )
>>);
>
> I also flagged `export` the interpreter function
>
>>export Interpreter!Engine interpreter(Engine)(return scope Engine e) if (isEngine!Engine)
>>{
>>    // workaround Issue 18540
>>    return Interpreter!Engine(() @trusted { return move(e); }());
>>}
>
> I build the library with python35, but when I import it from python idle, I cannot access the `interpreter` function at all.
> I have the feeling I miss something essential here, but I don't know what it is.
> Any ideas?

Eg turn this into a function and try wrapping this instead:

    auto intp = interpreter(dmdEngine());



June 24, 2018
>
> Eg turn this into a function and try wrapping this instead:
>
>     auto intp = interpreter(dmdEngine());

Thanks for your help. I'm doing this in my spare time which is, unfortunately, not much.
I did what you said

> export {
>     auto intp = interpreter(echoEngine);
> }


but when I import drepl from python idle I still can access intp.


July 29, 2018
Ok, I made a stupid mistake. It works now. Thanks a lot!
July 29, 2018
>
> Eg turn this into a function and try wrapping this instead:
>
>     auto intp = interpreter(dmdEngine());

Actually, I manage to export the `interpret` method

> export:
>     auto intp(char[] txt) {
>         return interpreter(dmdEngine()).interpret(txt);
>     }

and tested it in ipython successfully.

But when I try to export the whole dmdEngine

> export:
>
>    auto engine(char[] txt) {
>            return interpreter(dmdEngine());
>    }

it complains about copying Interpreter!(DMDEngine).Interpreter

> ../../../.dub/packages/pyd-master/pyd/infrastructure/pyd/make_object.d(249,30): Error: struct drepl.interpreter.Interpreter!(DMDEngine).Interpreter is not copyable because it is annotated with @disable

I removed @disable, but then complained about accessing the members `_engine` and `_incomplete` in Interpreter (https://github.com/dlang-community/drepl/blob/master/src/drepl/interpreter.d#L147-L148)

> ../../../.dub/packages/pyd-master/pyd/infrastructure/pyd/struct_wrap.d-mixin-56(56,15): Deprecation: std.array.Appender!(char[]).Appender._data is not visible from module ../../../.dub/packages/pyd-master/pyd/infrastructure/pyd/struct_wrap.d-mixin-56(56,15): Error: struct std.array.Appender!(char[]).Appender member _data is not accessible

After I made those public, it complained about `Appender`

> ../../../.dub/packages/pyd-master/pyd/infrastructure/pyd/struct_wrap.d-mixin-56(56,15): Deprecation: std.array.Appender!(char[]).Appender._data is not visible from module
> ../../../.dub/packages/pyd-master/pyd/infrastructure/pyd/struct_wrap.d-mixin-56(56,15): Error: struct std.array.Appender!(char[]).Appender member _data is not accessible

Is there something I can do here or would it better to talk to the Drepl guys?

Thank you
July 31, 2018
On Sunday, 29 July 2018 at 18:14:31 UTC, Nikos wrote:
> But when I try to export the whole dmdEngine
>
>> export:
>>
>>    auto engine(char[] txt) {
>>            return interpreter(dmdEngine());
>>    }
>


Can you export an instance of `interpreter(dmdEngine())`?

e.g.

__gshared auto dmdi = interpreter(dmdEngine());

export ref dmd()
{
    return dmdi;
}

or if that doesn't work, proxy it

__gshared auto dmdi = interpreter(dmdEngine());

struct Dmd
{
    mixin Proxy!dmdi;
}
export auto dmd()
{
    Dmd d;
    return d;
}

That is pretty much required if you want to maintain state across.

Also I'm working on a D kernel for Jupyter notebook which should be done soon.
July 31, 2018
On Tuesday, 31 July 2018 at 09:09:11 UTC, Nicholas Wilson wrote:
> [snip]
>
> Also I'm working on a D kernel for Jupyter notebook which should be done soon.

Excellent.
August 05, 2018
On Tuesday, 31 July 2018 at 09:09:11 UTC, Nicholas Wilson wrote:
> On Sunday, 29 July 2018 at 18:14:31 UTC, Nikos wrote:
>> But when I try to export the whole dmdEngine
>>
>>> export:
>>>
>>>    auto engine(char[] txt) {
>>>            return interpreter(dmdEngine());
>>>    }
>>
>
>
> Can you export an instance of `interpreter(dmdEngine())`?
>
> e.g.
>
> __gshared auto dmdi = interpreter(dmdEngine());
>
> export ref dmd()
> {
>     return dmdi;
> }
>
> or if that doesn't work, proxy it
>
> __gshared auto dmdi = interpreter(dmdEngine());
>
> struct Dmd
> {
>     mixin Proxy!dmdi;
> }
> export auto dmd()
> {
>     Dmd d;
>     return d;
> }
>
> That is pretty much required if you want to maintain state across.
>
> Also I'm working on a D kernel for Jupyter notebook which should be done soon.


Thank you very much for your feedback. Unfortunately, none of the above worked.
By the way, the reason I'm trying all this is to create a Jupyter notebook. I've already made a simple version of it some time ago (https://github.com/nikoskaragiannakis/d-jupyter-kernel). Since you are also working on a D kernel, maybe we could work together?
August 05, 2018
On Sunday, 5 August 2018 at 20:01:22 UTC, Nikos wrote:
> On Tuesday, 31 July 2018 at 09:09:11 UTC, Nicholas Wilson wrote:
>> On Sunday, 29 July 2018 at 18:14:31 UTC, Nikos wrote:
>>> But when I try to export the whole dmdEngine
>>>
>>>> export:
>>>>
>>>>    auto engine(char[] txt) {
>>>>            return interpreter(dmdEngine());
>>>>    }
>>>
>>
>>
>> Can you export an instance of `interpreter(dmdEngine())`?
>>
>> e.g.
>>
>> __gshared auto dmdi = interpreter(dmdEngine());
>>
>> export ref dmd()
>> {
>>     return dmdi;
>> }
>>
>> or if that doesn't work, proxy it
>>
>> __gshared auto dmdi = interpreter(dmdEngine());
>>
>> struct Dmd
>> {
>>     mixin Proxy!dmdi;
>> }
>> export auto dmd()
>> {
>>     Dmd d;
>>     return d;
>> }
>>
>> That is pretty much required if you want to maintain state across.
>>
>> Also I'm working on a D kernel for Jupyter notebook which should be done soon.
>
>
> Thank you very much for your feedback. Unfortunately, none of the above worked.
> By the way, the reason I'm trying all this is to create a Jupyter notebook. I've already made a simple version of it some time ago (https://github.com/nikoskaragiannakis/d-jupyter-kernel). Since you are also working on a D kernel, maybe we could work together?

Working example of Python calling D Repl is here.

https://github.com/kaleidicassociates/pydrepl


August 06, 2018
On Sunday, 5 August 2018 at 20:01:22 UTC, Nikos wrote:
> Thank you very much for your feedback. Unfortunately, none of the above worked.
> By the way, the reason I'm trying all this is to create a Jupyter notebook. I've already made a simple version of it some time ago (https://github.com/nikoskaragiannakis/d-jupyter-kernel). Since you are also working on a D kernel, maybe we could work together?

Sure https://github.com/thewilsonator/jupyterd

There are 5 main objects:

Channel, an abstraction over raw ZMQ sockets.
Interpreter, abstracted for debugging and also other kernels (I work for Laeeth and they have an internal language they wan't to use from this.)
Kernel, does the higher level network logic and calls the interpreter.
Message and Wire message are high and low level representation of the packet layout.

I'm currently trying to figure out why the message signing is bjorked (I swear it did use to work!), the IOPub channel fails intermittently (the worst kind) and the Shell/Control fails all of the time.

Any effort pointing out where I done something stupid is much appreciated (and I do mean something stupid, the last major hurdle was trying to figure out why the packets were going nowhere: turns out I was missing the routing prefix).

Are you on slack?