Hi all,
I agree that Generics are a very big advantage of
Java5, and
a decision in favor or against generics should likely
be made
early, before much new code / API is created for e4.
It's likely
that the decision needs to be considered separately for
various
layers (Equinox/Runtime vs. RCP vs. IDE,
particularly).
compatible binaries today. I'm not sure how good it is,
and
I'd assume that some strategic member(s) would rather
beef up Eclipse's own ecj rather than relying on a
SF project
it if we wanted to cross-compile.
That being said, is anybody from JDT core listening
here?
Is it technically feasible to compile 1.5 sources into
1.4
bytecode with ecj?
I'm wondering how we can best move this important
discussion
forward without burning everybody's time in flame wars.
I'd love to hear McQ's opinion on the
matters.
Cheers,
--
Martin Oberhuber, Senior Member of Technical
Staff, Wind River
Target Management Project
Lead, DSDP PMC Member
Guys,
Comments below.
Schaefer, Doug wrote:
There's a big difference between "under consideration"
and what will actually get done in e4. Even this discussion on
asynchronousity, while interesting and important, isn't likely to lead to
real code change, IMHO. There's a discussion
killer. :-P
And to compare this Java 4 versus 5
war War?
to something we in the embedded space are also familiar
with, how many APIs are C++ only and aren't based on a C layer. Java 5
will become ubuquitous when C++ does, which is pretty much
never. I can't comment on the C++ verses C
thing , other than to mention that Java killed the C++ IDE I was working on,
but I see no reason why a Java 5.0 version of the micro libraries for embedded
devices are an impossible thing. Talking to the compiler guys, I'm lead
to believe it's relatively trivial to cross compile Java 5.0 to 1.4 anyway;
it's just not allowed by the language. Goodness knows what Sun is
thinking...
Sorry, cranky today
:( I've got a pain in the neck myself...
Doug.
I hate to say it, but perhaps it's time
to admit that Eclipse community is too large and too divergent to be
served by a single platform. Blasphemer!
:-P
IMO,
this is already happening and the e4 effort is in fact a
fork. There are folks working very hard to ensure
it's not a fork. I.e., to ensure that your 3.x plugins will run on
4.0...
With the radical changes under consideration here, it's safe to say that
3.x is going to be around for a long long time I'm
not sure the radical changes are the cause, but it seems a fairly safe bet
nevertheless.
and
e4 is going to be competing for its users and
developers. It will be hard to split the
efforts...
Since e4's main selling point is innovation and lighter legacy load, the
decision on using Java 5 seems obvious to
me.
Yes, I made that point at the summit.
We can't make a legitimate claim to achieving a progressive modern API while
rejecting the modernization of the language itself. Raw types just
appear offensive when you've spent a great deal of time eliminating every
vestige of them as was the case for EMF...
But
to bring this back to asynchronous programming.
Nothing like an interesting digression into the
parallel between C++ and C compared to Java 5.0 and Java 1.4 to keep us
entertained. :-)
The
concurrency package can be and has been cloned for older jvms, but I think
generics are just as important.
I can't help but
bemoan how sad it is that there isn't a micro version for 5.0! That pain
in my neck gets worse just thinking about it. I hope it stays at neck
level...
Being
able to parametrize the return types in a future, callable, and a callback
interface makes a huge difference in making the code using them more
readable and less error prone. Some will argue it's
just sugar, but the point is, that there are those in the community of
consider this sugar to make a huge difference, so therefore it makes a huge
difference.
Still, using Java 5 is not an all or nothing decision, so I don't think
it's necessary to hold up development because there's no consensus on
it.
For the e4 UI work we're just starting to use
and 5.0 and consider things like cross compiling to 1.4 and back porting
portions of libraries to be a potential solution. It continues to be a
festering sore point though...
-Pawel
Ed
Merks wrote:
Pawel,
Lack of progress on the Java 5 front is
primarily an issue with Sun's failure to keep the micro versions moving
forward; perhaps that's more my opinion than a fact. I believe
that a 5.0 JVM is not significantly bloated compared to 1.4 and that
migrating the micro libraries to 5.0 would not have a bloating impact on
those either. It's pretty frustrating to see stagnation of Java in
one segment of the community. While some in the community focus on
what will be in Java 7.0 others are stuck feeling like they will never
be able to move beyond 1.4. >From an E4 perspective of wanting
to keep things lively, vibrant, modern, and forward-looking, it's
particularly frustrating. This case here is just a micro example
of it.
Pawel Piech wrote:
Hi
John, I didn't mean to sound so categorical, so I apologize for
that. As you mentioned in the bug it's likely parts or all of
platform will never move to Java 5, so preconditioning
improvements in Eclipse APIs on it is a bad idea. But whatever
new APIs are created in this area, it would be ideal if they were
designed in such a way that projects using Java 5 could still leverage
the concurrent package and generics without having compatibility
issues with rest of platform.
Cheers, Pawel
John
Arthorne wrote:
I didn't make the
connection between the CBFuture class Martin proposed and Java 5's
Future, so I didn't mean to compare the job API to the
java.util.concurrent API. I agree that java.util.concurrent does a
very good job of separating concerns and providing reusable
interfaces/classes that we could incorporate into the Job API and
other Eclipse APIs. I know you're already aware of it Pawel, but for
others who are interested there is an existing bug report about
making use of java.util.concurrent API in the jobs API: https://bugs.eclipse.org/bugs/show_bug.cgi?id=178278.
I've referenced this thread in the bug so that the information is
available when the day comes that we can use Java 5 there.
John
Hi John,
I don't think it's fair to compare just the
*Future* interface to the entire jobs API. Future is a single
purpose interface, used to synchronously access a result of an
asynchronous operation. Jobs API includes, in some form,
additional features found in the concurrent package: *Executor* -
In the concurrent package this is another single-purpose interface
which abstracts the task of running an operation using some
facility. In jobs API, this facility is implemented as a
thread pool, or a UI dispatch loop when using UIJob.
*Callable* - It's basically a runnable with a return
value. In jobs API, this is the Job.run():IStatus method.
IMO, the killer feature of the concurrent package is that
you can pick and choose the elements to use as is, re-implement
other elements, and invent new elements as needed. With the
jobs API the choice is either all or nothing. Looking forward
in e4, or even 3.x, I hope that Eclipse can support the complete
java concurrent package as a layer either above or below the jobs
API. If it is above, then all that would be needed
is an Executor implementation which is a proxy to the current jobs
API, which would simply execute Runnables and Callables using Jobs.
If it is below, which I think is the more work/more gain
option, then the jobs API becomes a collection of components: -
JobManager becomes an Executor which accepts any Runnable or
Callable, where progress monitor and a scheduling rule are optional.
- A Job becomes just an implementation of
Callable<IStatus>. - UIJob is replaced by a separate
implementation of an Executor. -
etc. Supporting the java concurrent package would only
make the current jobs api functionality more convenient and
extensible. The larger goal for e4 should be to make
asynchronous programming in Eclipse easier and safer. To that
end we'd need additional standard APIs for things like callbacks and
realms, and more importantly we'd need good tooling for validating
and debugging asynchronous systems.
Cheers, Pawel
John Arthorne wrote:
There doesn't seem to be
much difference between the future construct you describe and the
Job API. You can attach listeners to jobs which seems to be the same
as your Callback mechanism. Future.waitFor() is the same as
Job.join(), and Future.get() is similar to Job.getResult(). I did
actually have futures in mind when designing the jobs API, with the
job's "result" being the payload returned from the asynchronous
operation. I initially made this result of type Object so clients
could pass back whatever return value they wanted. I then perhaps
mistakenly switched the result type to IStatus, thinking that
clients could return sub-types of Status containing any result
object they wanted. This is why I specified almost nothing for the
return value of Job#run and Job#getResult, leaving it as a mechanism
for clients to communicate whatever they want back to the caller.
In reality it didn't end up being used this way, because
people fell into the common coding patterns around IStatus and just
returned the usual OK/ERROR results.
So, I'm wondering if
there's something fundamental missing from Jobs that makes these
asynchronous coding patterns difficult, and is there some
incremental improvement we can make to Jobs to make it as expressive
and useful as your Future construct? If not, the
org.eclipse.core.jobs bundle could still perhaps be a home for such
an API, since it obviously needs a backing thread pool
implementation with support for progress monitors, etc.
John
Martin Oberhuber wrote
on 10/30/2008 04:47:02 PM:
> Hi Scott, Pawel and
all, > > it looks like this Thread has long left the
resources/EFS > aspect of things, and moved to a more general
discussion > about infrastructure for asynchronous coding
patterns. > > I'd thus like to make the discussion more
general. We > seem to agree that there needs to be some base
infrastructure > for asynchronous coding patterns, and
(perhaps even more > important) API Documentation for how to
properly use that > infrastructure. If this base
infrastructure is unified, > we all win. > >
Thanks Scott for volunteering to offer your expertise > as
well as contributions. What could be the next steps > towards
making it happen? I'm assuming that the base > infrastructure
should be in Equinox. Is anyone from > the Equinox team
listening and could guide through > their process for
contribution? > > Assuming that Equinox is right, we
should perhaps first > find a proper place for this
discussion; then argue > about good infrastructure/patterns;
these need to be > backed by some actual usage somewhere.
Right now, it > looks like what we'll want is at least >
> Future (aka RequestMonitor,
AsyncExecutionResult) > Callback (aka Listener) >
Status/MultiStatus (async variant) >
Executor/Queue/Realm (for posting async Runnables/Callbacks >
in a well-known Thread) >
> along with some well-documented Exception types
(cancellation, > timeout) as well as Threading
paradigm. > > How to proceed from here? Potential
clients of async > certainly include DD/DSF and ECF, perhaps
Resources/EFS; > who else is interested in infrastructure for
async? > > Cheers, > -- > Martin Oberhuber,
Senior Member of Technical Staff, Wind River > Target
Management Project Lead, DSDP PMC Member > http://www.eclipse.org/dsdp/tm > > > > >
-----Original Message----- > > From: eclipse-incubator-e4-dev-bounces@xxxxxxxxxxx > > [mailto:eclipse-incubator-e4-dev-bounces@xxxxxxxxxxx] On > > Behalf Of Scott Lewis > > Sent:
Wednesday, October 29, 2008 7:06 PM > > To: E4 developer
list > > Subject: Re: [eclipse-incubator-e4-dev]
[resources] EFS, ECF > > and asynchronous > >
> > Hi Martin, > > > > Oberhuber,
Martin wrote: > > > Hi Scott, > > > >
> > to me, Futures and Listeners don't need to be a
contradiction. > > > > > > >
Before my further comments...I don't believe they are in >
> conflict either > > (that is, both can be used in
some cases as described by Martin). I > > guess I
sort of presented them as exclusive, but I didn't > >
really mean to > > have it be so. > > >
> > What's more interesting to me, is how to deal with
Progress. > > > When a Progress Monitor already exists
for the client, then > > > using it makes a lot of sense
even if the result is obtained > > >
asynchronously: > > > > > > final
CBFuture<IFileStore[]> childrenF = > >
myFileStore.list(myProgress); > > > childrenF.chain(new
Callback() { > > > public void
onDone(IStatus result) { > > > if
(result.isOK()) { > > >
handleResult(childrenF.get()); > > >
} > > > }; > > >
}); > > > > > > I'm using class "CBFuture"
as an "enhanced Future" that allows > > > registering
Callbacks. Using a Callback style of handling things, > >
> or CBFuture.waitFor() remains up to the client. Note that I'm
> > > using a "chain()" method to indicate that the
Framework/Future could > > > allow chaining multiple
callbacks such that one is exeucuted after > > > the
other. Also note how the callback retrieves the result of >
> > computation from the Future, and not from the callback
itself. > > > > > > > I agree
that the general issue of how to handle progress monitors is
> > tricky. Although I accept your ideas above as a
possible > > solution, I'm > > not sure whether
this is the 'right' mechanism or not for 'remote > >
progress monitoring'. I've been thinking about this for some
> > time, but > > still don't feel like I have a
good general solution for supporting > > IProgressMonitor
for remote procedures. > > > > > The problems
that I have seen with callbacks in our products > > > in
the past are listed on > > > > >
http://wiki.eclipse.org/E4/Pervasive_Themes#Becoming_More_Asynchronous > > > > > > * Much boilerplate code
- Closures would be nice to avoid explosion > > >
of anonymous inner classes, which could cause bloat > >
> > > > * Need clarification on what thread and in
what context the > > > callback will be
called > > > > > > * When debugging, it is
very hard to trace back the flow of > > >
operation across multiple callback invocations. It can even >
> > make debuging close to impossible unless some
Tracing > > > functionality for the callbacks is
built into the Framework > > > (we ended up doing
this in our commercial product). > > > > > >
* Exception handling needs to be clarified. Java6 Future
only > > > provides Future#isCanceled(), that's
not enough since the > > > result of an
operation might also be an exception. I'm > > >
introducint "Istatus result" above but that's also not > >
> optimal. > > > > > >
> I agree these are other issues...thanks. > > >
> > > > The synchronous variant needs more verbosity
writing it than > > > one would expect, because
cancellation and errors (exceptions) > > > need to be
handled, wrapped and potentially re-wrapped with > > >
Futures: > > > > > > final
CBFuture<IFileStore[]> childrenF = > >
myFileStore.list(myProgress); > > > try { > >
> handleResult(childrenF.get()); > > > }
catch(CancellationException e) { > > >
throw new OperationCancelledException(e); > > > }
catch(ExecutionExeption e) { > > > throw
new CoreException(new Status(/*.blabla*/)); > > >
} > > > > > > although that could perhaps be
simplified if we declared some > > > Eclipse specific
implementation of Future which throws the > > > kinds of
Exceptions that we already know (like CoreException > >
> embedding an Istatus) instead of the JRE's
ExecutionException > > > that's really alien to our
current code. > > > > > > >
Yes, I agree that these are issues. I also agree that it would
be > > useful to have Equinox-specific impls of Future
(which is really what > > the IAsyncResult interface was
meant to be and can/will > > change to be if > >
desired). Further, I've recently also realized that there
> > also should > > probably be something like
remote impls of > > IStatus/MultiStatus, as I've >
> been doing some remote mgmt interfaces (i.e. accessing and
managing a > > remote processes' OSGi framework, p2,
etc)...and it's clear > > to me that > > it is
going to be very helpful to support the usage of > >
IStatus/Multistatus as return values, as well as exceptions in
remote > > service access. I agree that
Future/IAsyncResult as well as > > IStatus/Multistatus and
exception types should be widely > > available (i.e.
> > in Equinox rather than redone/available in many
locations above > > Equinox). We (ECF) are willing
to contribute (and modify as desired) > > what we've done
in this area (e.g. IAsyncResult+impl, > >
RemoteStatus/RemoteMultiStatus, exception types) as desired. >
> > > Scott > > > > > >
> > > Cheers, > > > -- > > >
Martin Oberhuber, Senior Member of Technical Staff, Wind
River > > > Target Management Project Lead, DSDP PMC
Member > > > http://www.eclipse.org/dsdp/tm > > >
_______________________________________________ > > >
eclipse-incubator-e4-dev mailing list > > >
eclipse-incubator-e4-dev@xxxxxxxxxxx > > > https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev > > > > > > >
_______________________________________________ > >
eclipse-incubator-e4-dev mailing list > > eclipse-incubator-e4-dev@xxxxxxxxxxx > > https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev > > >
_______________________________________________ >
eclipse-incubator-e4-dev mailing list > eclipse-incubator-e4-dev@xxxxxxxxxxx > https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev
_______________________________________________ eclipse-incubator-e4-dev
mailing list eclipse-incubator-e4-dev@xxxxxxxxxxx https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev _______________________________________________ eclipse-incubator-e4-dev
mailing list eclipse-incubator-e4-dev@xxxxxxxxxxx https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev
_______________________________________________
eclipse-incubator-e4-dev mailing list
eclipse-incubator-e4-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev
_______________________________________________
eclipse-incubator-e4-dev mailing list
eclipse-incubator-e4-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev
_______________________________________________
eclipse-incubator-e4-dev mailing list
eclipse-incubator-e4-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev
_______________________________________________
eclipse-incubator-e4-dev mailing list
eclipse-incubator-e4-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev
|