[prev in list] [next in list] [prev in thread] [next in thread] 

List:       e-lang
Subject:    Re: [e-lang] "to" vs "method"
From:       Thomas Leonard <talex5 () gmail ! com>
Date:       2010-04-04 15:57:10
Message-ID: o2qcd53a0141004040857zc292c364u275097626795910d () mail ! gmail ! com
[Download RAW message or body]

On 3 April 2010 10:38, Kevin Reid <kpreid@mac.com> wrote:
> On Apr 3, 2010, at 5:06, Thomas Leonard wrote:
>
>> I just discovered that there are two ways of defining a method in E:
>>
>> def foo1 {
>>       to run() { return 3 }
>> }
>>
>> def foo2 {
>>       method run() { 3 }
>> }
>
> Yes. 'method' is intended as the 'internal' Kernel-E definition which
> doesn't magically bind any nouns. (For example, the expansion of fn {}
> does not use 'to'-equivalent.)
>
>> Interestingly, calling foo2() is between 3 and 10 times faster than
>> calling foo1(), depending on how deeply nested the call is:
>> ...
>> I guess this is because "to" uses __return, which is implemented by
>> throwing an exception in Java (so speed depends on the size of the
>> stack).

(note: I see Ejection overrides fillInStackTrace to do nothing, so I'm
not sure why it does depend on the stack depth now)

> Yes. Of course, an optimizing implementation should be able to
> eliminate this cost, either by recognizing that no nonlocal exit is
> necessary (the just-returning-a-value case) or by compiling simple
> cases into a cheap jump.

On further investigation, E already tries to do this optimisation (but
fails due to changes since it was written). I've put a patch up here:

http://gitorious.org/repo-roscidus/e-core/commit/b12fb657b92a376b264c45ca861b1d827af2c50e

Another change that helps a bit is getting ImportLoader to share the
slots in safeScope among all files in a vat:

http://gitorious.org/repo-roscidus/e-core/commit/e65743dae76a6d58c16f44af567b2d3c7ddaeb93

Together, they make my program about 10% faster.

I also tried removing the synchronized keyword from ImportLoader and
LazyEvalSlot (since they're no longer shared between threads) but that
didn't make any noticeable difference.

> E-on-CL does both (well, the latter provided the underlying CL
> cooperates).



-- 
Dr Thomas Leonard		ROX desktop / Zero Install
GPG: 9242 9807 C985 3C07 44A6  8B9A AE07 8280 59A5 3CC1
GPG: DA98 25AE CAD0 8975 7CDA  BD8E 0713 3F96 CA74 D8BA

_______________________________________________
e-lang mailing list
e-lang@mail.eros-os.org
http://www.eros-os.org/mailman/listinfo/e-lang

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic