Re: System.java Development Question

2018-08-04 Thread mr rupplin
Any help?


From: mr rupplin 
Sent: Friday, August 3, 2018 9:42:26 AM
To: Alan Bateman; core-libs-dev@openjdk.java.net
Subject: Re: System.java Development Question

This is an OpenJDK 9 build.  Can you explain?  I'm very interested in getting 
all the details understood.  Hey thanks!

MR

From: Alan Bateman 
Sent: Friday, August 3, 2018 9:38 AM
To: mr rupplin; core-libs-dev@openjdk.java.net
Subject: Re: System.java Development Question

On 03/08/2018 06:22, mr rupplin wrote:
> :
>
>
> We get the following after running a trivial Java program:
>
> Exception in thread "main" java.lang.UnsatisfiedLinkError: 
> java.lang.System.setMemoryAllocationListener0(Ljava/lang/memory/MemoryAllocationListener;)V
> at java.base/java.lang.System.setMemoryAllocationListener0(Native Method)
> at java.base/java.lang.System.setMemoryAllocationListener(System.java:261)
> at Hope.(Hope.java:19)
> at Hope.main(Hope.java:11)
>
>
> -- --
>
> Can we skip right to it?  What is the issue here?
>
Which JDK build is this? I can't tell if it has the map files used by
the linker (mapfile-vers in the case of libjava) or not. The map files
don't exist in the main line but they may exist if you are working on a
patch for a previous release.

-Alan


Re: 8143850: retrofit ArrayDeque to implement List

2018-08-04 Thread Peter Levart

Hi all,

On 08/04/2018 01:51 AM, Stuart Marks wrote:

Thanks, Patrick! This is very helpful.

Alex, others,

(Meta: I've been at JVMLS and the OpenJDK Committers' Workshop all 
week, and I'm on vacation next week, so I don't have much time to 
discuss this right now. However, I am interested in moving this forward.)


OK, so the API in this webrev essentially does a combination of the 
following:


1. Adds some List methods to ArrayDeque without having it implement 
List; and


2. Adds public ArrayDeque.List implementation of List as an AD subclass.

There are a variety of alternative API approaches that I think we 
should consider. Among them:


3. Add a List *view* of an ArrayDeque instance, e.g. returned by an 
asList() method. (I believe Martin has suggested this.)


4. Add a new top-level List implementation that is a subclass of 
ArrayDeque, that thus implements both List and Deque interfaces.


5. Same as 4, a top level class implementing List and Deque, but which 
contains an ArrayDeque instead of subclassing ArrayDeque.


6. Modify ArrayDeque to implement List, including changing the 
behavior of equals() and hashCode().


There are a bunch of tradeoffs among these alternatives that I don't 
have time to discuss right now, but they deserve discussion. I may 
also have missed some variations. Among the criteria for evaluation 
are 1) implementation sharing; 2) API footprint; 3) compatibility. 
(And also probably others.)


A couple other points:

* I'd like to set aside null support. We've been discouraging nulls in 
collections for years, so allowing null in a (conceptually) new 
collection sounds like a step in the wrong direction.


* Using an array sentinel to indicate an empty collection with default 
size, like ArrayList does, is a fine idea, but I think it complicates 
the discussion and the webrev. I'd suggest that it be factored out and 
considered separately.


As I've said previously, the main thing to decide is what we want the 
API to look like. A discussion of the pros and cons of the various 
alternatives I listed above (and others I might have missed) is 
therefore called for. I can discuss these further after I return, but 
meanwhile, if anyone has any thoughts in the tradeoffs here, please 
speak up.


Oh, and of course, thanks Alex for putting work into this proposal.

s'marks


I'm wondering if type inheritance here is a desired property. There are 
several past "mistakes" that don't play quite well and we have to live 
with like: Hashtable/Properties, java.util.Date/java.sql.Date | 
java.sql.Time | java.sql.Timestamp.


Creating a subclass of ArrayDeque that implements List might be a 
compatibility risk that is not much smaller than simply adding List 
interface to ArrayDeque itself. Sure if the creation/lifecycle of 
ArrayDeque[.List] instance is contained in the controlled way, the risk 
is minimized, but if the instance escapes across library boundary, it 
doesn't matter if List is implemented by a subclass or the ArrayDeque 
itself. Code using ArrayDeque type might reasonably assume there is a 
single implementation that behaves in the way it always did.


There's an example in existing Java API that allows code re-use but 
doesn't expose type inheritance: package-private AbstractStringBuilder 
with public subclasses StringBuffer and StringBuilder.


This is similar from API standpoint to Stuart's option #5, but might 
allow greater code re-use (less boilerplate as there would be no 
delegation code) and of course would be more space and time efficient.


What do you think?

Regards, Peter




On 7/31/18 12:21 PM, Patrick Reinhart wrote:

Am 31.07.2018 um 21:10 schrieb Patrick Reinhart:

Hi Alex,

I can do that for you 

-Patrick



Here it is:

http://cr.openjdk.java.net/~reinhapa/reviews/8143850/webrev

-Patrick