Scripting again.
Daniel Gibson
metalcaedes at gmail.com
Thu Dec 9 16:20:20 PST 2010
so schrieb:
>> I guess something like that is possible.
>>
>> I'd prefer something like
>> s.call("main", i);
>> and also
>> s.call("foo", 42, x);
>> though - so you can define multiple functions in a script and call them.
>>
>> Or maybe, with more magic and support within the D compiler
>> s.main(i);
>> s.foo(42,x);
>> But that means that the compiler needs to know the Script type, create
>> a class for each script that contains the functions called on the
>> script ("main", "foo"), create stubs for them that either do something
>> like call("foo",i) or, if no function foo with an appropriate
>> argument is found in the script, throws an exception..
>> Probably possible, but certainly not easy.
>> The first suggestion however (s.call("foo", i)) should be possible
>> without support in the D compiler, all the work would be done in the
>> Script class. Still not trivial, of course, especially with arguments
>> for called functions and their type etc.
>
> The actual use case in my scenario is manipulating your program. not
> necessarily the other way around.
>
> class ScriptBinary {
> void run() {..}
> }
>
> // [modules] is the list of modules you give access to script
> // if [modules] contains "std", script can access "std" and it is child
> modules.
> ScriptBinary compile(string filename, string[] modules, ...) {
> ...
> }
>
I think for a proper general purpose scripting solution (like one would expect
in std.script) both ways are needed.
But you're right, of course you need a way to tell the script what modules (and
maybe also functions/delegates so it can call local functions in your code,
but not all of them) it may access and how.
More information about the Digitalmars-d
mailing list