trait to get the body code of a function?

Alex sascha.orlov at gmail.com
Thu Jul 26 13:27:09 UTC 2018


On Thursday, 26 July 2018 at 11:54:39 UTC, Mr.Bingo wrote:

>> The string itself could be useful however... Whatever OP has 
>> in mind with this string...
>
>
> Having a code block is useful in many ways simply because not 
> having it is the most limiting case. If one doesn't have it and 
> requires it then it is impossible for them to do what they 
> want. If one does have it and has no need, then no loss. Lots 
> of people like to err on the side of "caution" which is really 
> the side of limitations and frustrations and laziness. Of 
> course, sometimes things should be limited, but I think this is 
> probably not one of those cases(I see no harm in allowing meta 
> code to get a function body and, say, create another function 
> based off it but a slight change.
>
> For example, one could mutate algorithms and run genetics 
> algorithms on them to see how function scan evolve. This might 
> lead to genetic ways to assemble programs. In any case, one 
> can't do it since one can't get at a functions body.
>
> For example, maybe one wants a way to debug a mixin:
>
> mixin("int x;"); <- can't debug
>
> void foo()
> {
>    int x;
> }
>
> mixin(funcBody!foo) <- can debug since we defined foo outside 
> of the mixin and the compiler see's it naturally.

I'm with you in this part.

>> I would argue, just because of "type safety" you mentioned, D 
>> should not allow one to get the function body. The type safety 
>> is not achievable because of
>> https://en.wikipedia.org/wiki/Lambda_calculus#Undecidability_of_equivalence
>
> What the hell does that have to do with anything? I don't know 
> what you are talking about when it comes to "type safety" and 
> equivalence. What I am talking about is being able to parse the 
> function body in a type safe way rather than having to hack 
> strings or write a D parser oneself.
>
> Instead of
>
>     "int x;"
>
> one has <expression, <int, "x">>
>
> or whatever the parser parses in to(some type of AST).

I'll try to reformulate this.

Take the example given at
https://dlang.org/spec/function.html#closures
Paragraph 2.

Now, examine the contents of functions abc and def.

Does the functionality differ? For sure not.
Does the compiler knows it? It is not guaranteed.

The article I cited and the literature behind it state, that in 
general, an equivalence of function contents can not be tracked. 
However, to state for a function to be equal with another 
function exactly this is needed. And I thought you meant this by 
"type safety"...


More information about the Digitalmars-d-learn mailing list