David,
  I concur that while progress has been made my meta-issues have not been
addressed.  I think that effectively addressing using the current model and
retaining something resembling API compatibility would be a huge task, and
probably would have meant that very little newness from a
feature-functionality could have been included in Scala 2.8.

-Erik

On Thu, Oct 1, 2009 at 8:34 PM, David Pollak
<feeder.of.the.be...@gmail.com>wrote:

> Martin and Philipp,
> My immediate problem is:
>
> http://groups.google.com/group/liftweb/browse_thread/thread/b3783e24b8417521/f89548ba1fa70319?hl=en&lnk=gst&q=oome#
>
> This has been a persistent problem with Scala Actors and I identified it
> last year in November or December.
>
> Philipp did the 2.7.4 release which did not address the issue.  The 2.7.5
> release was supposed to address the issue, but the use of Lift Actors masked
> the issue until the above issue was raised.  I left my 2.7.5 related
> discussions with Philipp with the impression that the java.util.concurrent
> library was being used for thread pooling rather than the FJ library.  On
> this, I backed out the Lift Actor changes from powering Lift's CometActors
> (Lift Actors power the long polling part of Lift).
>
> On Wed, Sep 30, 2009 at 8:18 AM, martin <oder...@gmail.com> wrote:
>
>>
>> About actors in Scala 2.8:
>>
>>  . they have been refactored substantially compared to what's in the
>>   2.7.x branch
>>  . Philipp has sent mails about this to scala-internals (05/31)
>>  . Philipp has invited DPP to look at the refactorings in 2.8 (07/21)
>> to which
>>   he responded positively.
>>
>
> I responded politely.  Granted this is not something I always do (note, I
> am not being facetious), but I simply said something like "looks good to
> me."
>
>
>>  . The ForkJoinPool in 2.8 is completely different from FJTask in
>>   2.7.5; it's the version that's going into JDK7. It has been
>>   battle-tested and should not suffer from any memory leaks.
>>
>
>
>
>
>>
>> The reason why Scala actors use the FJ framework is performance, in
>> particular on multi-core hardware. So we do not think it's a good idea
>> to go back to java.util.concurrent, except maybe for applications with
>> very specialized demands.
>>
>
> Do you have specific benchmarks that justify the tradeoff of baking in an
> external library (that could be as buggy as the one that's currently baked
> into Scala) versus java.util.concurrent?
>
>
>>
>> We think the main problem was that lift depends on Scala 2.7.x, and
>> that the actor refactorings have not gone into the 2.7.x branch.
>
>
> I did a code review of the 2.8 Actors.  I am not convinced that Erik's
> meta-concerns were addressed.  I will be happy to be more descriptive
> off-list.
>
>
>> The
>> result is that people have not noticed the changes. For example, most
>> of the issues that Erik raises in his blog post no longer apply to
>> Scala 2.8. Initially we wanted 2.8 to be out by now, but it's taken
>> much longer than we have foreseen, because some of the problems were
>> harder than initially thought. We are sorry to have left the 2.7
>> branch relatively unattended for so long. It's difficult for us,
>> though, to provide the resources to support two diverging branches in
>> parallel. More community support with backports etc could help.
>>
>
> While this is a nice thought, given the choice between debating with EPFL
> as to whether my changes are good enough or doing a Lift Actor
> implementation, I will opt for continuing to develop and maintain the Lift
> Actor library.  This gives Lift users the assurance that bugs will be fixed
> in a timely manner, that we can add features based on community need, and
> that we can work with other library authors to insure common interfaces.
>
>
>>
>> To fix the concrete issue at hand, we replaced FJTask with (a backport
>> of) java.util.concurrent.ThreadPoolExecutor in the Scala 2.7.x branch,
>> to be released as 2.7.7. That takes care of the memory leaks in
>> FJTask.
>>
>> Now to the larger picture. We are not at all wedded to Scala actors
>> here; after all it's just a library. If there are others which fulfill
>> some needs better, great! But we have to be honest to avoid confusion.
>> One of the main differences between Scala actors and lift actors and
>> Akka seems to be that only Scala actors provide nested receives, so
>> only Scala actors really let you avoid an inversion of control.
>
>
> Lift Actors allow for changing (and nesting) the message handler on a
> message-by-message basis and because the handler can be defined within a
> given partial function, it can close over the variables visible in that
> partial function.  Granted the syntax for doing so in Scala Actors is much
> more pleasing, the functionality exists with Lift Actors.
>
>
>
>
>> This
>> is a feature which complicates the implementation considerably, and
>> that's what all our main results are about. You might not care about
>> this particular feature in your code, and consequently you might
>> choose a different abstraction. But calling that abstraction simply
>> `actors' causes unnecessary confusion, in our opinion.
>
>
> Quoting from Wikipedia <http://en.wikipedia.org/wiki/Actor_model>:
>
> An actor is a computational entity that, in response to a message it
> receives, can concurrently:
>
>
>    - send a finite number of messages to other actors;
>       - create a finite number of new actors;
>       - designate the behavior to be used for the next message it
>       receives.
>
> Lift Actors do all of these things.
>
> I think it's a great thing that Philipp and the EPFL team introduced Actors
> to the JVM and Scala world.  I think the publications that you guys have
> written are nothing short of inspiring.
>
> But there is a difference between a research vehicle and something that can
> be used in production systems.  What Philipp has done is delivered a
> prototype and a vision of concurrency to the Scala community.  What Jonas
> and I have done is built production-quality systems based on that vision,
> our experience, and other systems we have used or observed.
>
> I would much prefer to free Philipp to do his pi calculus work (or whatever
> else inspires him) than maintain a library for me.  I want to see the next
> great thing he comes up with rather than making him my bug-fixing slave.
>
> Thanks,
>
> David
>
>
>
>> And that's not
>> good for the goal of convincing people that actors are a useful
>> concurrency abstraction. So, nothing against lift actors and Akka, but
>> we need to be precise about the tradeoffs. Maybe call them `flat
>> actors' or something like that.
>>
>
>
>
>
>>
>> Martin and Philipp
>>
>>
>>
>
>
> --
> Lift, the simply functional web framework http://liftweb.net
> Beginning Scala http://www.apress.com/book/view/1430219890
> Follow me: http://twitter.com/dpp
> Surf the harmonics
>
> >
>


-- 
http://erikengbrecht.blogspot.com/

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to