REPL semantics

Luís Marques luis at luismarques.eu
Thu Jul 12 22:17:29 UTC 2018


On Thursday, 12 July 2018 at 21:51:18 UTC, aliak wrote:
> Cool, is there on going work to sprucing up the D repl in the 
> dlang-community repo or is this a new attempt? Either way if 
> something is happening here then awesome!

Ah, that explains why my clone of drepl didn't compile: it was 
the Martin Novak's repo, not the D community one. Although on 
macOS it still doesn't compile, because of the lack of 
_rt_loadLibrary.

Regarding your question: I was investigating this as part of my 
own D-related compiler efforts (DHDL stuff), but it won't 
materialize into a D repl anytime soon. I actually never tried 
the existing REPLs, what are your issues with them?

> As for your question, hard to say me thinks. On the one hand, 
> being able to do this is nice:
>
> const int i = 3;
> const int j = 4;
> void complexCalculation() { use i and j }
> complexCalculation() // uses 3 and 4
> const int j = 5;
> complexCalculation // uses the new j
>
> On the other hand being able to redefine the name "j" as some 
> other type to use in some other computation without having 
> `complexCalculation` get messed up is also nice :)

I hadn't even considered *redefining* symbols, only overloading. 
cling doesn't support redefining. Mmmm...

> Which is how the swift repl works:
>
>   1> func f(_ a: Float) { print("f") }
>   2> f(3)
> f
>   3> func f(_ a: Int) { print("i") }
>   4> f(3)
> i
>   5> func foo(_ a: Float) { print("f") }
>   6> func bar() { print(foo(3)) }
>   7> bar()
> f
>   8> func foo(_ a: Int) { print("i") }
>   9> bar()
> f

Yeah, I had tried basically the same Swift example. But my point 
stands: I think that behavior can be explained by ease of 
implementation. Finding an example of the alternative would be 
much more interesting. Lacking that we are going to have to 
actually *think* about the problem ;-)

The examples with the dynamic languages are less relevant.


More information about the Digitalmars-d mailing list