public inbox for java@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: CHANGELOG and documentation
  2000-04-01  0:00   ` Tom Tromey
@ 2000-04-01  0:00     ` Bryce McKinlay
  2000-04-01  0:00       ` Tom Tromey
  0 siblings, 1 reply; 6+ messages in thread
From: Bryce McKinlay @ 2000-04-01  0:00 UTC (permalink / raw)
  To: Tom Tromey; +Cc: Anthony Green, mdw, java-discuss

Tom Tromey wrote:

> Anthony> I created a NEWS file a long time ago, but we don't maintain
> Anthony> it.  We probably should.
>
> I think we definitely should.  I think we should also add news entries
> to the news section of the front page.

Hows this?

  [ bryce ]

===================================================================
RCS file: /cvs/java/libgcj/libjava/NEWS,v
retrieving revision 1.3
diff -u -r1.3 NEWS
--- NEWS        1999/08/08 14:06:19     1.3
+++ NEWS        2000/01/19 22:57:55
@@ -2,6 +2,19 @@

 * libgcj now includes a bytecode interpreter.

+* Support for specifying java system properties, both compiled in to the
+application and at runtime via an environment variable.
+
+* Complete JDK 1.1 reflection support, including invocation.
+
+* Support for setjmp/longjmp (sjlj) exception handling has been added, as an
+alternative to the existing range-table based mechanism.
+
+* Throwable.printStackTrace() has been implemented.
+
+* Runtime.loadLibrary() has been implemented, and Class.forName() can now
+dynamically load shared objects in order to find a requested class.
+
 New in libgcj 2.95:

 * First public release


^ permalink raw reply	[flat|nested] 6+ messages in thread

* CHANGELOG and documentation
@ 2000-04-01  0:00 Matt Welsh
  2000-04-01  0:00 ` Anthony Green
  2000-04-01  0:00 ` Bryce McKinlay
  0 siblings, 2 replies; 6+ messages in thread
From: Matt Welsh @ 2000-04-01  0:00 UTC (permalink / raw)
  To: Tom Tromey; +Cc: java-discuss

Hello all,

Can I make a few suggestions that might help make the status of gcj
development more obvious to newcomers? Even though I follow these mailing
lists closely, I often have problems keeping track of all of the activity.
Also, I'd rather not download and build the latest and greatest gcj
snapshots all the time, since I'm essentially doing deep hacking within
the gcj runtime and this exposes me to instabilities in the code.

First, I keep seeing references to various nice features of later versions of
gcj, however, as someone doing ongoing development using gcj it's hard for
me to track what's changing from release to release. Would it be possible
to post the CHANGELOG for both the 2.95.1 branch and the snapshot branch
somewhere on the website?

Another question I have is about gij. I tried unsuccessfully to use this
a couple of months ago, and I remember it being significant work to get
to the point where I had a gij-enabled build and test environment. At the
time gij didn't appear to work at all; it would simply crash. 

Although I've asked before, I'm still quite unclear on what gij does and
how it works. Does it impose a performance hit? Does it allow dynamic
class loading? Is all code interpreted or only some "bootstrap" code? 
Is there documentation anywhere? If not, would it be possible for 
someone with the appropriate experience to write it up and post it?

I like the informal nature of the FAQ and how it's been updated with some
postings to this list; that's good. Still, it would be nice to have a more
comprehensive list of missing features from gcj and libgcj. Such a list
would help newcomers know in advance what they're getting into -- and
also encourage those who want to do some hacking by pointing out the major
areas that need work. Right now it's very hard to tell what works with gcj
and what doesn't. Perhaps someone should also post their positive gcj
experiences so we can demonstrate that gcj really does work. As it is now
gcj's a real "black box" until you've spent some time playing with it!

Here's the start of such a list - feel free to put this on the website and
invite contributions. For each of these bullets there should probably be
an explanatory note as to why the feature is missing and what it would take.

GCJ and libgcj missing features (1/18/2000):

	* Inner classes - only when compiling from source. Compiling inner
	  classes from bytecode works. [Is that true?]

	* Reflection (java.lang.reflect.*). [Can someone elaborate?]

	* Object serialization (java.io.ObjectInputStream and 
	  java.io.ObjectOutputStream classes). There are several free
	  implementations of this which could be incorporated.

 	* Remote Method Invocation (RMI). A full RMI implemention relies
	  upon reflection, serialization, as well as a set of other libraries.
	  See FAQ section 2.6 for details.

	* Java Native Interface (JNI). GCJ uses its own native interface,
	  CNI, which is easier to use and to debug. However, JNI support
	  should probably be added eventually. See FAQ sections 2.2 and 2.3.

	* Dynamic class loading. [What are the issues here? Does gij 
	  effectively solve this problem? If so is there a performance hit?]

	* AWT. There are free AWT implementations, but they depend upon
	  JNI. See FAQ section 2.4.

	* Swing. This depends upon AWT. Since Swing is implemented 
	  entirely in Java, it should be possible to use it once AWT is
	  there, however, there are licensing issues. See FAQ section 2.5.

	* [Others?]

Of course, the web page should mention that volunteers are sought to work on
these missing features! 

Do others think that some of the above things would help?

Cheers,
Matt Welsh

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: CHANGELOG and documentation
  2000-04-01  0:00     ` Bryce McKinlay
@ 2000-04-01  0:00       ` Tom Tromey
  0 siblings, 0 replies; 6+ messages in thread
From: Tom Tromey @ 2000-04-01  0:00 UTC (permalink / raw)
  To: Bryce McKinlay; +Cc: Tom Tromey, Anthony Green, mdw, java-discuss

Bryce> Hows this?

Looks good -- check it in!

It seems like there might be more things that are still missing.
Offhand I can't think of one; I just have a nagging feeling...

T

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: CHANGELOG and documentation
  2000-04-01  0:00 ` Anthony Green
@ 2000-04-01  0:00   ` Tom Tromey
  2000-04-01  0:00     ` Bryce McKinlay
  0 siblings, 1 reply; 6+ messages in thread
From: Tom Tromey @ 2000-04-01  0:00 UTC (permalink / raw)
  To: Anthony Green; +Cc: mdw, tromey, java-discuss

Anthony> I created a NEWS file a long time ago, but we don't maintain
Anthony> it.  We probably should.

I think we definitely should.  I think we should also add news entries
to the news section of the front page.

Matt> * Reflection (java.lang.reflect.*). [Can someone elaborate?]

Anthony> Reflection works, including invocation, under both x86 and
Anthony> PPC Linux.  Feedback from others is encouraged.

Yes, reflection ought to work anywhere there is a libffi port.  We
just haven't tested it anywhere else.

Tom

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: CHANGELOG and documentation
  2000-04-01  0:00 CHANGELOG and documentation Matt Welsh
  2000-04-01  0:00 ` Anthony Green
@ 2000-04-01  0:00 ` Bryce McKinlay
  1 sibling, 0 replies; 6+ messages in thread
From: Bryce McKinlay @ 2000-04-01  0:00 UTC (permalink / raw)
  To: Matt Welsh; +Cc: Tom Tromey, java-discuss

Matt Welsh wrote:

> As it is now gcj's a real "black box" until you've spent some time playing with
it!

I agree that something of a user manual is needed eventually, certainly in time
for the next release. I imagine that it would be written in Docbook or some
similar XML/SGML based format and would supersede most of the existing html
documentation fragments on the sourceware site. Here's a draft toc I wrote up
indicating the sort of things that might go into it:

gcj/libgcj: User and developer guide
====================================

overview of the gcj environment

  supported APIs
  missing features
  differences with traditional VM environments
    - binary compatibility rules
  performance indications

installation guide

  overview
  supported platforms
  the compiler (gcc)
    - "configure" options
  the runtime library (libgcj)
    - "configure" options [threads, gc, sjlj/exceptions, interpreter]

using the gcj compiler

  compiling java source
  building a shared library
  specifying java system properties
  list of command line options
  examples

garbage collection: boehm-gc

  configuring heap size parameters

the bytecode interpreter

  overview
  gij, command syntax etc

API notes

  Dynamic class loading:
    Class.forName()
    Runtime.loadLibrary()
  etc

Debugging & Profiling

Compiled Naked Interface (CNI)
  (this would include Per's existing CNI docbook stuff)
  examples

Hacking guide

  how to port the threads/file/signal layer, from existing htdocs
  various "how it works" information



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: CHANGELOG and documentation
  2000-04-01  0:00 CHANGELOG and documentation Matt Welsh
@ 2000-04-01  0:00 ` Anthony Green
  2000-04-01  0:00   ` Tom Tromey
  2000-04-01  0:00 ` Bryce McKinlay
  1 sibling, 1 reply; 6+ messages in thread
From: Anthony Green @ 2000-04-01  0:00 UTC (permalink / raw)
  To: mdw; +Cc: tromey, java-discuss

Matt wrote:
> Can I make a few suggestions that might help make the status of gcj
> development more obvious to newcomers?

Looking for votes?.... :-)

---- IMPORTANT ANNOUNCEMENT --------------------------------------------

Matt was recently nominated for a Slashdot beanie award in the "Best
Newbie Helper" category.  The award comes with a nice prize, so please
go and vote for him...

http://slashdot.org/article.pl?sid=00/01/18/0848209&mode=thread

------------------------------------------------------------------------

> First, I keep seeing references to various nice features of later versions of
> gcj, however, as someone doing ongoing development using gcj it's hard for
> me to track what's changing from release to release. Would it be possible
> to post the CHANGELOG for both the 2.95.1 branch and the snapshot branch
> somewhere on the website?

Have you seen:

http://sourceware.cygnus.com/cgi-bin/cvsweb.cgi/libgcj/libjava/ChangeLog?cvsroot=java&only_with_tag=HEAD

This will let you generate a nice diff of the ChangeLog between HEAD
and libgcj-2_95_1-release.

Maybe we could put a link to this in an obvious place.

I created a NEWS file a long time ago, but we don't maintain it.
We probably should.

> Another question I have is about gij. I tried unsuccessfully to use this
> a couple of months ago, and I remember it being significant work to get
> to the point where I had a gij-enabled build and test environment. At the
> time gij didn't appear to work at all; it would simply crash. 

There was period of time where GCC exception handling was badly broken
in the presence of shared libraries.  We eventually worked around it
in libgcj, and GCC has since been fixed.

The interpreter is now enabled out of the box for x86 Linux.  It
should work just fine.  In fact, when testing libgcj changes I often
find it faster to build/run my test code with

$ gcj -C test.java && gij test

> Although I've asked before, I'm still quite unclear on what gij does and
> how it works.

The gij program is just a driver around libgcj and actually does very
little.  I think you must really be wondering about the bytecode
class loader and interpreter.  These are part of libgcj.

> Does it impose a performance hit? 

One of the primary goals of the interpreter Kresten implemented was to
not impose a performance hit on compiled code.  The compiler assumes
that each method call is to compiled code.  When we load class files,
we create vtables on the fly and populate them with pointers to
dynamically generated thunks.  These thunks extract function arguments
from the right places and invoke the bytecode interpreter.  There's
additional hackery for calls to compiled code from the interpreter.
From the end-user's point of view this should all be invisible.

> Does it allow dynamic class loading? 

libgcj will dynamically load and interpret class files.  As of this
week, it will also dynamically load and execute natively compiled code
from shared libraries.  Class.forName() will try to load a series of
shared objects in order to find the requested class.  If a class
`gnu.quux.whatever' is requested, libgcj will first look for
`gnu-quux-whatever.so', then `gnu-quux.so', and finally `gnu.so'.

It's important to note that all of these features are available to
just about any gcj compiled program.  They are properties of libgcj,
not gij.

> Still, it would be nice to have a more comprehensive list of missing
> features from gcj and libgcj.

Yes.

> 	* Inner classes - only when compiling from source. Compiling inner
> 	  classes from bytecode works. [Is that true?]

This is true - although Alex is making good progress on compiling
inner classes from source.

>	* Reflection (java.lang.reflect.*). [Can someone elaborate?]

Reflection works, including invocation, under both x86 and PPC Linux.
Feedback from others is encouraged.  Tom has added reflection tests to
Mauve, and Joerg Brunsmann recently posted his experiences.

> 	* Object serialization (java.io.ObjectInputStream and 
> 	  java.io.ObjectOutputStream classes). There are several free
> 	  implementations of this which could be incorporated.

We're pretty much waiting for Stallman to bless the Classpath
licensing change and then we can incorporate Geoff Berry's
implementation.

> 	* Remote Method Invocation (RMI). A full RMI implemention relies
>	  upon reflection, serialization, as well as a set of other libraries.
>	  See FAQ section 2.6 for details.

Tim Wilkinson says that he has an RMI implementation (not derived from
NinjaRMI) that he will license under the GPL+exception and assign to
the FSF.

This is all good advice. 

Thanks,

AG

-- 
Anthony Green                                                        Red Hat
                                                       Sunnyvale, California

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2000-04-01  0:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-04-01  0:00 CHANGELOG and documentation Matt Welsh
2000-04-01  0:00 ` Anthony Green
2000-04-01  0:00   ` Tom Tromey
2000-04-01  0:00     ` Bryce McKinlay
2000-04-01  0:00       ` Tom Tromey
2000-04-01  0:00 ` Bryce McKinlay

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).