First I just want to emphasize that this proposal doesn't necessarily have full endorsement yet from Marshall, Eddie, et al. so I won't comment on the strategic roadmap questions. I'm just attempting to make the case for a direction which to me seems very natural.

Logically UIMA is an object graph with some fixed type system, rooted in one or more collections with different ordering/uniqueness rules. These are all things Java provides out-of-the box, with a highly evolved heap/GC engine and numerous powerful SDK collection classes. Thus I would argue the most simple and "obvious" way to implement the UIMA specification would be a thin layer on top of these existing constructs, and there would need to be quite a compelling reason to deviate significantly from this.

I completely understand that in the past such reasons existed, but it's now 10 years later and JVMs and hardware have moved on considerably. I'm fairly certain that those reasons are no longer valid today, and yet we are still paying the cost of significant complexity for something with more limitations than we would have otherwise. By carving out static chunks of heap and doing a proprietary form of "memory management" within them it prevents the JVM from optimizing how/where this data is stored and collected. This is very much working against how the JVM was designed to be used.

The standard UIMA (non-JCas) CAS APIs allow typesystem-agnostic based CAS manipulation, so my understanding is that the only reason for performing low level or direct heap access is to get better performance out of the current array-based impl. I was assuming such usage would be rare by users of UIMA in general, but I could be wrong and it's useful to know people out there like you are doing it. I'd argue though the fact that it is even necessary is another reason for changing the approach (given that a goal of UIMA is to minimize effort required by NLP developers). Could you elaborate on your usage of internal APIs?

Regarding serialization formats, each of them is just a well-defined serial representation of a CAS, so should not be affected by the runtime implementation. I do understand that the current binary formats derive from the CAS array internals, but it doesn't mean that this new impl couldn't read/write that same format. I expect here specifically there may be a relative performance impact because of the 'reconstruction' of the heaps that would be needed, however: - In a way, keeping the CAS in this form in memory could be seen as optimizing for speed of this specific binary format at the expense of slower and less flexible runtime CAS access - Alternative binary serialization mechanisms (and formats) could also be used similar to standard java object serialization, which I expect would be just as fast (although not default java serialization which is very inefficient) - I'd question in any case whether this alone should dictate the overall architecture choice

I was my impression in the past, that UIMA-Core has always valued compatibility very high, even to the point of adding switches to re-enabled buggy/undesired behavior in case somebody depended on it.

I understand this, and I think I managed to keep things functionally identical. I'm not proposing any change in behaviour.

Changing the implementation of the CAS is probably the most radical idea I've seen so far in this project.

It might be radical in terms of the implementation change but again I would argue it's really just a simplification of the internals. It shouldn't be radical at all for users of UIMA in general.

Are we going to slay the holy cow of compatibility now and if yes at which levels?

Even for this change, the source incompatibility only applies to JCas cover classes, and only to those because of their current implementation-specific format.

What does such a change mean to the various sub-projects (DUCC, UIMA-AS, RUTA, uimaFIT)?

As long as these projects don't directly manipulate the CAS arrays, there should be zero impact to them apart from I would hope some performance benefits. It would also mean in future they could exploit the thread-safe nature of the CAS for various purposes.

Regards,
Nick

Quoting Richard Eckart de Castilho <[email protected]>:

On 03.04.2015, at 22:51, Marshall Schor <[email protected]> wrote:

It may be good to open a "Brainstorming" Jira, and attach the code you're
thinking of donating, so that people could study it and have a more concrete
idea about this.

If it eventually gets accepted, we would also need a Software Grant for this, I
think, due to the size.

I was my impression in the past, that UIMA-Core has always valued compatibility very high, even to the point of adding switches to re-enabled buggy/undesired behavior in case somebody depended on it. Changing the implementation of the CAS is probably the most radical idea I've seen so far in this project. In principle, I very much like seeing UIMA to evolve, but I do wonder how such a radical change is imagined to be undertaken.

I'm aware that there are various levels of compatibility. My impression so far was that source-compatibility was typically not sufficient in the past.

Are we going to slay the holy cow of compatibility now and if yes at which levels?

Is there some willingness now to consider setting up a road-map for a UIMA-Core version 3?

What does such a change mean to the various sub-projects (DUCC, UIMA-AS, RUTA, uimaFIT)?

Personally, I'd be curious to see how much of e.g. DKPro Core or WebAnno breaks with such a new implementation. I imagine quite a lot since I've become quite fond of binary serialization and internal API usage lately (in some cases I might be able to switch to official low-level CAS API...). Although I'm very much for evolution and adopting newer technologies, I'm afraid testing this (and potentially fixing stuff) will be quite time intensive. Given that in my context, most of the benefits are not very relevant so far, such testing would only make sense to me if it was part of a larger strategic change - and I think that a properly licensed contribution would be pretty much a pre-requisite to even look at it in detail.

Marshall, Eddie, and Nick do you have some vision of a strategic UIMA roadmap that you can share with us?

Cheers,

-- Richard


Reply via email to